当前位置:首页 > 帝国CMS学习

帝国CMS接入微信支付教程

作者:Shu | 时间:2019-03-30 | 栏目:帝国CMS学习 | 围观热度:2147

很早以前,网站都是使用的支付宝接口支付完成网站交易,随着微时代的到来 ,网站开始从原来的PC端转移为手机端做重点。微信支付已经是越来越多的网站不可缺少的一个支付交易选项。帝国CMS没有支持微信支付的接口,只能自己添加。那么我们该如何在自己的网站上接入微信支付接口呢?下边由Shu给你一一讲解。

1、拿到微信支付的四大参数

APPID          ——登录公众平台查看 
APPSECRET ——登录公众平台申请重置之后查看
MCHID        ——商户平台的ID
KEY              ——商户平台自己设置的KEY

APPID,APPSECRET两个参数在微信公众号后台-->开发-->基本配置获取,截图如下

MCHID商户ID则需要在微信商户平台的后台->账户中心->商户信息获取

KEY获取地址 https://pay.weixin.qq.com/index.php/account/api_cert 如下图:

2、微信后台配置

2.1业务域名、 JS接口安全域名、网页授权域名

这三个参数在同一个页面进行配置,配置方法也相同,直接填写域名即可。

2.2支付授权目录

以上三种支付不管用没用到,都填写吧,填写格式如下:
公众号支付:http://你的域名/e/payapi/wxpay/
扫码支付:http://你的域名/e/paypai/wxpay/native_notify.php (我的截图有误,不要参照我截图写的)
H5支付:你的域名

2.3 IP白名单设置

此设置在微信公众号后台->设置->安全中心 可以看到。把自己的服务器IP填写即可。

3、下载SDK文档

去微信下载php版本的sdk吧,下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 选择使用php版本
把里面的php_sdk_v3.0.9文件夹改成wxpay然后,放到/e/payapi/目录下

4、后台、微信文件配置

       4.1后台执行sql语句:增加微信支付接口
insert into [!db.pre!]enewspayapi(paytype,payname,paymethod) values('wxpay','微信支付',1);
其实我个有觉得这个没什么卵用,因为微信支付需要用到4个基本配置,而帝国CMS默认给了两个参数

所以我决定直接在配置文件里写死。这种做法主要是:1、不改官方文件 2、配置参数改动频率少
但是为什么我还要在后台添加这个接口的,主要是因为用户在选择支付的时候,可以选择到微信支付,然后调用到微信支付的相关文件而以。

       4.2微信文件配置
你可以选择自己修改/e/payapi/wxpay/example/WxPay.Config.php文件,也可以选择下载本人提供的WxPay.Config.php文件,然后把步骤1的4大参数填写进去

WxPay.Config.zip (2.07 KB)
主要配置的参数如下:

       4.3增加自定义文件
 在/e/payapi/wxpay/下添加to_pay.php文件,请下载to_pay.zip然后上传
       4.4修改文件
打开/e/payapi/wxpay/lib/WxPay.Api.php,找到第560行,561,将代码修改如下:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//严格校验
这步代码一定要修改,要不然会报错。

5、编写统一下单代码

微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html 范例代码如下:
<?php
//以下是帝国CMS微信扫码支付代码
require("../../../class/connect.php");
require("../../../class/db_sql.php");
include('../../payfun.php');
$link=db_connect();
$empire=new mysqlquery();

$ddid=getcvar('paymoneyddid');
if(!$ddid) {
    exit('您还未下单');
}

require "WxPay.NativePay.php";
$out_trade_no=time();
$productname="支付订单号:".$out_trade_no;
$productsay="订单号:".$out_trade_no;
//支付金额
$price=$ddr['tmoney'];
$input = new WxPayUnifiedOrder();
$input->SetBody($productsay); //订单内容
$input->SetAttach('ddid='.$ddid);//附加属性
$input->SetOut_trade_no($out_trade_no); //订单号
$input->SetTotal_fee(1);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("");//商品标记
$input->SetNotify_url(WxPayConfig::WEBURL."/e/payapi/wxpay/example/native_notify.php");
$input->SetTrade_type("NATIVE"); //交易类型
$input->SetProduct_id($ddid);//商品ID 必传
$notify = new NativePay();
$result = $notify->GetPayUrl($input); //返回值可以用print_r打印来看看
if(!$result['code_url']) {
    echo $result['err_code_des'];
    exit;
}

