牛骨文教育服务平台(让学习变的简单)
博文笔记

【php】会潮支付接口

创建时间:2016-07-29 投稿人: 浏览次数:158

关于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.接服务器端处理数据是一定要加一个订单状态用来检测,数据处理完毕立马改变状态,因为汇潮会多次补单,这样会造成充一次钱加多次钱的状况!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。