700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php 网上支付之易宝支付

php 网上支付之易宝支付

时间:2019-12-11 19:41:36

相关推荐

php 网上支付之易宝支付

目前有两种网上支付方式:

1、直接和银行对接

* 缺点是工作量大,而且需要资格审核

* 优点安全

2、和中间公司对接

* 缺点就是安全隐患

* 优点就是开发维护方便

易宝支付实现过程:

1、前提: 需要我们商家到易宝公司去注册账号

目前我们使用yeebay公司提供了用于测试的账号和密钥

账号 :$p1_MerId ="10001126856";

密钥: $merchantKey ="69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl";

2、开发界面

<html><head><meta http-equiv="content-type"content="text/html;charset=gb2312"/></head><form action="payConfirm.php"method="post"><table><tr><td colspan="4">订单号:<inputtype="text" name="p2_Order"/>支付金额:<inputtype="text" name="p3_Amt"/></td></tr><tr><td colspan="4">请选择支付银行</td></tr><tr><td><input type="radio"name="pd_FrpId" value="CMBCHINA-NET"/>招商银行</td><td><input type="radio"name="pd_FrpId" value="ICBC-NET"/>工商银行</td><td><input type="radio"name="pd_FrpId" value="ABC-NET"/>农业银行</td><td><input type="radio"name="pd_FrpId" value="CCB-NET"/>建设银行</td></tr><tr><td colspan="4"><inputtype="submit" value="确认支付"/></td></tr></table></form></html>

3、生成一个hmac签名串.

关键代码:

