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

简介: 淘东电商项目(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 代码

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

目录
相关文章
|
Dubbo 网络协议 安全
【Dubbo 解析】Dubbo 支持哪些协议,它们的优缺点有哪些?
【1月更文挑战第11天】【Dubbo 解析】Dubbo 支持哪些协议,它们的优缺点有哪些?
|
Linux Docker 容器
|
算法 数据安全/隐私保护
一文详解 RSA 非对称加密算法
非对称加密算法指的是 加、解密使用不同的密钥,一把为公开的公钥,另一把为私钥。 公钥加密的内容只能由私钥进行解密,反之由私钥加密的内容只能由公钥进行解密。也就是说,这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容只能由对方进行解密。
9898 1
|
Ubuntu
树莓派 —— 关闭安装软件包时ubuntu对内核版本等的检查
树莓派 —— 关闭安装软件包时ubuntu对内核版本等的检查
|
存储 监控 安全
【深度】2023年磁带市场迎来“二级存储”的新时代
磁带是最环保的存储技术,可以显著降低数据中心运营的碳排放和电子废物。结合改进的访问时间、更快的数据速率、50年的介质寿命、最低的TCO、最高的设备可靠性以及巨大的可持续性优势,现代磁带有望在走向ZB时代的巨大需求中发挥最大潜力。磁带已经明确地成为二级存储的首选。
947 0
【深度】2023年磁带市场迎来“二级存储”的新时代
|
Java 大数据 Go
Go vs Java:在大数据处理领域的性能对比
Go与Java在大数据处理中各有特点。Go启动快,内存占用少,静态类型及并发模型(goroutine和channel)使其在并发性能上有优势。Java虽然启动慢,JVM内存占用高,但拥有丰富的生态系统和并发工具。代码示例展示了Go的goroutine和Java的线程池处理大数据的场景。在性能上,Go可能更优,但Java的跨平台性和生态广度使其仍被广泛应用。
|
算法
简记二分算法模板与代码案例:整数二分和浮点数二分
本文介绍了两种算法模板,分别是整数二分和浮点数二分。
163 0
|
Java Go C语言
高并发时代到底是Go还是Java?
作为一名用过Java和Go开发过微服务架构程序的在校学生的角度思考,本文将从以下几个方便来讲述Go和Java的区别。
|
存储 网络协议 Java
Linux本地MinIO存储服务远程调用上传文件
Linux本地MinIO存储服务远程调用上传文件
|
SQL
淘东电商项目(55) -支付系统核心表设计
淘东电商项目(55) -支付系统核心表设计
413 0