教程:如何整合第三方支付接口到帝国CMS的二次开发中
帝国CMS二次开发整合第三方支付接口教程:首先,登录帝国CMS后台,找到“模块”菜单,点击“支付接口”,选择需要整合的第三方支付接口。然后,根据接口文档,配置支付参数,如商户号、密钥等。接下来,编写支付回调处理函数,用于接收第三方支付平台的支付结果通知。最后,将支付接口模块添加到网站模板中,用户在网站下单时,即可通过调用支付接口完成支付操作。整个过程需要一定的编程基础和对帝国CMS的了解。
看到网上的帝国CMS第三方支付接口资源很少,菜鸡源码就分享一篇关于帝国cms二次开发整合第三方支付接口教程,我们只分享大致思路,可以让你在开发中少走弯路,教程仅供参考学习。
1、首先我们需要知道自己找的第三方支付平台的支付提交发起方法和支付成功后回调方法,每个支付平台的方法都不同。所以在开发前,最好先去仔细查看支付平台的文档,最好支付平台有SDK参考。
2、一般的支付发起方法都是post 或 GET方法,提交到接口需要哪些字段,我们就调用哪些字段给接口就行,平台一般大致需要的字段有下面这些,整理给大家。
支付方式:
$php_Self=substr($_SERVER['PHP_SELF'],strripos($_SERVER['PHP_SELF'],"/")+1);if($php_Self=='BuyGroupPay.php'){$phome='BuyGroupPay';}
异步或同步回调地址:
$paykey=$payr['paykey'];$notify_url=$PayReturnUrlQz."你的回调地址/payend.php";$return_url=$PayReturnUrlQz."你的回调地址/payend.php";
支付金额:
$price=$money;
支付订单号:
$orderid=$ddno?$ddno:time();esetcookie("checkpaysession",$orderid,0);
支付方式:
if($payr['paytype']=='wxpay'){$channel='1';}else{$channel='2';}
sign签名验证:
$sign=md5($orderid.$phome.$channel.$price.$paykey);
3、有了提交内容,我们就需要发起提交了,大致的POST或GET方法如下,大家也可以自己网上找。
$pay_url='平台提交地址';$parameter=array('payId'=>$orderid,'param'=>$phome,'type'=>$channel,'price'=>$price,'sign'=>$sign,'notifyUrl'=>$notify_url,'returnUrl'=>$return_url);functionlist_url($url,$data){$data=json_encode($data);$headerArray=array("Content-type:application/json;charset='utf-8'","Accept:application/json");$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$url);curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($curl,CURLOPT_POST,1);curl_setopt($curl,CURLOPT_POSTFIELDS,$data);curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);$result=curl_exec($curl);curl_close($curl);return$result;}$pay_data=json_decode(list_url($pay_url,$parameter),true);
然后我们还需要一个触发发起提交的表单,
<formmethod="get"name="gopay"id="gopay"style="display:none"action="平台提交地址"><inputname="orderId"id="orderId"type="text"value="<?=$payorderId?>"/></form><script>document.getElementById('gopay').submit();</script>
4、最后就是回调处理了,同样也非常简单,直接就可以用帝国CMS原版的回调处理方法。
include('../payfun.php');$pr=$empire->fetch1("selectpaymoneytofen,payminmoneyfrom{$dbtbpre}enewspubliclimit1");$orderid=$_GET['trade_no'];//支付订单$ddno=$_GET['out_trade_no'];//网站的订单号$money=$_GET['total_fee'];$fen=floor($money)*$pr[paymoneytofen];if($phome=='PayToFen')//购买点数{$paybz='购买点数:'.$fen;PayApiBuyFen($fen,$money,$paybz,$orderid,$user[userid],$user[username],$paytype);}elseif($phome=='PayToMoney')//存预付款{$paybz='存预付款';PayApiPayMoney($money,$paybz,$orderid,$user[userid],$user[username],$paytype);}elseif($phome=='ShopPay')//商城支付{include('../../data/dbcache/class.php');$ddid=(int)getcvar('paymoneyddid');$paybz='商城购买[!--ddno--]的订单(ddid='.$ddid.')';PayApiShopPay($ddid,$money,$paybz,$orderid,'','',$paytype);}elseif($phome=='BuyGroupPay')//购买充值类型{include("../../data/dbcache/MemberLevel.php");$bgid=(int)getcvar('paymoneybgid');PayApiBuyGroupPay($bgid,$money,$orderid,$user[userid],$user[username],$user[groupid],$paytype);}
我们只需要处理官方方法里面的变量,把他们换成你自己的回调变量就可以了。