看到网上的帝国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 ); function list_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);
然后我们还需要一个触发发起提交的表单,
<form method="get" name="gopay" id="gopay" style="display:none" action="平台提交地址"> <input name="orderId" id="orderId" type="text" value="<?=$payorderId?>" /> </form> <script> document.getElementById('gopay').submit(); </script>
4、最后就是回调处理了,同样也非常简单,直接就可以用帝国CMS原版的回调处理方法。
include('../payfun.php'); $pr=$empire->fetch1("select paymoneytofen,payminmoney from {$dbtbpre}enewspublic limit 1"); $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); }
我们只需要处理官方方法里面的变量,把他们换成你自己的回调变量就可以了。