$url2 = $result["code_url"];
?>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>微信扫码支付</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/weui/1.1.3/style/weui.min.css">
    <link rel="stylesheet" href="https://cdn.bootcss.com/jquery-weui/1.2.1/css/jquery-weui.min.css">
</head>
<body>
<div id="pay-no">
   <div class="weui-form-preview">
      <div class="weui-form-preview__bd">
        <div class="weui-form-preview__item">
          <label class="weui-form-preview__label">商品名称</label>
          <span class="weui-form-preview__value"><?=$productname?></span>
        </div>
        <div class="weui-form-preview__item">
          <label class="weui-form-preview__label">产品说明</label>
          <span class="weui-form-preview__value"><?=$productsay?></span>
        </div>
      </div>
      <div class="weui-form-preview__hd">
        <label class="weui-form-preview__label">付款金额</label>
        <em class="weui-form-preview__value">¥0.01</em>
      </div>
    </div>
    <div style="width:300px;margin:20px auto;">
        <h3 style="color:#556B2F;text-align: center;margin:0;">请扫码支付</h3>
        <p style="text-align: center;margin:0;"><img alt="扫码支付" src="/e/payapi/wxpay/example/qrcode.php?data=<?php echo urlencode($url2);?>" style="width:200px;height:200px;"/></p>
    </div>

</div>

<div id="pay-yes">
   <div class="weui-msg">
      <div class="weui-msg__icon-area"><i class="weui-icon-success weui-icon_msg"></i></div>
      <div class="weui-msg__text-area">
        <h2 class="weui-msg__title">支付成功</h2>
        <p class="weui-msg__desc">您已经成功支付订单号:【<?=$ddid?>】余款</p>
      </div>

      <div class="weui-msg__opr-area">
        <p class="weui-btn-area">
          <a href="/e/member/cp/" class="weui-btn weui-btn_primary">去会员中心</a>
        </p>
      </div>
    </div>

</div>
<style>
    #pay-yes{display: none}
</style>
<script src="https://cdn.bootcss.com/jquery/1.11.0/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery-weui/1.2.1/js/jquery-weui.min.js"></script>
<script type="text/javascript">
var ddid='<?=$ddid?>';
if(ddid) {
    var timer = setInterval(function(){
         $.ajax({
             type:'post',url:'/e/payapi/wxpay/checkdd.php',data:{'enews':'checkDd','ddid':ddid},
             success:function(res){
                 if(res=='ok') {
                     $('#pay-yes').show();
                     $('#pay-no').remove();
                     clearInterval(timer);
                 }
             }
         })
     },1000)
}
</script>
</body>
</html>

检测订单代码范围如下:

<?php
    require("../../class/connect.php");
    require("../../class/db_sql.php");
    $link=db_connect();
    $empire=new mysqlquery();

    $post=$_POST['HTTP_RAW_POST_DATA']; //php7.0版本以下使用
    if(!$post) {
        $post= file_get_contents('php://input');
    }

    $fankuistr='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
    if(!$post) {
        echo $fankuistr;
        exit('Notify 非法回调');
    }

    libxml_disable_entity_loader(true); //禁止引用外部xml实体
    $xml = simplexml_load_string($post, 'SimpleXMLElement', LIBXML_NOCDATA);//XML转数组
    $post_data = (array)$xml;
    parse_str($post_data['attach'],$cs);
    if($cs['ddid']) {
        $r=$empire->fetch1("select * from {$dbtbpre}enewsshopdd WHERE ddid='$cs[ddid]' limit 1");
        if($r){
            $empire->query("update {$dbtbpre}enewsshopdd set haveprice=1 WHERE ddid='$cs[ddid]' limit 1");
        }

    }
    echo $fankuistr;
?>

以上只是扫码支付的支付范例代码,完整代码,请联系点击这里给我发消息购买。

最后送上微信公众平台支付接口调试工具地址,这对调用你的微信支付有一定帮助。
 

相关推荐
    无相关信息