API支付 · 退款 · 重定向MD5 签名 · REST

支付 API 文档

快米兔聚合支付接口文档:统一下单、退款接口、订单查询、支付通知、重定向获取用户ID 及 MD5 签名规范。

Payment API

支付接口

查看官方原文 →

1

. 协议规则

传输方式:采用HTTP传输(生产环境建议HTTPS) 提交方式:采用POST/GET方式提交 字符编码:UTF-8 签名算法:MD5

1.1

参数规范

交易金额:默认为人民币交易,单位为分,参数值不能带小数。

1.2

安全规范

签名算法

签名生成的通用步骤如下

*第一步:* 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。 ◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段

*第二步:* 在stringA最后拼接上key[即 StringA + "&key=" + 私钥 ] 得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

如请求支付系统参数如下:

 Map signMap = new HashMap<>();    signMap.put("userId", "test01");    signMap.put("type", "wechat");    signMap.put("money", Double.valueOf(2));    signMap.put("remark", "");    signMap.put("outTradeNo", "P12312321123");

待签名值:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&key=EWEFD123RGSRETYDFNGFGFGSHDFGH 签名结果:5E0AA05DD4BB4FE5AB65608123EBA591 最终请求支付系统参数:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&sign=5E0AA05DD4BB4FE5AB65608123EBA591

商户登录商户系统后,通过商户信息查看或修改私钥key。

2

. 统一下单

接口描述

业务通过统一下单接口可以发起任意三方支付渠道的支付订单。业务系统不必关心该如何调用三方支付,统一下单接口会根据业务系统选择的支付渠道ID,选择对应支付渠道的支付产品,发起下单请求,然后响应给业务系统支付请求所需参数。

接口链接

URL地址:{payUrl}/api/pay/create_order

请求参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
应用IDappIdString(30)wx390ee383939c4fb2当支付产品为微信支付(公众号支付、小程序支付、H5支付、APP支付)时,如果传了该参数则微信服务商下单时subAppId使用该参数,如果支付产品为微信APP支付则该参数必传
支付产品IDproductIdString(24)80018004微信公众号支付,8020微信条码支付,8023微信小程序支付、8008支付宝服务窗支付、8021支付宝条码支付
商户订单号mchOrderNoString(30)20160427210604000490商户生成的订单号
支付金额amountint100支付金额,单位分
币种currencyString(3)cny三位货币代码,人民币:cny
客户端IPclientIpString(32)210.73.10.148客户端IP地址,当为微信公众号支付或微信小程序支付时该参数必传
设备deviceString(64)ios10.3.1客户端设备
异步回调通知地址notifyUrlString(128)http://shop.xx.com/api/notice异步回调通知地址
支付结果同步请求URLreturnUrlString(128)http://shop.xx.com/api/notice支付结果同步请求URL
商品主题subjectString(64)测试商品1商品主题
商品描述bodyString(256)测试商品描述商品描述信息
渠道用户IDchannelUserIdString(256)oIkQuwhPgPUgl-TvQ48_UUpZUwMs指的是在支付通道测的用户ID,当为微信公众号或小程序支付时,该参数必填,指微信openID
是否jsapi的预下单模式jsApiPreOrderModeint0是否jsapi的预下单模式 1.是, 0-否 预下单模式不直接生成payOrderId, 返回链接地址直接支付。 仅支持 微信公众号支付和支付宝服务窗支付 京东H5和云闪付扫一扫支付。
附加参数extraString(512)134586944573118714特定渠道发起时额外参数,当为微信条码或支付宝条码支付时,该参数必填,指付款用户的条码值
扩展参数1param1String(64)支付中心回调时原样返回
扩展参数2param2String(64)支付中心回调时原样返回
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

响应结果

