1、北京传智播客教育 ,php网上支付技术,讲师:韩顺平 email: qq: 927381850,北京传智播客教育 ,两种接入方案,直接与银行对接通过中间公司间接与银行对接,北京传智播客教育 ,直接与银行对接,这种方式接方式的优缺点: 优点:因为直接与银行进行财务结算,交易资金结算比较安全。适合资金流量比较大的企业,这种方案适合于:每月结算金额佰万以上的企业。 缺点:开发工作量比较大,而且银行会不定期升级交易系统,随着银行系统的升级,企业也需要作相应改动,所以维护工作量也是比较大的,而且企业每年还需要向银行交纳一定数量的接口使用费。,企业,招商银行,建设银行,工商银行,其他,北京传智播客教育
2、,通过中间公司间接与银行对接,这种方式接方式的优缺点: 优点:开发工作量较少,因为使用的是中间企业提供的接入规范,所以银行升级系统,不需要企业作相应修改,除非中间企业的接入规范发生了改变,企业才作相应修改。相对前一种接入方案,这种方案的维护工作量比较少的。因为只与一家企业对接,所以接入费用相对比较低。这种方案适合于:每月结算金额在几十万以下的中小企业。 缺点:因为是与中间企业进行资金结算,目前所有中间企业都是私企,资金安全是个大问题。,企业,招商银行,建设银行,工商银行,其他,中间企业,北京传智播客教育 ,网上支付通过中间支付公司与银行对接,目前在国内做的比较好的中间支付公司:首信易支付:ht
3、tp:/ http:/ e龙网、巴巴运动网使用了易宝支付。,* 易宝支付和支付宝比较:,北京传智播客教育 ,以巴巴运动网演示支付流程,* 实例演示,小心扣钱!,北京传智播客教育 ,易宝支付接口交互-uml,北京传智播客教育 ,易宝支付协议介绍,(1).支付请求是HTTPS协议请求,商户以GET或POST方式发送到易宝支付。 (2).易宝支付平台统一使用GBK/GB2312编码方式。 (3).参数名称和参数说明中规定的固定值必须与列表中完全一致(大小写敏感)。,北京传智播客教育 ,开发自己的网上支付平台,这里图形界面说明.,支付通道编码值,是事先确定的, 不能随意!,北京传智播客教育 ,开发自己
4、的网上支付平台,北京传智播客教育 ,开发自己的网上支付平台-易宝支付流程分析(图),支付流程: 通过https请求方式向易宝支付网关发起一个支付请求,简单地说就是向https:/ ,开发自己的网上支付平台-如何获取商户编号和密钥,首先要到yeepay去注册一个商家用户账号,然后获取商户编号,北京传智播客教育 ,开发自己的网上支付平台-如何获取商户编号和密钥,北京传智播客教育 ,易宝支付请求参数说明,正式请求地址:https:/ ,易宝支付请求参数说明,北京传智播客教育 ,易宝支付请求参数说明,北京传智播客教育 ,md5-hmac说明,名词MD5-hmac: hmac 是一种密钥验证算法。hma
5、c 提供的数据完整性和源身份验证完全取决于密钥分配的范围。如果只有发起者和接收者知道hmac 密钥,那么这就对两者间发送的数据提供了源身份验证和完整性保证。本例给大家提供了该算法的加密类: function HmacMd5($data,$key); 第一个参数为加密的原文,第二个参数为密钥。 * $data 是请求参数值拼接而成. * $key 是yeepay 提供给商家的(这是我们使用yeepay提供的测试),北京传智播客教育 ,md5-hmac说明,function HmacMd5($data,$key) / RFC 2104 HMAC implementation for php. /
6、Creates an md5 HMAC. / Eliminates the need to install mhash to compute a HMAC / Hacked by Lance Rushing(NOTE: Hacked means written) /需要配置环境支持iconv,否则中文参数不能正常处理 $key = iconv(“GB2312“,“UTF-8“,$key); $data = iconv(“GB2312“,“UTF-8“,$data); $b = 64; / byte length for md5 if (strlen($key) $b) $key = pack(
7、“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);,北京传智播客教育 ,对支付请求的数据加密生成md5-hmac签名串,getReqHmacString ()方法用于生成md5-hmac签名串 function getR
8、eqHmacString($p0_Cmd,$p2_Order,$p3_Amt,$p4_Cur,$p5_Pid,$p6_Pcat,$p7_Pdesc,$p8_Url,$p9_SAF,$pa_MP,$pd_FrpId,$pr_NeedResponse) include merchantProperties.php; #引入#进行签名处理,一定按照文档中标明的签名顺序进行$sbOld = “;$sbOld = $sbOld.$p0_Cmd; #加入业务类型$sbOld = $sbOld.$p1_MerId; #加入商户编号$sbOld = $sbOld.$p2_Order; #加入商户订单号 $sb
9、Old = $sbOld.$p3_Amt; #加入支付金额$sbOld = $sbOld.$p4_Cur; #加入交易币种$sbOld = $sbOld.$p5_Pid; #加入商品名称$sbOld = $sbOld.$p6_Pcat; #加入商品分类$sbOld = $sbOld.$p7_Pdesc; #加入商品描述$sbOld = $sbOld.$p8_Url; #加入商户接收支付成功数据的地址$sbOld = $sbOld.$p9_SAF; #加入送货地址标识$sbOld = $sbOld.$pa_MP; #加入商户扩展信息$sbOld = $sbOld.$pd_FrpId; #加入支付
10、通道编码$sbOld = $sbOld.$pr_NeedResponse; #加入是否需要应答机制return HmacMd5($sbOld,$merchantKey);,现在我们有了网上开发 的基础知识,动手实际 开发吧!(界面参看前面给 出的),北京传智播客教育 ,向易宝发起支付请求,你的订单是:,需要支付的金额是:元 ,北京传智播客教育 ,易宝支付结果参数说明,只有支付成功时易宝支付才会通知商户。 支付成功回调有两种,都会以GET形式通知到在线支付请求参数中的p8_Url上: 浏览器重定向 服务器点对点通讯 关于两种通知和业务处理说明:如果用户在支付成功后,并没有通知商家而是直接关闭了重
11、定向的窗口,那么重定向就不会通知到商户,不管用户是否重定向通知到商户,服务器点对点通知都会通知到商户,所以在callback页中r9_btype=1和r9_btype=2的两种通知类型中都要进行业务处理。并注意处理重复订单的问题,以防两次通知都处理了相同的业务造成损失。,返回结果串形式: http:/localhost/netpayment/res.php?p1_MerId=10001126856&r0_Cmd=Buy&r1_Code=1& r2_TrxId=519012323476777H&r3_Amt=0.01&r4_Cur=RMB&r5_Pid=&r6_Order=234500f& r7
12、_Uid=&r8_MP=&r9_BType=1&ru_Trxtime=20110720171206&ro_BankOrderId=0543803575& rb_BankId=CMBCHINA-NET&rp_PayDate=20110720171158&rq_CardNo=&rq_SourceFee=0.0& rq_TargetFee=0.0&hmac=2daaaf0930e6d6e02416a81ba0972675,北京传智播客教育 ,易宝支付结果参数说明,北京传智播客教育 ,易宝支付结果参数说明,北京传智播客教育 ,易宝支付结果参数说明,北京传智播客教育 ,获取支付结果信息,# 取得返回串中
13、的所有参数$p1_MerId=“10001126856“;/就是自己的商号.$r0_Cmd=$_REQUESTr0_Cmd; $r1_Code=$_REQUESTr1_Code; $r2_TrxId=$_REQUESTr2_TrxId; $r3_Amt=$_REQUESTr3_Amt; $r4_Cur=$_REQUESTr4_Cur; $r5_Pid=$_REQUESTr5_Pid; $r6_Order=$_REQUESTr6_Order; $r7_Uid=$_REQUESTr7_Uid; $r8_MP=$_REQUESTr8_MP; $r9_BType=$_REQUESTr9_BType;
14、$hmac=$_REQUESThmac;,北京传智播客教育 ,对支付结果返回的数据加密生成md5-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_sr
15、c=$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 浏览器重定向;elseif($r9_BType=2)echo success;echo 交易成功!;echo 服务器点对点通讯;elseecho “签名被篡改“;,如何防止,点卡 反复充值问题?,北京传智播客教育 ,完整案例,