小程序
小游戏
企业微信
微信支付
扫描小程序码分享
在开发商家转账到零钱的功能时,使用免确认收款授权(/v3/fund-app/mch-transfer/user-confirm-authorization)请求时一直会返回401 SIGN_ERROR(错误的签名,验签失败)的提醒,但是通过提供的工具验签是正确的,现在也不知道到底错在哪里
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
**1. 确认使用了正确的商户API私钥**
- 必须使用 `apiclient_key.pem`(商户API私钥),而非 `apiclient_cert.pem`(商户API证书)或 `wechatpay.pem`(平台证书公钥)
- 如果是服务商模式,需使用服务商的商户API私钥,而非子商户的
**2. 确认私钥、商户号、证书序列号三者一一对应**
- 用 `openssl x509 -in apiclient_cert.pem -noout -serial` 查看证书序列号,确认与 Authorization 头中的 `serial_no` 一致
- 用 `openssl x509 -in apiclient_cert.pem -noout -text | grep -o 'CN=[0-9]*' | sed 's/CN=//'` 查看证书对应的商户号,确认与 Authorization 头中的 `mchid` 一致
**3. 确认 Authorization 头中的 nonce_str 和 timestamp 与签名计算时使用的值一致**
- 计算签名时传入的时间戳和随机串,必须与 HTTP Authorization 头中传递的值完全相同
**4. 检查签名串构造格式**
- 签名串拼接规则:`HTTP方法\nURL路径\n时间戳\n随机串\n请求体\n`,每行以换行符 `\n` 结尾
- HTTP 方法必须大写(`POST`,而非 `post`)
- URL 路径不带域名,格式为 `/v3/fund-app/mch-transfer/user-confirm-authorization`,而非 `https://api.mch.weixin.qq.com/v3/...`
- URL 路径中不要出现多余的 `/`(如 `//v3/...`)
- `\n` 是换行符,不是两个字符;POST 请求第5行为请求体,GET 请求第5行为空行+换行符
**5. 检查 Authorization 头格式**
- 整个 Authorization 值必须在**一行**内,不能有换行
- 认证类型为 `WECHATPAY2-SHA256-RSA2048`
- 参数值用**双引号**包裹,不是单引号
- 所有符号必须是英文符号,参数之间不要有空格
**6. 检查系统时间**
- Authorization 头中的 timestamp 与发起请求的时间不得超过 5 分钟,请确认服务器系统时间准确
**7. 排除代码转义问题**
- 如果以上均确认无误,可能是代码对签名串做了额外转义。可用官方文档中的示例密钥和请求计算签名,对比结果是否一致
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
贴代码
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
**1. 确认使用了正确的商户API私钥**
- 必须使用 `apiclient_key.pem`(商户API私钥),而非 `apiclient_cert.pem`(商户API证书)或 `wechatpay.pem`(平台证书公钥)
- 如果是服务商模式,需使用服务商的商户API私钥,而非子商户的
**2. 确认私钥、商户号、证书序列号三者一一对应**
- 用 `openssl x509 -in apiclient_cert.pem -noout -serial` 查看证书序列号,确认与 Authorization 头中的 `serial_no` 一致
- 用 `openssl x509 -in apiclient_cert.pem -noout -text | grep -o 'CN=[0-9]*' | sed 's/CN=//'` 查看证书对应的商户号,确认与 Authorization 头中的 `mchid` 一致
**3. 确认 Authorization 头中的 nonce_str 和 timestamp 与签名计算时使用的值一致**
- 计算签名时传入的时间戳和随机串,必须与 HTTP Authorization 头中传递的值完全相同
**4. 检查签名串构造格式**
- 签名串拼接规则:`HTTP方法\nURL路径\n时间戳\n随机串\n请求体\n`,每行以换行符 `\n` 结尾
- HTTP 方法必须大写(`POST`,而非 `post`)
- URL 路径不带域名,格式为 `/v3/fund-app/mch-transfer/user-confirm-authorization`,而非 `https://api.mch.weixin.qq.com/v3/...`
- URL 路径中不要出现多余的 `/`(如 `//v3/...`)
- `\n` 是换行符,不是两个字符;POST 请求第5行为请求体,GET 请求第5行为空行+换行符
**5. 检查 Authorization 头格式**
- 整个 Authorization 值必须在**一行**内,不能有换行
- 认证类型为 `WECHATPAY2-SHA256-RSA2048`
- 参数值用**双引号**包裹,不是单引号
- 所有符号必须是英文符号,参数之间不要有空格
**6. 检查系统时间**
- Authorization 头中的 timestamp 与发起请求的时间不得超过 5 分钟,请确认服务器系统时间准确
**7. 排除代码转义问题**
- 如果以上均确认无误,可能是代码对签名串做了额外转义。可用官方文档中的示例密钥和请求计算签名,对比结果是否一致
贴代码