支付接口说明
接口概述
荣e通平台基于荣e通用户,将强大的支付能力,通过接口等形式开放给第三方船公司,帮助第三方合作伙伴创建更具竞争力的应用。
通过接入荣e通平台,第三方合作伙伴可以获得更多的流量、用户和收益,而第三方合作伙伴提供的服务也让用户获得了更丰富的体验,平台生态更加繁荣,最终实现多方共赢。
如未做特殊说明,接口默认使用https协议。
适用范围:本接口规范仅适用于第三方船公司(简称:调用方)通过接口完成收款功能。
接口调用方式
调用方采用https协议通信,接口输入输出数据都是结构化的JSON数据格式。
调用地址 | |
数据传输方式 | post同步传输 |
提交数据 | 请求报文 |
返回数据 | 响应报文 |
注:接口参数中包含传入文件base64字符串的情况,如果为PDF文件,需要添加"data:application/pdf;base64,"前缀,如果为JPG文件,需要添加"data:image/jpg;base64,"
前缀
字段解释
1.returnUrl支付提交完成后返回页面
客户登录荣e通平台,确认支付完成后,通过此链接跳转到商户系统页面,同时会将支付数据推送至商户系统
返回结果数据均需要将数据签名返回商户系统
2.notifyUrl 支付结果通知地址
客户在荣e通平台支付完成后,荣e通平台会根据此链接将支付结果推送至商户系统
3.nonce 随机数
唯一的标识符,服务器能够防止请求被多次使用(记录所有用过的nonce以阻止它们被二次使用)
4.timestamp 时间戳
采用unix时间戳,保留到毫秒。
用于判断客户提交时间是否在有效时间内,如果超出15分钟则拒绝请求
5.accessKey 请求唯一标识
请求唯一标识由荣e通平台生成,并发放给商户使用,每个商户只分配一个请求唯一标识,且不能重复。
6.secretKey商户秘钥
商户秘钥由荣e通平台生成,并发放给商户使用,每个秘钥都与请求唯一标识对应,且不能重复。
接口签名方式
第一步:将请求参数(除sign之外)模型转换为json字符串(假设存在三个业务参数aparam、bparam、cparam)
strStep1={"aparam":"test1","bparam":"test2","cparam":"{\"subMember1\":\"对象模型内的字段1\",\"subMember2\":\"对象模型内的字段2\"}","accessKey":"xxxxxx","nonce":1000,"timestamp":10000100}
strStep1={"aparam":"test1","bparam":"test2","cparam":"{\"subMember1\":\"对象模型内的字段1\",\"subMember2\":\"对象模型内的字段2\"}","accessKey":"xxxxxx","nonce":1000,"timestamp":10000100}
第二步:将参数以key=value的格式拼接,并按照参数名ASCII字典序排序如下:
strStep2="accessKey=xxxxxx&aparam=test1&bparam=test2&cparam={\"subMember1\":\"对象模型内的字段1\",\"subMember2\":\"对象模型内的字段2\"} &nonce=1000×tamp=10000100"
strStep2="accessKey=xxxxxx&aparam=test1&bparam=test2&cparam={\"subMember1\":\"对象模型内的字段1\",\"subMember2\":\"对象模型内的字段2\"} &nonce=1000×tamp=10000100"
第三步:拼接API密钥:(secretKey为商户平台设置的访问密钥)
strStep3 = strStep2 +"&secretKey=192006250b4c09247ec02edce69f6"
strStep3 = strStep2 +"&secretKey=192006250b4c09247ec02edce69f6"
第四步:使用MD5算法加密第二步拼接好的明文,将加密结果转为英文大写:
sign = MD5(strStep3).toUpperCase();
sign = MD5(strStep3).toUpperCase();
以下为java签名的示例代码
JAVA
public String getSign(MapreqParam) { // 1. 将请求参数Map按照参数名ASCII字典序排序 Map sortReqParam = new TreeMap<>(reqParam); // 2. 如果有sign,则删除sign sortReqParam.remove("sign"); // 3. 将排好序的Map转为key=value格式的字符串 StringBuilder sb = new StringBuilder(); for (Map.Entry entry : sortReqParam.entrySet()) { sb.append(entry.getKey()).append("=").append(String.valueOf(entry.getValue())).append("&"); } // 4. 在最后拼接上secretKey的key和value sb.append("secretKey").append("=").append(secretKey); // 5. 将拼接完成的参数字符串md5加密并转大写 return DigestUtils.md5DigestAsHex(sb.toString().getBytes()).toUpperCase(); }
复制代码
- 接口概述
- 接口调用方式
- 字段解释
- 接口签名方式