對接文件
本頁還沒有繁體中文版本,下面是简体中文內容。

签名

请求、应答、回调都带签名 sign。两套接口的签法不同,别混用。

代付接口 std1:HMAC-SHA256

  1. 取全部参数(验应答、回调时取全部字段),去掉 sign。
  2. 值是空串的不参与(空串等于没传);0 和空格照样参与。
  3. 参数名按 UTF-8 字节升序排:区分大小写,大写字母排在小写前面,数字名 20 排在 3 前面。
  4. 拼成 名=值,用 & 连起来。值用原文:不做 URL 编码、不去空白、不转 HTML 实体。
  5. 用 API私钥做 HMAC-SHA256。私钥就是商户后台「安全中心」里那串文本本身(新开的商户是 64 位十六进制),按文本的 UTF-8 字节用,不要先解成字节。
  6. 结果写成 64 位小写十六进制,前面的 0 要补足。我们验签不分大小写。

请求、应答、回调同一种签法、同一把密钥。您带了文档没列的参数,也要参与签名(我们验签后忽略它)。

示例

示例密钥(假的)

0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

密钥按文本的 UTF-8 字节当 HMAC 密钥,不要先把 64 位十六进制解成 32 字节;hexDecodedKeySign 是解了之后签出来的错误值

参数

[["mchId","DEMO0001"],["mchOrderNo","ORDER-20260917-0001"],["amount","10000"]]

签名串

amount=10000&mchId=DEMO0001&mchOrderNo=ORDER-20260917-0001

sign

9baf546e1f95057438cab0379a8abe79f65110f4edb21ae3c1131b7b87694509

错误做法(把密钥解成 32 字节再签)得到

b21db2c6def6135e35d9fca688449a9bb1a14b226be5c21adff1b267a6c3a1bb

空串和 null 不参与(等于没传);"0" 和一个空格照签;sign 本身不参与

参数

[["a","1"],["b",""],["c",null],["d"," "],["e","0"],["sign","ffff"]]

签名串

a=1&d= &e=0

sign

e73689ddfba7cb0e1fee38f7450ced153080e6e9ec2e29b986a6f5259dc6ef09

参数名按 UTF-8 字节升序、区分大小写:数字 < 大写 < 下划线 < 小写;纯数字名也按字节比(20 在 3 前面)

参数

[["b","1"],["a","2"],["B","3"],["_","4"],["0","5"],["20","6"],["3","7"],["aB","8"],["a_b","9"],["a1","10"],["Z","11"],["ab","12"]]

签名串

0=5&20=6&3=7&B=3&Z=11&_=4&a=2&a1=10&aB=8&a_b=9&ab=12&b=1

sign

cc98598fb90d59b6603d65a813ad54959ce38cdbe6e1fb2ed1c0b7baead5cf3d

签名以 00 开头:十六进制输出必须补足 64 位(大整数转十六进制会丢前导 0)

参数

[["mchId","DEMO0001"],["nonce","112"]]

签名串

mchId=DEMO0001&nonce=112

sign

00e9a48bd200689f0a7e7a91e650f022f7e54d7f6816d869ddce36f19c1e5c1a

验应答和回调

代收接口 compat1(老协议):MD5

和原来老系统完全一样:

  1. 取收到的全部参数,去掉 sign;值是 null 或正好是空串的不参与,只有空格的值要参与。
  2. 值是 JSON 对象的(只有应答里的 payParams),把它第一层的键按字符编码排好,再紧凑写成 JSON(不留空格)当作值。
  3. 拼成 名=值,对整条 名=值 按不分大小写排序。注意不是只排名字:param10=… 排在 param1=… 前面,因为 0 在 = 前面。
  4. 用 & 连起来,最后接上 &key=您的商户私钥。
  5. 取 UTF-8 字节做 MD5,结果写成 32 位大写十六进制。我们验签不分大小写。
  6. 您带的全部非空参数都参与,包括文档没列的。

示例

下单请求:

示例密钥(假的):demo-key-NOT-REAL-do-not-use-0001

参数

mchId=20000001
productId=8001
mchOrderNo=ORDER20260918001
amount=10000
notifyUrl=https://merchant.example.com/notify
subject=goods
body=goods
param1=shop-7
param2=张三
reqTime=20260918120000

签名串

amount=10000&body=goods&mchId=20000001&mchOrderNo=ORDER20260918001&notifyUrl=https://merchant.example.com/notify&param1=shop-7&param2=张三&productId=8001&reqTime=20260918120000&subject=goods&key=demo-key-NOT-REAL-do-not-use-0001

sign

86032564C62F16F220F9DBAD7D88C690

请求正文

mchId=20000001&productId=8001&mchOrderNo=ORDER20260918001&amount=10000&notifyUrl=https%3A%2F%2Fmerchant.example.com%2Fnotify&subject=goods&body=goods&param1=shop-7&param2=%E5%BC%A0%E4%B8%89&reqTime=20260918120000&sign=86032564C62F16F220F9DBAD7D88C690

回调(sign 在正文里,空值不参与签名):

示例密钥(假的):demo-key-NOT-REAL-do-not-use-0001

您填的 notifyUrl

https://merchant.example.com/notify

发往的地址

https://merchant.example.com/notify

回调正文

income=10000&payOrderId=ORDER20260918001&amount=10000&mchId=20000001&productId=8001&mchOrderNo=ORDER20260918001&paySuccTime=1789704005000&sign=9447B44CF966CB47A625CADF63C539A8&channelOrderNo=UP20260918000123&backType=2&param1=shop-7&param2=%E5%BC%A0%E4%B8%89&channelAttach=&status=2

签名串

amount=10000&backType=2&channelOrderNo=UP20260918000123&income=10000&mchId=20000001&mchOrderNo=ORDER20260918001&param1=shop-7&param2=张三&payOrderId=ORDER20260918001&paySuccTime=1789704005000&productId=8001&status=2&key=demo-key-NOT-REAL-do-not-use-0001