淘东电商项目(53) -银联支付案例源码分析

引言

本文主要讲解银联支付官方测试案例,并分析银联支付的流程。

本文目录结构:
l____引言
l____ 1.导入银联支付项目
l____ 2.效果演示
l____ 3.代码流程分析

1.导入银联支付

1.首先去官网注册账号(已有账号可以忽略此步骤),官网的地址:https://open.unionpay.com/tjweb/acproduct/dictionary
在这里插入图片描述
2.注册成功后,登录,登录成功后,进入商户测试中心
在这里插入图片描述
3.进入测试中心,点击左侧测试参数,下载下面红框的4个证书,测试demo需要用到。
在这里插入图片描述
在这里插入图片描述
4.进入开放平台下载demo:https://open.unionpay.com/tjweb/acproduct/list?apiSvcId=448&index=4
在这里插入图片描述
5.使用IDEA导入java项目(如果不知道IDEA如何导入Eclipse项目,可以参考我的博客https://yanglinwei.blog.csdn.net/article/details/106014301),导入成功如下图:
在这里插入图片描述
注意:配置tomcat时,红色框的内容必须如下,因为demo的代码写死了,否则运行不了!!!坑
在这里插入图片描述

6.配置证书路径:打开acp_sdk.properties文件,配置证书路径地址(配置成你本地的路径存放证书的路径即可)
在这里插入图片描述

2.测试

运行项目,浏览器输入http://localhost:8080/ACPSample_B2C/,demo界面的css样式丢失了(没有去找原因,使用Eclipse导入应该是没问题的,可能是IDEA没有配好,不影响功能演示),直接按下图,依次点击“消费样例”->"消费"->"提交”
在这里插入图片描述
点击提交后,会先跳转到:http://localhost:8080/ACPSample_B2C/form_6_2_FrontConsume,如下:
在这里插入图片描述
然后再跳转到支付界面:
在这里插入图片描述
支付账号可以在开放平台里获取,如下:

卡号 卡性质 机构名称 手机号码 密码 CVN2 有效期 证件号 姓名
6216261000000000018 借记卡 平安银行 13552535506 123456 341126197709218366 全渠道
6221558812340000 贷记卡 平安银行 13552535506 123456 123 2311 341126197709218366 互联网

网关、WAP短信验证码 111111 控件短信验证码 123456

网上截图如下:
在这里插入图片描述
输入银行账号后,下一步,输入用户信息,点击确认付款:

在这里插入图片描述
付款成功,可以看到界面如下:
在这里插入图片描述
点击返回商户,可以看到返回的响应参数如下:
在这里插入图片描述

3.代码流程分析

下面来讲解代码运行原理。

1.首先项目启动时,会进入AutoLoadServlet这个类,这个类从应用的classpath下加载acp_sdk.properties属性文件并将该属性文件中的键值对赋值到SDKConfig类中
在这里插入图片描述
2.当点击提交订单时,会进入Form_6_2_FrontConsume这个代码,并对信息进行校验。

UI 对应代码
在这里插入图片描述 在这里插入图片描述

3.我们分析上一步的最后一行代码,可以看到返回的是一个HTML页面
在这里插入图片描述
HTML页面的代码通过断点获取,可以看到里面的内容如下(整理后):

<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
  <form id="pay_form" action="https://gateway.test.95516.com/gateway/api/frontTransReq.do" method="post">
   <input type="hidden" name="bizType" id="bizType" value="000201" />
   <input type="hidden" name="txnSubType" id="txnSubType" value="01" />
   <input type="hidden" name="orderId" id="orderId" value="20200509160810" />
   <input type="hidden" name="backUrl" id="backUrl" value="http://222.222.222.222:8080/ACPSample_B2C/backRcvResponse" />
   <input type="hidden" name="signature" id="signature" value="X2D6DAMvxPArQ4NIGPod45YkfLhIApFt8D5f5OVUVR3NV7EKhYMLSD4ndAT2brvdylwV0JmEeJ+jVzkJPZ1AjbXO9LEEkAHST5Pisx9aMvwgB563lCbLmsCoRaY3qVobmL6yHo2oA9kaaHLp1O54YudyAXa+xBZh+vgtsFHQ2LbOPAhjv0LeCm+tv8BlS7MJkRLZyqwu2XZLU0n9I2ADKqhWzxI9C91HUVJ5u0/vU2PSEhmS6FBA6TWyrZE7vIF9jjX0DvWz4T5yFtkcQYLDh6J4YBHIwMJpYDoYi70NrfowI6Z4/09eh88Cswv1pwh+dND7WFMEuBZF9W4cPNBu9g==" />
   <input type="hidden" name="txnType" id="txnType" value="01" />
   <input type="hidden" name="channelType" id="channelType" value="07" />
   <input type="hidden" name="frontUrl" id="frontUrl" value="http://localhost:8080/ACPSample_B2C/frontRcvResponse" />
   <input type="hidden" name="certId" id="certId" value="68759663125" />
   <input type="hidden" name="encoding" id="encoding" value="UTF-8" />
   <input type="hidden" name="version" id="version" value="5.1.0" />
   <input type="hidden" name="accessType" id="accessType" value="0" />
   <input type="hidden" name="txnTime" id="txnTime" value="20200509160810" />
   <input type="hidden" name="merId" id="merId" value="777290058110048" />
   <input type="hidden" name="payTimeout" id="payTimeout" value="20200509164025" />
   <input type="hidden" name="currencyCode" id="currencyCode" value="156" />
   <input type="hidden" name="signMethod" id="signMethod" value="01" />
   <input type="hidden" name="txnAmt" id="txnAmt" value="1000" />
   <input type="hidden" name="riskRateInfo" id="riskRateInfo" value="{commodityName=测试商品名称}" />
  </form>
  <script type="text/javascript">document.all.pay_form.submit();</script>
 </body>
</html>

4.可以看到返回的html,把内容都hidden了,浏览器自动解析,并提交,这时会跳转到银联支付的界面:
在这里插入图片描述
5.支付完成后,点击返回,可以看到会请求我们的前台地址(这个地址是在'acp_sdk.properties'里配置的)

点击“返回商户”:
在这里插入图片描述
跳转到配置的前台通知地址:
在这里插入图片描述

UI 代码
在这里插入图片描述 在这里插入图片描述

至此银联支付的源码讲解到此结束,具体的细节需要童鞋们自己断点去看。

本文完!

原创文章 2756 获赞 5261 访问量 70万+

猜你喜欢

转载自blog.csdn.net/qq_20042935/article/details/106013626