# 签名
# 签名算法
# 签名生成步骤
- 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
- 在stringA最后拼接上key(商户密钥)得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue
# 特别注意
- 参数名ASCII码从小到大排序(字典序);
- 如果参数的值为空不参与签名;
- 参数名区分大小写;
- 验证调用返回或支付系统主动通知签名时,数据中sign参数不参与签名,将生成的签名与该sign值作校验。
- 支付接口可能增加字段,验证签名时必须支持增加的扩展字段。
- 签名时商户密钥使用设置时的明文(未绑定谷歌验证码可能导致商户后台密钥显示密文)
# 示例
例如请求参数如下:
{
"countryId": "COL",
"currency": "COP",
"customerAccount": "3720000264",
"merId": "8301000002750275",
"merOrderNo": "merOrderNo",
"nonceStr": "string",
"orderAmount": "30000",
"payProduct": "08",
"nonceStr": "4cKcL83FIsDgjAi"
}
根据规则拼接字符串得到待签名的字符串:
countryId=COL¤cy=COP&customerAccount=3720000264&merId=8301000002750275&merOrderNo=merOrderNo&nonceStr=4cKcL83FIsDgjAi&orderAmount=30000&payProduct=08&key=11111111111111111111111111111111
签名结果如下:
1DD2448C750D92B3AE512F2E493F5665
最终请求参数为:
{
"countryId": "COL",
"currency": "COP",
"customerAccount": "3720000264",
"merId": "8301000002750275",
"merOrderNo": "merOrderNo",
"nonceStr": "string",
"orderAmount": "30000",
"payProduct": "08",
"nonceStr": "4cKcL83FIsDgjAi",
"sign": "1DD2448C750D92B3AE512F2E493F5665"
}
# 签名SDK使用
- SDK下载见“下载”-“签名SDK”
- 将“supefina-sign”jar包引入自己的项目
- 通过
com.supefina.sign.SupefinaSignUtils#sign(java.lang.Object, java.lang.String)
方法完成签名操作- 参数1:请求参数json对象
- 参数2:商户密钥