字段名变量名必填类型示例值描述
返回状态码retCodeString(16)00-处理成功,其他-处理有误,详见错误码
返回信息retMsgString(128)签名失败具体错误原因,例如:签名失败、参数格式校验错误
字段名变量名必填类型示例值描述
支付订单号payOrderIdString(30)P01201907231119090520000返回支付系统订单号
支付方式payMethodString(16)formJump支付方式,目前包含两种: formJump-表单跳转,codeImg-二维码图片
支付表单地址payUrltext`<form name="punchout_form" method="post" action="https://openapi.alipay.com/gateway.do?charset=UTF-8&method=alipay.trade.page.pay&sign=WWg59GEcTkMHYnE8fKRd%2F4fzFi"></form>` ……payMethod=formJump时存在该参数; 一般为支付表单内容
支付跳转地址payJumpUrltext支付跳转地址,可直接重定向的URL
表单提交方式payActionString(16)GET指定表单提交方式: POST/GET
二维码地址codeUrlString(16)https://qr.alipay.com/bax08687odiyi06cpayMethod=codeImg时存在该参数; 二维码内容地址
二维码图片地址codeImgUrlString(16)http://pay.52pay.com/api/qrcode_img_get?url=https://qr.alipay.com/bax08687z006c&width=200&height=200payMethod=codeImg时存在该参数; 二维码图片地址
支付自定义参数payParamsString(16)支付自定义参数,当为app支付或小程序或公众号支付时,返回给客户端调起支付所需参数
是否需要查单needQueryBooleantrue如果返回true则表示商户需要主动发起订单查询
当前订单状态orderStatusString(16)2当前订单状态: -2:订单已关闭,0-订单生成,1-支付中,2-支付成功,3-业务处理完成,4-已退款
签名信息signString(128)CCD9083A6DAD9A2DA9F668C3D4517A84签名信息

3

. 查询支付订单

接口描述

业务系统通过查询支付订单接口获取最新的支付订单状态,并根据状态结果进一步处理业务逻辑。

接口链接

URL地址:{payUrl}/api/pay/query_order

请求参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)1000000010支付中心分配的商户号
支付订单号payOrderIdString(30)P20160427210604000490支付中心生成的订单号,与mchOrderNo二者传一即可
商户订单号mchOrderNoString(30)20160427210604000490商户生成的订单号,与payOrderId二者传一即可
是否执行回调executeNotifyBooleantrue是否执行回调,如果为true,则支付中心会再次向商户发起一次回调,如果为false则不发起
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

响应结果

字段名变量名必填类型示例值描述
返回状态码retCodeString(16)00-处理成功,其他-处理有误,详见错误码
返回信息retMsgString(128)签名失败具体错误原因,例如:签名失败、参数格式校验错误
字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
应用IDappIdString(30)wx390ee383939c4fb2应用ID
支付产品IDproductIdString(24)8001
支付订单号payOrderIdString(30)P01201907231119090520000返回支付系统订单号
商户订单号mchOrderNoString(30)20160427210604000490商户生成的订单号
支付金额amountint100支付金额,单位分
币种currencyString(3)cny三位货币代码,人民币:cny
订单状态statusString(3)2当前订单状态: -2:订单已关闭,0-订单生成,1-支付中,2-支付成功,3-业务处理完成,4-已退款
渠道用户IDchannelUserIdString渠道用户ID
渠道订单号channelOrderNoString wx20170910211043fb206e92260071822007对应的第三方支付订单号
渠道数据包channelAttachString渠道数据包
支付成功时间paySuccTimeLong1505049094262支付成功时间,精确到毫秒
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

4

. 关闭支付订单

接口描述

业务系统通过关闭支付订单接口关闭支付订单,只有在支付中的订单才可以发起关闭。

接口链接

URL地址:{payUrl}/api/pay/close_order

请求参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)1000000010支付中心分配的商户号
支付订单号payOrderIdString(30)P20160427210604000490支付中心生成的订单号,与mchOrderNo二者传一即可
商户订单号mchOrderNoString(30)20160427210604000490商户生成的订单号,与payOrderId二者传一即可
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

响应结果

字段名变量名必填类型示例值描述
返回状态码retCodeString(16)00-处理成功,其他-处理有误,详见错误码
返回信息retMsgString(128)签名失败具体错误原因,例如:签名失败、参数格式校验错误
字段名变量名必填类型示例值描述
业务结果resultCodeStringSUCCESSSUCCESS/FAIL
处理结果描述resultMsgString失败失败
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

5

. 支付结果通知

接口描述

当订单支付成功时,支付中心会向商户的returnUrl地址发起回调,通知订单状态。

接口链接

该链接是通过统一下单接口提交的参数returnUrl设置,如果无法访问链接,业务系统将无法接收到支付中心的通知。

通知参数

