由于公司App开发的支付需求,需要后台用Java来完成银联支付接入接口。
首先你要先进入银联开发登录地址open.unionpay.com
找到手机控件支付模块,完成相应的入网步骤
准备工作做完之后银联会对你发放相应的技术文档
这里由于银联所给的证书信息只有14天,所以要尽快下载,并且只能下载一次。
下载手机控件Demo就可以开始了,这里面IOS版本的和安卓版本的任意一个都可以,都有我们需要的后台开发样例
将下载下来的Demo仔细阅读开发联调步骤向导中的
三、后台开发步骤
1. 打开后台开发包,找到对应语言\示例代码文件夹,看下readme.txt,按步骤部署、修改配置文件等。
2. 其中Form_6_2_AppConsume的接口可获取tn,请跟客户端开发确定一下后台和app间传递tn的方式,最简单的方法就是直接在页面打印tn,不过部分语言直接仅打印tn的时候会带换行符,建议手机开发在收到tn的时候trim一下。
3. 后续参考readme完成。
(此时已经有了大体思路知道该怎么做了,就是通过下面的类得到 tn 返还给Android或者IOS前台人员,剩下的就是他们根据相应下载的控件来调取银联支付接口的事情了,是不是so easy)
我们首先先来运行一下Demo,在脑海中首先形成一个流程的概念
工程运行之后访问http://localhost:8080/ACPSample_AppServer/
输入钱数,点击消费。
会返回给我们一个报文,这里面有你的请求信息以及应答信息
在这里我们可以清楚的看到有个神奇的tn
这就是他们要的
找到Demo中的这个类,不得不说银联很是牛逼,方便大家接入直接用servlet来写
这里需要注意的一点是他在加载servlet容器时注释的SDKConfig加载配置文件的代码
@Override
public void init(ServletConfig config) throws ServletException {
/**
* 请求银联接入地址,获取证书文件,证书路径等相关参数初始化到SDKConfig类中
* 在java main 方式运行时必须每次都执行加载
* 如果是在web应用开发里,这个方法可使用监听的方式写入缓存,无须在这出现
*/
//这里已经将加载属性文件的方法挪到了web/AutoLoadServlet.java中
//SDKConfig.getConfig().loadPropertiesFromSrc(); //从classpath加载acp_sdk.properties文件
super.init();
}
由于他在web.xml中配置了autoLoadServlet在项目一起动的时候就运行此servlet,会自动执行被挪到web/AutoLoadServlet.java中的加载配置文件信息,所以在自己使用调用的时候不要忘记加载配置文件相关信息。
<servlet>
<servlet-name>autoLoadServlet</servlet-name>
<servlet-class>web.AutoLoadServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
下面就可以进行接入了,首先现将Demo中给的银联接入所需要的工具类导入自己的工程,否则复制下面的代码会报错。
在你需要接入支付的业务处理层中加入如下代码。通过此段程序就可以将tn返给前台,这里我用的是json格式返回的。大家可以采用别种方式。
//加载配置文件
SDKConfig.getConfig().loadPropertiesFromSrc();// 从classpath加载acp_sdk.properties文件
//银联接入 要传入的参数
String referenceNumber = orderInfo.getOrder_number();//这里的订单id是根据自己的业务需求需要自行设置的
// 一分钱
String amount = "1";
Map<String, String> contentData = new HashMap<String, String>();
/***银联全渠道系统,产品参数,除了encoding自行选择外其