Skip to content

jlutt/dnyPayDoc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

  • auto-gen TOC: {:toc}

接口规则

协议规则

商户接入都能印共同体支付,调用API必须遵循以下规则:

规则 说明
传输方式 为保证交易安全性,采用HTTPS传输
提交方式 采用POST方法提交
数据格式 提交和返回数据都为JSON格式
字符编码 统一采用UTF-8字符编码
签名算法 MD5
签名要求 请求和接收数据均需要校验签名

安全规范

签名算法

签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则:

  • 参数名ASCII码从小到大排序(字典序);
  • 如果参数的值为空不参与签名;
  • 参数名区分大小写;
  • 验证调用返回或都能印主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
  • 都能印接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 举例: 假设传送的参数如下:

mchId: 10000100
body: test
nonceStr: ibuaiVcKdpRxkhJA

第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

stringA="body=test&mchId=10000100&nonceStr=ibuaiVcKdpRxkhJA";

第二步:拼接API密钥:

stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户平台设置的密钥key
sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7" //注:MD5签名方式

最终得到最终发送的数据:

{
    "appid": "wxd930ea5d5a258f4f",
    "mch_id": "10000100",
    "device_info": "1000",
    "body": "test",
    "nonce_str": "ibuaiVcKdpRxkhJA",
    "sign": "9A0A8659F005D6984697E2CA0A9CF3B7"
}

生成随机数算法

都能印支付API接口协议中包含字段nonceStr,主要保证签名不可预测。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。

统一下单接口(pay/dny/unifiedorder)

应用场景

商户通过该接口进行交易的创建下单

接口链接

https://www.dounengyin.net/apis/pay/dny/unifiedorder

请求参数

参数 类型 必填 描述 示例值
mchId String(32) 都能印共同体分配的商户号 182xxxx1439
mchTradeNo String(32) 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母且在同一个商户号下唯一 OB20180521000001
amount Int 订单总金额,单位为分 8888
channelId String(16) 支付渠道类型,暂时固定为dny dny
currencyCode String(16) 支付货币代码,都能印支持多种余额消费方式,常用为都能印余额,代码为tyy,其他代码可在线询问客服人员 tyy
clientIp String(16) 支付提交用户端ip 123.12.12.123
device String(16) 终端设备号 自定义参数,可以为终端设备号
subject String(32) 商品标题 商品简单描述
body String(128) 商品描述 商品详细描述
attach String(128) 附加数据,在支付通知中原样返回,可作为自定义参数使用 都能印共同体
timeStart String(14) 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010 20091225091010
timeExpire String(14) 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010 20091227091010
notifyUrl String(256) 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数 https://www.xxx.com/pay/notify.html
nonceStr String(32) 随机字符串,长度要求在32位以内 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
sign_type String(32) 签名类型,为MD5 MD5
sign String(32) 通过签名算法计算得出的签名值 C380BEC2BFD727A4B6845133519F3AD6

返回结果

变量名 描述 示例值
return_code 返回状态码,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 SUCCESS/FAIL
return_msg 返回信息,如非空,为错误原因
签名失败
参数格式校验错误
参数中缺少mchId

以下字段在return_code为SUCCESS返回

变量名 描述 示例值
err_code 错误代码 00001
err_code_des 错误代码描述 交易单已存在
mch_id 商户号 182xxxx1439
pay_url 支付链接网址 https://www.dounengyin.net/pay.html
code_url 暂不使用(支付二维码地址)
nonce_str 随机字符串,调用接口原样返回 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
sign_type 签名类型,为MD5 MD5
sign 签名 C380BEC2BFD727A4B6845133519F3AD6

错误码

错误代码 描述 原因 解决方案
00001 交易单已存在 同一笔交易不能多次提交 请核实商户订单号是否重复提交
00002 交易单已支付 商户订单已支付,无需重复操作 商户订单已支付,无需更多操作
00003 交易单已关闭 当前订单已关闭,无法支付 当前订单已关闭,请重新下单
00004 交易单已完成 当前订单已完成,无法支付 当前订单已完成(代表支付已经完成异步通知),请重新下单
00005 服务加密错误 通知开发商

关闭订单接口(pay/dny/closeorder)

应用场景

以下情况需要调用关单接口:商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。

接口链接

https://www.dounengyin.net/apis/pay/dny/closeorder

请求参数

参数 类型 必填 描述 示例值
mch_id String(32) 都能印共同体分配的商户号 182xxxx1439
out_trade_no String(32) 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母且在同一个商户号下唯一 OB20180521000001
channel_id String(16) 支付渠道类型,暂时固定为dny dny
nonce_str String(32) 随机字符串,长度要求在32位以内 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
sign_type String(32) 签名类型,为MD5 MD5
sign String(32) 通过签名算法计算得出的签名值 C380BEC2BFD727A4B6845133519F3AD6

返回结果

