signData={"amount":{"currency":"CNY","freight":100,"order_amount":1100,"product_amount":1000},"description":"测试商品001","env":"1","mchid":"1706927495","out_trade_no":"APPLETRETAILPAY250217150346HJ22"}
paySig=91479d39210c305f3b27511dbb0d4a4e7a4192ee319b0118c779cab8f7912701
signature=1444f2fab44ee78ac46654d50e6f1dc76ad6305e4b7af86d37b84ae357bf83e4
用户态签名和支付签名用的都是HmacSHA256计算
wx.requestPayment
接口报错fail invalid signature
通常是由于支付签名(signature)不正确导致的。微信支付需要对请求参数进行签名,以确保请求的安全性。如果签名错误,支付接口会拒绝请求并返回该错误。以下是可能的原因和解决方案:
1. 检查签名算法是否正确
微信支付的签名算法是基于
HMAC-SHA256
的。你需要确保以下几点:HMAC-SHA256
)。签名步骤如下:
sign
外)按参数名的字典序排序。key1=value1&key2=value2...
。API key
)对拼接后的字符串进行HMAC-SHA256
加密。示例代码(Node.js):
javascript
复制
const crypto = require('crypto'); function generateSignature(params, apiKey) { const sortedParams = Object.keys(params).sort().map(key => `${key}=${params[key]}`).join('&'); const signature = crypto.createHmac('sha256', apiKey).update(sortedParams).digest('hex').toUpperCase(); return signature; }
2. 检查请求参数是否正确
确保传递给
wx.requestPayment
的参数完整且正确。以下是必填参数:timeStamp
:时间戳(字符串类型)。nonceStr
:随机字符串。package
:统一下单接口返回的prepay_id
,格式为prepay_id=xxx
。signType
:签名类型,固定为HMAC-SHA256
。paySign
:签名。示例:
javascript
复制
wx.requestPayment({ timeStamp: '1697011200', nonceStr: '5K8264ILTKCH16CQ2502SI8ZNMTM67VS', package: 'prepay_id=wx1234567890abcdef', signType: 'HMAC-SHA256', paySign: 'C380BEC2BFD727A4B6845133519F3AD6', success(res) { console.log('支付成功', res); }, fail(err) { console.error('支付失败', err); } });