【php】会潮支付接口
关于ecpss支付接口站点套用。简而言之就是借用商城网站,对接没法申请支付接口的站点。
汇潮支付请求参数:
$MD5key MD5私号
$MerNo 商户号
$orderTime 交易时间
$BillNo 订单号
$Amount 订单金额
$ReturnURL [必填]返回数据给商户的地址(就是支付完成后的转跳页面)
$Remark 一般可以为空
$md5src = $MerNo."&".$BillNo."&".$Amount."&".$ReturnURL."&".$MD5key; //校验源字符串
$SignInfo = strtoupper(md5($md5src)); //MD5检验结果
$AdviceURL 服务器回调地址,后台用来接收参数,处理结果。
$defaultBankNumber 银行编号代码,如果需要制定特定银行的话,可以填写,如果不需要的话填305,一样可以选择银行。
以下为请求代码:
<span style="font-size:18px;"><?php $MD5key = ""; //MD5私钥 $MerNo = ""; //商户号 $time1=$_POST["Time"]; $BillNo =$_POST["Billno"]; //[必填]订单号(商户自己产生:要求不重复) $BillNo=date("YmdHis").$BillNo; $Amount =$_POST["Amount"]; //[必填]订单金额 $ReturnURL = ""; //[必填]返回数据给商户的地址(商户自己填写): $Remark = ""; //[选填]升级。 $md5src = $MerNo."&".$BillNo."&".$Amount."&".$ReturnURL."&".$MD5key; //校验源字符串 $SignInfo = strtoupper(md5($md5src)); //MD5检验结果 $AdviceURL =""; //[必填]支付完成后,后台接收支付结果,可用来更新数据库值;和ReturnURL接受的支付结果是一样的,这个是异步接受的。 $orderTime =$time1; //[必填]交易时间YYYYMMDDHHMMSS $defaultBankNumber ="305"; //[选填]银行代码s //送货信息(方便维护,请尽量收集!如果没有以下信息提供,请传空值:"") //因为关系到风险问题和以后商户升级的需要,如果有相应或相似的内容的一定要收集,实在没有的才赋空值,谢谢。 $products=""------------------物品信息 ?> <html> <head> <title>Payment By CreditCard online</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <form action="https://pay.ecpss.com/sslpayment" method="post" name="E_FORM"> <table align="center"> <tr> <td></td> <td><input type="hidden" name="MerNo" value="<?=$MerNo?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="BillNo" value="<?=$BillNo?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="Amount" value="<?=$Amount?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="ReturnURL" value="<?=$ReturnURL?>" ></td> </tr> <tr> <td></td> <td><input type="hidden" name="AdviceURL" value="<?=$AdviceURL?>" ></td> </tr> <tr> <td></td> <td><input type="hidden" name="orderTime" value="<?=$orderTime?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="defaultBankNumber" value="<?=$defaultBankNumber?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="SignInfo" value="<?=$SignInfo?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="Remark" value="<?=$Remark?>"></td> </tr> <tr> <td></td> <td><input type="hidden" name="products" value="<?=$products?>"></td> </tr> </table> <p align="center"> <input type="submit" name="b1" value="支付"> </p> </form> </body> <script> document.E_FORM.submit(); </script> </html> </span>当然我们需要在站点下用POST传给支付网站参数让他提交,可以用form表格也可以用CURL 具体我就不说,可自行百度。
接下来就是我们的回调了,在支付完成后,银行会提示转跳$ReturnURL地址。然后汇潮会给支付网站后台传参,也就是$AdviceURL 地址。
如果我们试套用支付网站转跳的话可以写传参代码,如果不是的可以直接处理数据了。
一下为传参代码:
<span style="font-size:18px;"><?php $data = $_POST; $curl = curl_init();//初始化curl $url=""; curl_setopt($curl,CURLOPT_URL,$url);//访问地址 curl_setopt($curl,CURLOPT_POSTFIELDS,$data); curl_setopt($curl,CURLOPT_TIMEOUT,100); $a =curl_exec($curl); curl_close($curl);</span>我们的$ReturnURL,和$AdviceURL 都可以用该代码转跳,只需输入不同的传参地址就好。
$ReturnURL传参到站点地址下可以这样写:
<span style="font-size:18px;">public function ecpssre(){ header("Content-type: text/html; charset=UTF8"); echo "pay ok"; exit; }</span>
TP 框架,用别的框架的可以根据自己的框架自己写。
$AdviceURL传参到站点地址下可以这样写:
<span style="font-size:18px;"><span style="font-size:24px;"> public function ecpssad(){ // if(empty($_POST)){ // $this->error("参数错误"); // } //订单号 $MD5key = ""; $BillNo = $_POST["BillNo"]; //金额 $Amount = $_POST["Amount"]; //支付状态 $Succeed = $_POST["Succeed"]; //支付结果 $Result = $_POST["Result"]; //取得的MD5校验信息 $SignMD5info = $_POST["SignMD5info"]; //备注 $Remark = $_POST["Remark"]; $md5src = $BillNo."&".$Amount."&".$Succeed."&".$MD5key; $md5sign = strtoupper(md5($md5src)); //检测是否执行到账 if($SignMD5info==$md5sign){ //$Succeed="88"; // if($Succeed=="88"){ if($Succeed=="88"){ $pay_id=substr($BillNo,14); $mo=M(); $mo->execute("set autocommit=0"); $mo->execute("lock tables tablename write,movesay_user_coin write"); $re=array(); $res=$mo->table("</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px;">tablename </span></span><span style="font-size:24px;">")->where(array("tradeno"=>$pay_id))->find(); //dump($res); if($res["status"]==1){ exit(); } if(!$res){ //$this->error("找不到订单"); //$mo->execute("rollback"); exit(); }else{ $czdata["status"]="1"; $czdata["addtime"]=time(); //dump($czdata); $re[]=$mo->table("")->where(array("tradeno"=>$pay_id))->save($czdata); $re[]=$mo->table("tablename")->where(array("userid"=>$res["userid"]))->setInc("cny",$Amount); //检测返回结果 if (check_arr($rs)) { $mo->execute("commit"); $mo->execute("unlock tables"); // $this->success("充值成功"); }else{ $mo->execute("rollback"); // $this->error("到账失败"); } } } } return false; }</span></span>
支付的时候一共要注意两点:
1.传入商品订单时,为了完成一个订单在我们服务器上一次提交,可继续支付,一定要在套用网站的$BillNo参数 加上一个永不重复的值。例如:date("YmdHis").$BillNo;
因为汇潮那边一个订单只可以支付一次。
2.接服务器端处理数据是一定要加一个订单状态用来检测,数据处理完毕立马改变状态,因为汇潮会多次补单,这样会造成充一次钱加多次钱的状况!
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。