字段名变量名必填类型示例值描述
支付订单号payOrderIdString(30)P20160427210604000490支付中心生成的订单号
商户IDmchIdString(30)20001222支付中心分配的商户号
支付产品IDproductIdString(24)8001
商户订单号mchOrderNoString(30)20160427210604000490商户生成的订单号
支付金额amountint100支付金额,单位分
状态statusint1支付状态,0-订单生成,1-支付中,2-支付成功,3-业务处理完成
渠道订单号channelOrderNoString(64)wx2016081611532915ae15beab0167893571三方支付渠道订单号
支付成功时间paySuccTimelong精确到毫秒

返回结果

业务系统处理后同步返回给支付中心,返回字符串 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。(通知频率为60/120/180/240/300,单位:秒)

注意:返回的字符串必须是小写,且前后不能有空格。

6

. 支付产品

产品ID产品名称
8004微信公众号支付
8020微信条码支付
8023微信小程序支付
8008支付宝服务窗支付
8021支付宝条码支付

7

. 错误码

RetCode描述
0成功
9999业务异常,具体错误详见RetMsg字段
0100商户签名异常
0010系统错误
0011请使用post方法
0012post数据为空
0013签名错误
0014参数错误
0015商户不存在
0110第三方超时
0111第三方异常
0112订单不存在
0113订单已支付
0114商品不存在
0115价格不对
0116物品数量不对
0117过程返回255
0118DB错误
0119支付中心没有对应的渠道
0120修改订单状态失败

Redirect API

重定向获取用户ID

查看官方原文 →

1

. 协议规则

传输方式:采用HTTP传输(生产环境建议HTTPS) 提交方式:采用GET方式提交 字符编码:UTF-8 签名算法:MD5

1.2

安全规范

签名算法

签名生成的通用步骤如下

*第一步:* 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。 ◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段

*第二步:* 在stringA最后拼接上key[即 StringA + "&key=" + 私钥 ] 得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

如请求支付系统参数如下:

 Map signMap = new HashMap<>();    signMap.put("userId", "test01");    signMap.put("type", "wechat");    signMap.put("money", Double.valueOf(2));    signMap.put("remark", "");    signMap.put("outTradeNo", "P12312321123");

待签名值:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&key=EWEFD123RGSRETYDFNGFGFGSHDFGH 签名结果:5E0AA05DD4BB4FE5AB65608123EBA591 最终请求支付系统参数:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&sign=5E0AA05DD4BB4FE5AB65608123EBA591

商户登录商户系统后,通过安全中心查看或修改私钥key。

2

. 获取用户ID接口

接口描述

部分业务需要商户主动获取到所属用户的ID信息, 本接口可通过重定向的方式获取到用户ID信息然后在提供下一步的操作。

接口链接

URL地址:{支付网关}/api/pay/get_user_id/main

请求参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
支付产品IDproductIdString(24)80018004微信公众号支付,8020微信条码支付,8023微信小程序支付、8008支付宝服务窗支付、8021支付宝条码支付
重定向地址redirectUrlString(256)http://www.baidu.com重定向地址(注意做 url encode)
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

响应结果 **重定向到redirectUrl的地址,并且带入 【channelUserId】参数为用户ID. (支付宝的userID, 微信的openID, 云闪付的userNo)**

Refund API

退款接口

查看官方原文 →

1

. 协议规则

传输方式:采用HTTP传输(生产环境建议HTTPS) 提交方式:采用POST/GET方式提交 字符编码:UTF-8 签名算法:MD5

1.1

参数规范

交易金额:默认为人民币交易,单位为分,参数值不能带小数。

1.2

安全规范

签名算法

签名生成的通用步骤如下

*第一步:* 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。 ◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段

*第二步:* 在stringA最后拼接上key[即 StringA + "&key=" + 私钥 ] 得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

如请求支付系统参数如下:

 Map signMap = new HashMap<>();    signMap.put("userId", "test01");    signMap.put("type", "wechat");    signMap.put("money", Double.valueOf(2));    signMap.put("remark", "");    signMap.put("outTradeNo",
                                        "P12312321123");

待签名值:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&key=EWEFD123RGSRETYDFNGFGFGSHDFGH 签名结果:5E0AA05DD4BB4FE5AB65608123EBA591 最终请求支付系统参数:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&sign=5E0AA05DD4BB4FE5AB65608123EBA591

商户登录商户系统后,通过安全中心查看或修改私钥key。

2

. 退款申请

接口描述

业务通过统一退款接口发起退款申请

接口链接

URL地址:{payUrl}/api/refund/create_order

