我使用微信提供的示例值,加密sing得到的值跟示例值是一样的结果,说明加密方式没错,但是最后构建了Authorization调用api后,总是返回"错误的签名,验签失败",返回的truncated_sign_message也跟我构造的请求签名串前面部分一样,但是从请求body开始少了一大段,从这里开始被加入了一个换行符被截断了
这是哪里出了问题?
api返回的信息:{
"message":"错误的签名,验签失败",
"code":"SIGN_ERROR",
"detail":{
"field":"signature",
"location":"authorization",
"sign_information":{
"method":"POST",
"sign_message_length":467,
"truncated_sign_message":"POST\n/v3/fund-app/mch-transfer/transfer-bills\n1760279112\nYOWQHTWVU5QEBLW6DNM10IFFSUDXHFHV\n{\"appid\"\n",
"url":"/v3/fund-app/mch-transfer/transfer-bills"
},
"detail":{
"issue":"sign not match"
}
}
}
我构建得到的 Authorization:WECHATPAY2-SHA256-RSA2048 mchid=\"1510487411\",serial_no=\"236E75CA5B25D5A191DE552A3FAF0DE98B84F109\",timestamp=\"1760279112\",nonce_str=\"YOWQHTWVU5QEBLW6DNM10IFFSUDXHFHV\",signature=\"UB+9LGlEZrAXuP28PailiDH5Bvfdp4Z+ESQZo/teVLdReT9Di5wjHoiHpLg4crhG7vDIcqmfqdltt3KFDxI/c1UXzDfyiBykH3DyiB9K39zxWwjmw9238x3SlqxqugyEhYoNIEIfSJog7PEtxTY8HoFESIgoSD3Wgoom5/NnsfUvSW9IKplZJ3dbj3NEKjID2mVS9EIxpi+Rqb+AYaqS7015w3LOsE0QsSTaTOTMMKvgoVoI3K2FPAF9y4oPugy/AgB5mroMyfUSq0xDL4qZLFMFzZYjYOsr0/W1ZuSCKrMeqxMSGI7/TfpkWW9khmk291sQS8a0I4l7KrNz6aYtGQ==\"
构造的请求签名串:POST\n/v3/fund-app/mch-transfer/transfer-bills\n1760279112\nYOWQHTWVU5QEBLW6DNM10IFFSUDXHFHV\n{\"appid\":\"wx6260fd7cd0728f7c\",\"out_bill_no\":\"GtHnFkdmgY7OW0miWJinJ41niF6c6thL\",\"transfer_scene_id\":\"1005\",\"openid\":\"o-MYE42l80oelYMDE34nYD456Xoy\",\"transfer_amount\":1,\"transfer_remark\":\"新会员开通有礼\",\"transfer_scene_report_infos\":[{\"info_type\":\"活动名称\",\"info_content\":\"新会员有礼\"},{\"info_type\":\"奖励说明\",\"info_content\":\"注册会员抽奖一等奖\"}]}\n
文档就那么几行东西,也没什么特殊的,用示例值得到的加密结果没问题,但是到了api里怎么就无法验证签名了呢?
你好 这边经查询该商户号有3套历史商户API证书,只有1套是有效的。辛苦检查下使用的apiclient_key.pem是否和商户序列号一致对应。可以通过签名工具使用指引(参考https://pay.weixin.qq.com/doc/v3/merchant/4012365352)使用验签工具(3.1.3)进行验签或者先验证下证书匹配关系(4.1)
这种一般是请求参数和计算签名参数不一致导致的,例如请求报文主体(request body)将所有参数放在一行,对应的发起签名请求的时候body参数也应该放在一行,如果你计算的时候是一行请求的时候是格式化后的多行 json 是不行的