⽀付接⼝java服务器,JAVA⽀付接⼝开发——⽀付
(⽰例代码)
⽀付接⼝开发——⽀付
这⼏天在做⽀付服务,系统接⼊了⽀付宝、、银联三⽅⽀付接⼝。个⼈感觉⽀付宝的接⼝开发较为简单,并且易于测试。
关于数据传输,是⽤xml,所以需要对xml进⾏解析。
1、⽀付的⼏种接⼝
付款码⽀付、JSAPI⽀付、Native⽀付、APP⽀付、H5⽀付、⼩程序⽀付。⼏种⽀付⽅式都是⼤同⼩异。
2、⽀付流程
基于APP⽀付来说,⽀付的⼤体流程:
1、APP客户端根据⽤户⽀付请求,将订单信息(订单号,⾦额等)传⾄后台服务器
2、后台服务器根据订单信息,拼装统⼀下单接⼝需要的请求参数。其中⽐较重要的参数为appid、mch_id、nonce_str、sign、out_trade_no、total_fee、notify_url。
这⾥参数拼装需要根据提供的签名算法
假设请求参数为:
"appid":"wxd930ea5d5a258f4f"
"mch_id":"10000100"
"body":"test"
代码转换"nonce_str":"ibuaiVcKdpRxkhJA"
需要将以上参数按照规则先拼装成String
key值按照ASCII从⼩到⼤排序(A->Z),key=value形式并⽤&连接
String a = "appid=wxd930ea5d5a258f4f&mch_id=10000100&body=test&nonce_str=ibuaiVcKdpRxkhJA"
拼接API密钥 key 是商户平台设置的密钥key
signStr = a + "&key=192006250b4c09247ec02edce69f6a2d"
MD5签名(转⼤写) 注:默认为MD5签名,也⽀持HMAC-SHA256签名⽅式
sign=MD5(signStr).toUpperCase()
//最终得到sign = "9A0A8659F005D6984697E2CA0A9CF3B7"
然后sign继续按照规则(A->Z)拼装进String中。
java中可以⽤map完成排序
Map paramsMap = new TreeMap(String::compareTo);
paramsMap.put("appid", APP_APP_ID);
......
//完成签名得到sign
paramsMap.put("sign",sign);
最后需要将参数转化成xml格式的string进⾏接⼝请求
![CDATA[wxd930ea5d5a258f4f]]
![CDATA[10000100]]
![CDATA[1000]]
![CDATA[ibuaiVcKdpRxkhJA]]
![CDATA[9A0A8659F005D6984697E2CA0A9CF3B7]]
3、⽀付统⼀下单的接⼝地址为:h.weixin.qq/pay/unifiedorder
java中可以利⽤httpclient进⾏post调⽤。参数即之前拼接完成的带sign签名参数。
得到⽀付接⼝的返回值也同样是xml格式的数据,需要我们将其转成便于操作的map型数据。
返回的数据包含了return_code、return_msg。
return_code只有SUCCESS和FAIL,这是通信成功与否的标识,⾮业务标识。
只有return_code是SUCCESS时,才会有其他数据返回包括result_code,sign等。
若result_code业务标识也同样为SUCCESS时候才说明⽅预付单⽣成成功。
这时会返回我们⽀付业务需要的prepay_id预⽀付会话id。
注意: 这⾥需要我们进⾏sign签名验证,以保证数据安全性
4、将通过验签的prepay_id等信息返回给APP客户端。此时APP端可以调起⽀付接⼝,
调起了⽀付窗⼝,让⽤户完成⽀付操作。
然后端会根据之前设置的notify_url异步通知地址,进⾏调⽤。通知服务端⽀付情况。
3、总结
⽀付接⼝开发还涉及到订单的相关业务(查询,关闭),以及退款等相关业务。
⽀付主要需要先了解其业务流程,然后就是调⽤⽀付的接⼝,其中就是参数的拼装与验签。
这部分可以抽取成⼀个⼯具类,⽐如mapToXml(),xmlToMap(),md5()等等。最后根据接⼝⽂档中返回的数据判断进⾏业务操作。
最后吐槽⼀下,测试号没有提供⽀付测试环境,需要真实的服务号。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。