小程序调起支付时提示“签名错误”怎么办?
我在开发微信小程序的支付功能,后端返回了 prepay_id 和签名,但前端调用 wx.requestPayment 时一直报“签名错误”。
已经确认 appId、timeStamp、nonceStr、package、signType 都传了,也按文档做了大小写处理,可还是不行。是不是签名算法哪里出问题了?
后端给的签名参数是这样的:
{
"appId": "wx1234567890",
"timeStamp": "1712345678",
"nonceStr": "abcdefg123456",
"package": "prepay_id=wx1234567890abcdef",
"signType": "RSA",
"paySign": "a1b2c3d4e5f6..."
}
我前端直接把这些字段传给 wx.requestPayment,但就是过不去,急死了!
首先确认下签名参数拼接顺序,微信要求严格按这个顺序拼接字符串:
appId、timeStamp、nonceStr、package、signType(注意大小写)
然后重点来了!现在用RSA签名的话,
paySign要用后端给的整个字符串,不能自己拼接。你检查下是不是前端自己拼接参数生成了签名?如果是的话就错了,RSA签名必须完全用后端返回的paySign值。前端调用应该长这样:
还有个坑就是时间戳,确认下是不是字符串类型传的?微信要求字符串格式的数字时间戳。
如果还是不行,让后端把签名的原始字符串和生成结果打印出来,两边对比下看哪里对不上。我上次就是发现后端把package值多包了一层引号...真的会谢!