签名常见问题解决方案
一、amount金额值问题。
因目前系统用的是解释型语言,.0 .00类无效小数位在接收转换时会被自动抹除掉,请去掉.0 .00部分无效小数位,或将金额值改为字符串格式,如: "100.00"。
二、加密方式问题。
系统签名加密方式为sha256,非md5。
三、extra字段值处理问题。
常见于代付部分。为保障签名字符串一致,出现extra字段时,签名时需要将extra的值转换为Map 集合,按照key的Unicode进行排序。然后将Map中参数以 key1=value1&key2=value2&key3=value3的形式拼接为新的字符串作为extra的值。
示例如下:
请求数据:
{
"amount":100,
"appId":"appidxxx",
"currency":"BRL",
"extra":{
"accountName":"TEST",
"accountNo":"123@gmail.com",
"bankCode":"EMAIL"
},
"merOrderNo":"orderxxx",
"notifyUrl":"http://example.com/notify"
}
extra字段值处理后为:
"accountName=TEST&accountNo=123@gmail.com&bankCode=EMAIL"
最终待签名字符串:
"amount=100&appId=appidxxx¤cy=BRL&extra=accountName=TEST&accountNo=123@gmail.com&bankCode=EMAIL&merOrderNo=orderxxx¬ifyUrl=http://example.com/notify&key=xxxx"
四、appId和签名密钥不匹配问题。
若系统中存在两对儿appId+密钥,请注意其中一对儿用于代收,另一对儿用于代付,不要混淆。
若系统中仅存在一对儿appId+密钥,则忽略此部分。
(具体appId+密钥,在商户管理后台“开发者”页面中查看,若超时不予展示,请直接重置:重置时需填充管理后台登录密码)
五、其它字段值为obj对象时示正确参于签名问题。
若其它参数值为对象,会将其转换为JSON字符串后再参与加密
此部分多见于代收下单时响应数据的处理,其中"params"字段值为obj。
示例如下:
响应数据:
{
"amount":100,
"params":{
"qrcode":"00020126940014BR.GOV.BCB.PIX2572api-pix.bancobs2.com.br/spi/v2/cobv/255f36f7-6d7d-48fc-9f56-47181be823aa520400005303986540530.005802BR5924Voluti Gestao Financeira6011Pato Branco61088550338162070503***63045F27",
"url":"https://xxx.h.betcatpay.com/payment/94230311013500999186060015?amount=100¤cy=BRL&qrcode=00020126940014BR.GOV.BCB.PIX2572api-pix.bancobs2.com.br%2Fspi%2Fv2%2Fcobv%2F255f36f7-6d7d-48fc-9f56-47181be823aa520400005303986540530.005802BR5924Voluti%20Gestao%20Financeira6011Pato%20Branco61088550338162070503***63045F27"
},
"orderStatus":1,
"orderNo":"94230311013500999186060015",
"currency":"BRL",
"createTime":1678498652499,
"merOrderNo":"orderxxx",
"updateTime":1678498652719
}
params字段值转换后:
'{"qrcode":"00020126940014BR.GOV.BCB.PIX2572api-pix.bancobs2.com.br/spi/v2/cobv/255f36f7-6d7d-48fc-9f56-47181be823aa520400005303986540530.005802BR5924Voluti Gestao Financeira6011Pato Branco61088550338162070503***63045F27","url":"https://xxx.h.betcatpay.com/payment/94230311013500999186060015?amount=100¤cy=BRL&qrcode=00020126940014BR.GOV.BCB.PIX2572api-pix.bancobs2.com.br%2Fspi%2Fv2%2Fcobv%2F255f36f7-6d7d-48fc-9f56-47181be823aa520400005303986540530.005802BR5924Voluti%20Gestao%20Financeira6011Pato%20Branco61088550338162070503***63045F27"}'
最终待签名字符串:
"amount=100&createTime=1678498652499¤cy=BRL&merOrderNo=orderxxx&orderNo=94230311013500999186060015&orderStatus=1¶ms={"qrcode":"00020126940014BR.GOV.BCB.PIX2572api-pix.bancobs2.com.br/spi/v2/cobv/255f36f7-6d7d-48fc-9f56-47181be823aa520400005303986540530.005802BR5924Voluti Gestao Financeira6011Pato Branco61088550338162070503***63045F27","url":"https://xxx.h.betcatpay.com/payment/94230311013500999186060015?amount=100¤cy=BRL&qrcode=00020126940014BR.GOV.BCB.PIX2572api-pix.bancobs2.com.br%2Fspi%2Fv2%2Fcobv%2F255f36f7-6d7d-48fc-9f56-47181be823aa520400005303986540530.005802BR5924Voluti%20Gestao%20Financeira6011Pato%20Branco61088550338162070503***63045F27"}&updateTime=1678498652719&key=xxxx"
注意部分:为避免一些编程语言在map对象转json字符串儿时,默认做了排序而不好调整的问题,本系统在处理这类数据时,均已将map值按照key的Unicode进行升序排序。
六、部分字段未参与签名问题。
常见于响应返回时的验签不匹配。本系统中需要签名的处理环节,所有业务字段均须参与签名。为应对业务性的字段增减,建议对数据进行签名时对参与字段做弹性适配(字符串的固定拼接模式将会无法适应字段的增减)。
最后修改时间: 2 年前