收藏
回答

商家转帐接口报错:错误的签名,验签失败

我使用微信提供的示例值,加密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里怎么就无法验证签名了呢?

回答关注问题邀请回答
收藏

2 个回答

  • 支付社区运营
    支付社区运营
    4小时前

    你好 这边经查询该商户号有3套历史商户API证书,只有1套是有效的。辛苦检查下使用的apiclient_key.pem是否和商户序列号一致对应。可以通过签名工具使用指引(参考https://pay.weixin.qq.com/doc/v3/merchant/4012365352)使用验签工具(3.1.3)进行验签或者先验证下证书匹配关系(4.1)

    4小时前
    有用
    回复
  • Memory (私信不回复)
    Memory (私信不回复)
    5小时前

    这种一般是请求参数和计算签名参数不一致导致的,例如请求报文主体(request body)将所有参数放在一行,对应的发起签名请求的时候body参数也应该放在一行,如果你计算的时候是一行请求的时候是格式化后的多行 json 是不行的

    5小时前
    有用
    回复
登录 后发表内容