function HmacMd5($data,$key){// RFC 2104 HMAC implementation for php.// Creates an md5 HMAC.// Eliminates the need to install mhash tocompute a HMAC// Hacked by Lance Rushing(NOTE: Hackedmeans written)//需要配置环境支持iconv,否则中文参数不能正常处理$key =iconv("GB2312","UTF-8",$key);$data =iconv("GB2312","UTF-8",$data);$b = 64; // byte length for md5if (strlen($key) > $b) {$key = pack("H*",md5($key));}$key = str_pad($key, $b, chr(0x00));$ipad = str_pad('', $b, chr(0x36));$opad = str_pad('', $b, chr(0x5c));$k_ipad = $key ^ $ipad ;$k_opad = $key ^ $opad;return md5($k_opad .pack("H*",md5($k_ipad . $data)));}

4、开发确认支付页面

<html><head><metahttp-equiv="content-type"content="text/html;charset=gb2312"/></head><?phpinclude_once'Common.php';//这里我们获取用户提交的信息//1.获取订单号$p0_Cmd="Buy";$p1_MerId="10001126856";$p2_Order=$_REQUEST['p2_Order'];$p3_Amt=$_REQUEST['p3_Amt'];$p4_Cur="CNY";//商品名称$p5_Pid="";$p6_Pcat="";//种类$p7_Pdesc="";//商品介绍//这是易宝支付成功后,给url返回信息$p8_Url="http://localhost:80/myNetPayment/res.php";$p9_SAF="0";$pa_MP="";$pd_FrpId=$_REQUEST['pd_FrpId'];$pr_NeedResponse="1";//我们把请求参数一个一个拼接(拼接的时候,顺序很重要!!!!)$data="";$data=$data.$p0_Cmd;$data=$data.$p1_MerId;$data=$data.$p2_Order;$data=$data.$p3_Amt;$data=$data.$p4_Cur;$data=$data.$p5_Pid;$data=$data.$p6_Pcat;$data=$data.$p7_Pdesc;$data=$data.$p8_Url;$data=$data.$p9_SAF;$data=$data.$pa_MP;$data=$data.$pd_FrpId;$data=$data.$pr_NeedResponse;$merchantKey ="69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl";//hmac是签名串,是用于易宝和商家互相确认的关键字//这里我们需要使用算法来生成( md5-hmac算法)$hmac=HmacMd5($data,$merchantKey);?>你的订单号是<?phpecho $p2_Order; ?> 支付的金额是<?php echo $p3_Amt;?><!--把要提交的数据用隐藏域表示--><formaction="/app-merchant-proxy/node"method="post"><input type="hidden"name="p0_Cmd" value="<?php echo $p0_Cmd;?>"/><input type="hidden"name="p1_MerId" value="<?php echo $p1_MerId; ?>"/><input type="hidden"name="p2_Order" value="<?php echo $p2_Order; ?>"/><input type="hidden"name="p3_Amt" value="<?php echo $p3_Amt; ?>"/><input type="hidden"name="p4_Cur" value="<?php echo $p4_Cur;?>"/><input type="hidden"name="p5_Pid" value="<?php echo $p5_Pid?>"/><input type="hidden"name="p6_Pcat" value="<?php echo $p6_Pcat;?>"/><input type="hidden"name="p7_Pdesc" value="<?php echo $p7_Pdesc;?>"/><input type="hidden" name="p8_Url"value="<?php echo $p8_Url;?>"/><input type="hidden"name="p9_SAF" value="<?php echo $p9_SAF;?>"/><input type="hidden"name="pa_MP" value="<?php echo $pa_MP;?>"/><input type="hidden"name="pd_FrpId" value="<?php echo $pd_FrpId;?>"/><input type="hidden"name="pr_NeedResponse" value="<?php echo$pr_NeedResponse;?>"/><input type="hidden"name="hmac" value="<?php echo $hmac;?>"/><input type="submit"value="确认网上支付"/></form></html>

5、供易宝回调的页面

<?php//echo"支付成功!";include_once'Common.php';//获取从易宝支付网关返回的信息//$p1_MerId=$p1_MerId="10001126856";//就是自己的商号.$r0_Cmd=$_REQUEST['r0_Cmd'];$r1_Code=$_REQUEST['r1_Code'];$r2_TrxId=$_REQUEST['r2_TrxId'];$r3_Amt=$_REQUEST['r3_Amt'];$r4_Cur=$_REQUEST['r4_Cur'];$r5_Pid=$_REQUEST['r5_Pid'];$r6_Order=$_REQUEST['r6_Order'];$r7_Uid=$_REQUEST['r7_Uid'];$r8_MP=$_REQUEST['r8_MP'];$r9_BType=$_REQUEST['r9_BType'];$hmac=$_REQUEST['hmac'];//拼接$res_src="";$res_src=$res_src.$p1_MerId;$res_src=$res_src.$r0_Cmd;$res_src=$res_src.$r1_Code;$res_src=$res_src.$r2_TrxId;$res_src=$res_src.$r3_Amt;$res_src=$res_src.$r4_Cur;$res_src=$res_src.$r5_Pid;$res_src=$res_src.$r6_Order;$res_src=$res_src.$r7_Uid;$res_src=$res_src.$r8_MP;$res_src=$res_src.$r9_BType;$merchantKey = "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl";//对返回的结果进行md5-hmac加密处理,和返回的hmac签名串比较if(HmacMd5($res_src,$merchantKey)==$hmac){if($r1_Code==1){if($r9_BType==1){echo'交易成功!';echo'订单号为'.$r6_Order.'支付成功!'.'所付金额是'.$r3_Amt."易宝支付订单号".$r2_TrxId;echo'<br/>浏览器重定向';}elseif($r9_BType==2){echo'success';echo'<br/>交易成功!';echo'<br/>服务器点对点通讯';}}}else{echo"签名被篡改";}?>

强调:

防止用户反复刷新回调页面

方法很多,这里我就抛砖一个

/*//假设我们点卡充值//order表//id status14567 未付款//----gameCard表// idpwdbalance余钱// 12345 ???? 12$sql="updategameCard set banlance=balance+10 where id=12345";//更新数据库//1.根据订单的状态看看该订单是否付款if(订单付款否==false){$sql="updategameCard set banlance=balance+10 where id=12345";$sql="update order setstatus=已付款 whereid=14567"}else{//不搭理}*/

☞ 特别注意 易宝支付把各个银行用一个确定值,来表示(支付通道编码,具体如下)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。