变量名 描述 示例值
return_code 返回状态码,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 SUCCESS/FAIL
return_msg 返回信息,如非空,为错误原因
签名失败
参数格式校验错误
参数中缺少mchId

以下字段在return_code为SUCCESS返回

变量名 描述 示例值
err_code 错误代码 00001
err_code_des 错误代码描述 交易单已存在
mch_id 商户号 182xxxx1439
nonce_str 随机字符串,调用接口原样返回 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
sign_type 签名类型,为MD5 MD5
sign 签名 C380BEC2BFD727A4B6845133519F3AD6

错误码

错误代码 描述 原因 解决方案
00001 交易单已支付 商户订单已支付,不能发起关单 订单已支付,不能发起关单,请当作已支付的正常交易
00002 交易单已关闭 当前订单已关闭,无法重复关闭 订单已关闭,无需继续调用
00003 交易单已退款 当前订单已退款,无法关闭 当前订单已已退款,无需继续调用
00005 交易单正在关闭过程中 交易单正在关闭过程中

申请退款接口(pay/dny/refund)

应用场景

当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,都能印共同体将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上

接口链接

https://www.dounengyin.net/apis/pay/dny/refund

请求参数

参数 类型 必填 描述 示例值
mch_id String(32) 都能印共同体分配的商户号 182xxxx1439
out_trade_no String(32) 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母且在同一个商户号下唯一 OB20180521000001
out_refund_no String(32) 商户系统内部退款单号,要求32个字符内,只能是数字、大小写字母且在同一个商户号下唯一 OB20180521000001
refund_fee Int 退款金额,单位为分 8888
channel_id String(16) 支付渠道类型,暂时固定为dny dny
nonce_str String(32) 随机字符串,长度要求在32位以内 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
sign_type String(32) 签名类型,为MD5 MD5
sign String(32) 通过签名算法计算得出的签名值 C380BEC2BFD727A4B6845133519F3AD6

返回结果

变量名 描述 示例值
return_code 返回状态码,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 SUCCESS/FAIL
return_msg 返回信息,如非空,为错误原因
签名失败
参数格式校验错误
参数中缺少mchId

以下字段在return_code为SUCCESS返回

变量名 描述 示例值
err_code 错误代码 00001
err_code_des 错误代码描述 交易单已存在
mch_id 商户号 182xxxx1439
nonce_str 随机字符串,调用接口原样返回 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
transaction_id 都能印共同体订单号 1217752501201407033233368018
out_trade_no 商户订单号 1217752501201407033233368018
out_refund_no 商户退款单号 121775250
sign_type 签名类型,为MD5 MD5
sign 签名 C380BEC2BFD727A4B6845133519F3AD6

错误码

错误代码 描述 原因 解决方案
00001 交易单未支付,不能发起退款 交易单未支付,不能发起退款 交易单未支付,不能发起退款
00002 交易单已关闭 当前订单已关闭,不能发起退款 订单已关闭,无需继续调用
00003 申请退款失败,退款金额超出 申请退款失败,退款金额超出 申请退款失败,退款金额超出原交易单总金额
00005 余额不足 商户可用退款余额不足 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。
00006 交易单正在退款过程中 交易单正在退款过程中
00007 交易单不存在 交易单不存在

支付结果通知

应用场景

支付完成后,都能印会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

对后台通知交互时,如果都能印收到商户的应答不是成功或超时,都能印信认为通知失败,都能印会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但都能印不保证通知最终能成功。 (通知频率为15/15/30/180/,单位:秒)

注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

接口链接

该链接是通过【统一下单API】中提交的参数notifyUrl设置,如果链接无法访问,商户将无法接收到微信通知。

通知url必须为直接可访问的url,不能携带参数。示例:notifyUrl:“https://www.xxx.com/pay/notify.html”

通知参数

参数 类型 必填 描述 示例值
mchId String(32) 都能印共同体分配的商户号 182xxxx1439
transactionId String(32) 都能印共同体订单号 1217752501201407033233368018
mchOrderNo String(32) 商户系统内部订单号
amount Int 订单总金额,单位为分 8888
channelId String(16) 支付渠道类型,暂时固定为dny dny
attach String(128) 附加数据,在支付通知中原样返回,可作为自定义参数使用 都能印共同体
payUser String(16) 支付人 xxx
result_code String(16) 状态码 SUCCESS
sign_type String(32) 签名类型,为MD5 MD5
sign String(32) 通过签名算法计算得出的签名值 C380BEC2BFD727A4B6845133519F3AD6

返回示例

{
	"amount": "11000",
	"attach": "2018032954",
	"channelId": "dny",
	"mchId": "hslhys",
	"mchOrderNo": "CO20180329541527561027826",
	"payUser": "测试--测试",
	"result_code": "SUCCESS",
	"sign": "446A324F538241FDF7F1AC73DBEDE300",
	"sign_type": "MD5",
	"transactionId": "20180529103026487013100001702200"
}

About

都能印支付文档

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published