Skip to content

签名规则

请求参数签名

注意

签名字符串中不能拥有 "\ 特殊符号,通常处理有嵌套对象活Json字符的请求参数时,会有此类特殊符号,如果不是在使用SDK,需要我们签名前手动替换为空字符串,然后再进行签名。

将发送的所有数据假定位为集合M,将集合内非空的参数值按照参数名ASCII码从小到大排序,使用URL请求键值对参数方式进行拼接成字符串,类似key1=value1&key2=value2这样的格式。需要注意如下原则:

  • 参数名不区分大小写
  • 将字符串中 "\ 特殊符号替换为空字符串''
  • 参数名ASCII码从小到大排序(字典序)
  • 如果参数值为空不进行签名,注意''空字符串不是空,null才是空
  • 如果是嵌套参数,将嵌套的参数按上面的规则进行排序,然后转换为json字符串,然后参与排序
  • 如果是json字符串,不需要做额外处理,直接参与签名即可(别忘了第一条去除特殊符号)
  • 进行验签时,sign字段不参与签名,将生成的签名与该sign值作校验
  • 含有小数金额的数值不需要保留末尾的0,例如1.10需要设置为1.1, 1.00需要设置为1

将上面生成的参数后追加上 sign=秘钥(追加后格式为 key1=value1&key2=value2&key=秘钥),然后将该字符串转换为大写,然后进行数据摘要算法计算出 sign值,并将sign值添加到请求中进行发送。

数据摘要支持MD5HmacSHA256两种,使用HmacSHA256时,key值作为秘钥

样例(无嵌套参数情况)

使用MD5签名方式,密钥为: 123456

待签名的参数

json
{
    "bizOrderNo": "pay_2021520000012254",
    "title": "测试支付商品",
    "description": "测试支付商户的描述",
    "allocation": false,
    "autoAllocation": false,
    "expiredTime": "2025-04-06 18:37:13",
    "channel": "ali_pay",
    "method": "qrcode",
    "limitPay": "no_credit",
    "amount": 99.6,
    "extraParam": "{\"openIdType\":\"sub\"}",
    "attach": "{\"order:\"}:\"order_0000001\"",
    "returnUrl": "https://pay.daxpay.cn/returnurl",
    "notifyUrl": "https://pay.daxpay.cn/notice",
    "clientIp": "127.0.0.1",
    "reqTime": "2025-04-06 18:07:13",
    "nonceStr": "ww5gjytfsdfe"
}

转换为有序集合

json
{
  "allocation": "false",
  "amount": "99.6",
  "attach": "{\"order\":\"order_0000001\"",
  "autoAllocation": "false",
  "bizOrderNo": "pay_2021520000012254",
  "channel": "ali_pay",
  "clientIp": "127.0.0.1",
  "description": "测试支付商户的描述",
  "expiredTime": "2025-04-06 18:40:31",
  "extraParam": "{\"openIdType\":\"sub\"}",
  "limitPay": "no_credit",
  "method": "qrcode",
  "nonceStr": "ww5gjytfsdfe",
  "notifyUrl": "https://pay.daxpay.cn/notice",
  "reqTime": "2025-04-06 18:10:31",
  "returnUrl": "https://pay.daxpay.cn/returnurl",
  "title": "测试支付商品"
}

拼接字符串并过滤掉特殊字符

allocation=false&amount=99.6&attach={order:order_0000001&autoAllocation=false&bizOrderNo=pay_2021520000012254&channel=ali_pay&clientIp=127.0.0.1&description=测试支付商户的描述&expiredTime=2025-04-06 18:40:31&extraParam={openIdType:sub}&limitPay=no_credit&method=qrcode&nonceStr=ww5gjytfsdfe&notifyUrl=https://pay.daxpay.cn/notice&reqTime=2025-04-06 18:10:31&returnUrl=https://pay.daxpay.cn/returnurl&title=测试支付商品

拼接密并钥转换大写

ALLOCATION=FALSE&AMOUNT=99.6&ATTACH={ORDER:ORDER_0000001&AUTOALLOCATION=FALSE&BIZORDERNO=PAY_2021520000012254&CHANNEL=ALI_PAY&CLIENTIP=127.0.0.1&DESCRIPTION=测试支付商户的描述&EXPIREDTIME=2025-04-06 18:43:29&EXTRAPARAM={OPENIDTYPE:SUB}&LIMITPAY=NO_CREDIT&METHOD=QRCODE&NONCESTR=WW5GJYTFSDFE&NOTIFYURL=HTTPS://PAY.DAXPAY.CN/NOTICE&REQTIME=2025-04-06 18:13:29&RETURNURL=HTTPS://PAY.DAXPAY.CN/RETURNURL&TITLE=测试支付商品&KEY=123456

进行签名

636c5f87e5d128da83cad79e76d1bc0e

数据验签

注意

响应参数和通知消息验签时,通常我们接口返回的类型会是公共响应参数<业务响应参数>的格式,签名规则基本与请求参数验签一致,需要注意的点在于返回的data参数直接序列化为json字符串即可 不需要进行排序。注意返回的数据如果没有sign字段,则不需要进行验签,参考下面的验签示例

使用MD5签名方式,密钥为: 123456

待验签的数据

json
{
  "code" : 0,
  "msg" : "success",
  "data" : {
    "bizOrderNo" : "SDK_1744004534098",
    "orderNo" : "DEV_P2025040713421870000006",
    "status" : "progress",
    "payBody" : "weixin://wxpay/bizpayurl?pr=FwIhHn7z1"
  },
  "sign" : "0f5f56d8df0db335c21c5649028b6b91",
  "resTime" : "2025-04-07 13:42:18",
  "traceId" : "4sObqTTuNfQL"
}

转换为有序集合

json
{
  "code" : "0",
  "data" : "{\"bizOrderNo\":\"SDK_1744004534098\",\"orderNo\":\"DEV_P2025040713421870000006\",\"status\":\"progress\",\"payBody\":\"weixin://wxpay/bizpayurl?pr=FwIhHn7z1\"}",
  "msg" : "success",
  "resTime" : "2025-04-07 13:42:18",
  "traceId" : "4sObqTTuNfQL"
}

拼接字符串并过滤掉特殊字符

code=0&data={bizOrderNo:SDK_1744004534098,orderNo:DEV_P2025040713421870000006,status:progress,payBody:weixin://wxpay/bizpayurl?pr=FwIhHn7z1}&msg=success&resTime=2025-04-07 13:42:18&traceId=4sObqTTuNfQL

拼接密并钥转换大写

CODE=0&DATA={BIZORDERNO:SDK_1744004534098,ORDERNO:DEV_P2025040713421870000006,STATUS:PROGRESS,PAYBODY:WEIXIN://WXPAY/BIZPAYURL?PR=FWIHHN7Z1}&MSG=SUCCESS&RESTIME=2025-04-07 13:42:18&TRACEID=4SOBQTTUNFQL&KEY=123456

进行签名并对比

0f5f56d8df0db335c21c5649028b6b91 与返回值一致

通知消息数据验签

本文档内容版权属于济南易杯光年软件技术有限公司