文档内容最后更新于:2019-12-20
- 时间戳为秒级,非毫秒级,毫秒级请/1000
- returnUrl/notifyUrl 为完整地址,含有协议+端口。如果回调通知地址(notifyUrl)不传,平台不会发起异步回调,需要调用查询接口确认订单状态。
- 金额为整数,非小数,以分为单位,不能包含有“·”号,例:123 即 1.23 元。
- 商户编号需要从商户后台首页获取,并非登陆账号,商户密钥(apikey)每次刷新都会重新随机生成,保存好最后一次刷新的密钥进行对接即可。
- 商户接收异步通知时,不要写死固定参数接收,请使用通用的json/map 对象接收,这样可接收完整参数,然后对json/map 里面的参数进行签名校验。如果只接收固定参数,会导致签名验证失败。后期如果通知增加参数,也可以不用修改代码
- 商户测试时如果要确认能不能回调以及验证签名是否成功,可生成订单后直接取消,取消后系统便会有通知。测试完取消通过后,再联系客服测试成功订单
- 2019.12.20
- 订单状态新增 -20(暂无渠道) ,该状态下无支付信息(支付状态,支付成功时间,支付编号为空)
- 字符编码:UTF-8
- Content-Type:application/json
- URL 传输参数需要对参数进行 UrlEncode
- 网关地址:请联系客服
- 商户编号(merchantNo)
- 商户密钥(apiKey)
BCrypt(Base64(SHA-256(apiKey+originalStr+apiKey)))
- originalStr: 除sign参数外其他参数值非空(空值或者空字符串)的参数按参数名称字母正序排序然后以name=UrlEncode(value)形式组合,
通过&拼接不同参数。
- 注:空值(空值或者空字符串)不参与签名。
- 注:value需要进行UrlEncode编码
- BCrypt(Base64(SHA-256(apiKey+originalStr+apiKey)))
- 用SHA-256算法将“apiKey+originalStr+apiKey”进行签名得到签名信息(二进制,有些工具会生成16进制)
- 使用Base64编码对SHA-256二进制签名信息进行编码
- 使用BCrypt对编码字符串进行签名得到最终签名字符串
- php demo
- java demo
- c# demo
当创建订单时传入返回地址,订单结束后,用户点击“返回商户”,会在返回链接带上参数(returnUrl?urlparams)。参数内容参考统一返回参数,可通过签名算法计算签名的正确性。例:
returnUrl?
amount=100&
payMode=100001&
ts=1575948756&
orderStatus=50&
payNo=20191209194326631108714792&
payStatus=30&
payTime=1575948756&
merchantNo=20191204192421307122140114&
orderNo=201912081855183951ab02e&
sign=%242a%2410%24JwOX9nmVHrE6o8vcoSmyd.T69Yl7n322tVLmz.pVkRUz%2f.tRCjELS
当创建订单时传入异步回调地址时,订单结束后(用户取消订单(-30)、用户支付超时(-40)、订单失败(-50)、订单已完成(50))进行通知,总共通知3次,每次间隔10 分钟,超时时间为10s,处理成功后返回 success,返回其他字符表示处理失败,会继续进行后续通知。通知内容参考统一返回参数,可通过签名算法计算签名的正确性 示例:
curl -X POST "回调地址"
-H 'content-type: application/json'
-d '{
"amount":100,
"payMode":"100001",
"ts":1575948756,
"orderStatus":50,
"payNo":"20191209194326631108714792",
"payStatus":30,
"payTime":1575948756,
"merchantNo":"20191204192421307122140114",
"orderNo":"201912081855183951ab02e",
"sign":"$2a$10$JwOX9nmVHrE6o8vcoSmyd.T69Yl7n322tVLmz.pVkRUz/.tRCjELS"
}'
- 创建订单接口
-
使用场景:当用户充值时,根据下面参数,商户生成跳转链接,返回给用户进行跳转到支付页面。
-
请求方式:页面跳转
-
请求地址:网关地址+/pay-order/#/?urlparams
-
请求参数
参数名称 必须 数据类型 示例 参数说明 amount 是 整数 100 金额,以分为单位;最小值100,即1元 merchantNo 是 字符串 20191204192421307122140114 商户编号 orderNo 是 字符串(<50) 201912081855183951ab02e 商户订单编号 payMode 是 字符串 100001 支付模式,请登陆商户后台获取 ts 是 整数 1575948756 商户订单时间戳(秒级) notifyUrl 否 字符串 https://www.baidu.com/notify 后台通知地址 returnUrl 否 字符串 https://www.baidu.com 支付完成用户返回地址 sign 是 字符串 $2a$10$JwOX9nmVHrE6o8vcoSmyd.T6... 参数签名,请按照签名算法生成 -
响应
-
示例
网关地址+/pay-order/#/?amount=100&merchantNo=20191204192421307122140114&orderNo=1575730270288&payMode=100001&ts=1575730270&sign=%242a%2410%24JwOX9nmVHrE6o8vcoSmyd.T69Yl7n322tVLmz.pVkRUz%2F.tRCjELS
-
- 查询订单接口
-
使用场景:当商户需要对特定订单查询时
-
请求方式:POST
-
请求地址:网关地址+ /any-pay/open/order/query
-
请求参数
参数名称 必须 数据类型 示例 参数说明 merchantNo 是 字符串 20191204192421307122140114 商户编号 orderNo 是 字符串(<50) 201912081855183951ab02e 商户订单编号 ts 是 整数 1575948756 商户订单时间戳(秒级) sign 是 字符串 $2a$10$JwOX9nmVHrE6o8vcoSmyd.T6... 参数签名,请按照签名算法生成 -
响应(参考统一返回参数)
-
示例
请求: curl -X POST "网关地址+/any-pay/open/order/query" -H "accept:*/*" -H "Content-Type:application/json" -d "{\"merchantNo\":\"20191204192421307122140114\",\"orderNo\":\"201912081855183951ab02e\",\"sign\":\"$2a$10$JwOX9nmVHrE6o8vcoSmyd.T69Yl7n322tVLmz.pVkRUz/.tRCjELS\",\"ts\":1575948756}" 响应:
-
-
参数内容
参数名称 必须 数据类型 示例 参数说明 amount 是 整数 100 金额,以分为单位 merchantNo 是 字符串 20191204192421307122140114 商户编号 orderNo 是 字符串(<50) 201912081855183951ab02e 商户订单编号 payMode 是 字符串 100001 支付模式 ts 是 整数 1575948756 商户订单时间戳(秒级) orderStatus 是 整数 50 订单状态,请参考订单状态枚举 payNo 否 字符串 20191209194326631108714792 支付订单编号 payStatus 否 整数 30 支付状态,请参考支付状态枚举 payTime 否 整数 1575948756 支付成功时间(秒级) sign 是 字符串 $2a$10$JwOX9nmVHrE6o8vcoSmyd.T6... 参数签名,使用BCrypt校验方法校验 -
订单状态(orderStatus)枚举
值 说明 -20 暂无渠道,此状态下无支付状态 30 支付等待中 -30 用户取消订单 -40 用户支付超时 -50 订单失败 50 订单已完成 -
支付状态(payStatus)枚举
值 说明 10 等待支付 -10 支付超时 -20 支付取消 30 支付成功 -30 支付失败
以订单状态为主进行判断,支付超时后状态可能会收到支付成功状态通知,请注意处理