1 支付API概述

1.1 产品说明

支付API是我司提供给商户的接口API,商户可以根据API完成相应的支付功能。

1.2 用词解释

商户

接入了平台并开通了API接口服务的商户。

用户/商户用户

在商户系统注册的用户,并非我司的用户。

通道

商户用户支付的方式,比如微信公众号支付通道。

商户订单

在商户系统生成的订单,订单号不允许重复,重复提交不同信息,相同订单号的订单,以第一次提交的订单信息为准。

订单状态

订单状态目前有已支付/未支付两种状态。

异步通知

支付结果通过异步回调返回给商户发送的异步通知URL。

页面返回

支付完成后,用户浏览器页面返回到商户发送的页面返回URL。

1.3 开发指导

  1. 原则上不推荐使用单号不变的同一笔商户支付单发起多次支付申请。

  2. 由于对特殊字符的转义处理,一些字段的长度有时并不能达到其最大长度

  3. 异步回调通知商户失败或异常后,我司会再次发起异步回调通知,当前策略是失败或异常后重发10次1~3次间隔约30秒4~6次间隔约120秒7~10次间隔约600秒,每次会发出1遍请求。如果商户仍然无法正常响应,我司将不再发起异步回调通知。

  4. 为避免风控,支付金额将随机浮动-0.20元至0.20元,即,在金额后面加入小数。

  5. 必须发送能够唯一确定的用户账号,即accounts字段,平台将会将之与微信号进行绑定,从而自动选择合适的通道,否则如果因为该原因而未能分配到有效通道,与本平台无关。注意,如果是同一微信账号,发送不同的accounts字段,有可能会被风控

  6. 支付API模式,API模式下,下单IP必传且尽量保持真实,多次无效IP可能风控

  7. 切记不要用表单(Form)提交,用Json提交。

  8. 所有 int 参数默认 0参与验签,Code不参与签名。

1.4 数据签名

1.4.1 MD5签名

签名串:签名串:所有需要传输的参数,去除sign字段和空字段(INT参数默认为0参与验签),按字母表升序排列成key-value格式(例:key1=val1&key2=val2…)。

签名私钥:我司分配给商户的用于签名和验签的APIKEY

完整签名串:由签名串和签名私钥拼接而成。

使用&符号连接 发送方把签名串用MD5算法加密生成32位签名(全大写),作为sign字段传输。

即:sign = md5(key1=val1&key2=val2…&apikey)

验签:异步回调通知商户需要检验数据真实性,验签算法和签名算法一致。 Int 类型参数传空默认为0 ,参与验签,Code不参与签名。

String sign = MD5Util.createSign(MD5Util.getObjectSortedMap(request), key);

Last updated

Was this helpful?