看到網上的帝國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); }
我們只需要處理官方方法里面的變量,把他們換成你自己的回調變量就可以了。