微信支付在服务器端有两步骤:
1、组合自己的业务数据(商户ID,订单号,支付金额等等),调用 【调用别人写好的库】,那库里一顿操作还包含往微信服务发送数据,会返回给你一个结果,接下来,检查这个结果的【错误状态】,微信分为了【通信结果(return_code)与业务结果(result_code)】根据 这两个检查自己的问题。这个结果里有一个重要的返回值 prepay_id
2、计算签名,再次调用【别人的库】去计算签名,看参数传值,这里就需要 prepay_id,完事后 下发 小程序 wx.requestpayment需要的参数。
如果顺利走完了这两部说明程序执行是通的没什么问题,【有问题在第一步微信都会把问题结果返回的】,但在小程序调用 wx.requestpayment 时如果出现了如标题里提示的错误,一般都是,1、里面的参数和2、计算签名的传入的参数的值有出入的。
比如:1,中组合数据时 需要 noncestr 用了个 系统时间作为随机数,当在第二步有需要传一个 noncestr 又是直接系统时间随机数,这时很不巧,这两部的执行时间间隔大了。这时在小程中调用wx.requestpayment 发到微信的 验证数据,跟 现存微信支付服务器中 等待支付的 验证签名不同,就会提示”支付验证签名失败“
不知道为什么明明与官方验证签名工具算出来的签名一致,还会报错签名验证失败