【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.接服务器端处理数据是一定要加一个订单状态用来检测,数据处理完毕立马改变状态,因为汇潮会多次补单,这样会造成充一次钱加多次钱的状况!
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