请求参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
支付订单号payOrderIdString(30)P20160427210604000490支付中心生成的原始订单号,与mchOrderNo二者传一即可
商户订单号mchOrderNoString(30)20160427210604000490商户生成的原始订单号,与payOrderId二者传一即可
商户退款单号mchRefundNoString(30)20200727210612000129商户生成的退款单号
退款金额amountint100退款金额,单位分
币种currencyString(3)cny三位货币代码,人民币:cny
客户端IPclientIpString(32)210.73.10.148客户端IP地址
设备deviceString(64)ios10.3.1客户端设备
附加参数extraString(512)特定渠道发起时额外参数
扩展参数1param1String(64)支付中心回调时原样返回
扩展参数2param2String(64)支付中心回调时原样返回
异步回调地址notifyUrlString(128)http://shop.xx.com/notify.htm退款结果异步回调URL
渠道用户channelUserString(256)oIkQuwhPgPUgl-TvQ48_UUpZUwMs渠道用户信息
用户姓名userNameString(64)张三用户姓名
备注remarkInfoString(256)退款备注信息
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

响应结果

字段名变量名必填类型示例值描述
返回状态码retCodeString(16)00-处理成功,其他-处理有误,详见错误码
返回信息retMsgString(128)签名失败具体错误原因,例如:签名失败、参数格式校验错误
字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
应用IDappIdString(30)wx390ee383939c4fb2应用ID
退款单号refundOrderIdString(30)R01201907231119090520000返回支付系统退款单号
商户退款单号mchRefundNoString(30)20200727210612000129商户生成的退款单号
退款金额refundAmountint100退款金额,单位分
订单状态statusString(3)2退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败
渠道订单号channelOrderNoString wx20170910211043fb206e92260071822007对应的第三方单号
退款成功时间refundSuccTimeLong1505049094262退款成功时间,精确到毫秒
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

3

. 查询退款订单

接口描述

业务系统通过查询退款订单接口获取最新的退款订单状态,并根据状态结果进一步处理业务逻辑。

接口链接

URL地址:{payUrl}/api/refund/query_order

请求参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)1000000010支付中心分配的商户号
平台退款单号refundOrderIdString(30)R20160427210604000490支付中心生成的退款单号,与mchRefundNo二者传一即可
商户退款单号mchRefundNoString(30)20160427210604000490商户生成的订单号,与refundOrderId二者传一即可
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

响应结果

字段名变量名必填类型示例值描述
返回状态码retCodeString(16)00-处理成功,其他-处理有误,详见错误码
返回信息retMsgString(128)签名失败具体错误原因,例如:签名失败、参数格式校验错误
字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
应用IDappIdString(30)wx390ee383939c4fb2应用ID
商户退款单号mchRefundNoString(30)20200727210612000129商户生成的退款单号
退款金额refundAmountint100退款金额,单位分
订单状态statusString(3)2退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败
渠道订单号channelOrderNoString wx20170910211043fb206e92260071822007对应的第三方单号
退款成功时间refundSuccTimeLong1505049094262退款成功时间,精确到毫秒
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

4

. 退款结果通知

接口描述

当退款完成时,支付中心会向商户的notifyUrl地址发起回调,通知退款状态。

接口链接

该链接是通过退款申请接口提交的参数notifyUrl设置,如果无法访问链接,业务系统将无法接收到支付中心的通知。

通知参数

字段名变量名必填类型示例值描述
商户IDmchIdString(30)20001222支付中心分配的商户号
应用IDappIdString(30)wx390ee383939c4fb2应用ID
退款单号refundOrderIdString(30)R01201907231119090520000返回支付系统退款单号
商户退款单号mchRefundNoString(30)20200727210612000129商户生成的退款单号
退款金额refundAmountint100退款金额,单位分
订单状态statusString(3)2退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败
渠道订单号channelOrderNoString wx20170910211043fb206e92260071822007对应的第三方单号
退款成功时间refundSuccTimeLong1505049094262退款成功时间,精确到毫秒
扩展参数1param1String(64)支付中心回调时原样返回
扩展参数2param2String(64)支付中心回调时原样返回
退款成功时间refundSuccTimeLong1505049094262退款成功时间,精确到毫秒
通知类型backTypeint1通知类型,1-前台通知,2-后台通知
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名值,详见签名算法

返回结果

业务系统处理后同步返回给支付中心,返回字符串 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。(通知频率为60/120/180/240/300,单位:秒)

注意:返回的字符串必须是小写,且前后不能有空格。