签名算法

签名生成步骤

  1. 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

  2. 在stringA最后拼接上key(商户密钥)得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

注意

  1. 参数名ASCII码从小到大排序(字典序);

  2. 如果参数的值为空不参与签名;

  3. 参数名区分大小写;

  4. 验证调用返回或支付系统主动通知签名时,数据中sign参数不参与签名,将生成的签名与该sign值作校验。

  5. 支付接口可能增加字段,验证签名时必须支持增加的扩展字段。

  6. 签名时商户密钥使用设置时的明文(未绑定谷歌验证码可能导致商户后台密钥显示密文)

示例

  1. 例如请求参数如下:

{
  "alias": "test alias",
  "callbackUrl": "https://test.com",
  "checkOut": true,
  "countryId": "MEX",
  "currency": "MXN",
  "customerName": "Aaliyah Rogers",
  "description": "payful",
  "email": "[email protected]",
  "hasDispute": true,
  "hasRefund": false,
  "hasSingedLong": true,
  "merId": "8102048462634665",
  "merOrderNo": "2025120214223996386811745",
  "newUser": false,
  "nonceStr": "b2a2e2c8a7a149b6ba9103ab513730d3",
  "orderAmount": "200",
  "payProduct": "18",
  "productName": "testName",
  "productQuantity": 10,
  "receiverAddressExtra": "Apt 2",
  "receiverAddressMain": "Sample street 357",
  "receiverCity": "Example city",
  "receiverCountry": "MXN",
  "receiverPhone": "1234567890",
  "receiverProvince": "Example state",
  "receiverZipCode": "01254",
  "returnUrl": "https://www.bing.com/"
}
  1. 分配的key为:lcescKqpjVtM2cz1FDsoQwgWpV7l12ct

  2. 根据规则拼接字符串得到待签名的字符串:

  1. 最终签名结果

  1. 最终请求参数

签名SDK使用

  1. 将“payful-sign”jar包引入自己的项目(deploy到maven私服)

  2. 通过com.payful.util.PayfulSignUtil#createSign(Map<String, Object> params, String key)方法完成签名操作。(参数1:Map<String, Object> ;参数2:商户密钥)

签名/验签Demo

下载“字典资源>下载”-“代码Demo”

最后更新于