從昨天到今天微信小程序客戶端始終都有這個問題,一直覺得是服務端這裏有問題,後面才發現原來微信有個神坑,通常來講統一下單接口會返回相似以下數據php
{ "return_code": "SUCCESS", "return_msg": "OK", "appid": "wxc123456789", "mch_id": "12345678", "nonce_str": "tlI5Oy3QigCQHQQM", "sign": "8EAB94045E948AD7D126937ED7EF9032", "result_code": "SUCCESS", "prepay_id": "wx221639448194778a79a9510a2883548319", "trade_type": "JSAPI" }
這個時候客戶端拿到,就能夠拉起微信支付了,因而客戶端就這麼幹了:json
wx.requestPayment({ timeStamp: timestamp, nonceStr: res.data.nonce_str, package: 'prepay_id=' + res.data.prepay_id,//這裏也要注意去拼接這個prepay_id=,略坑,可是很容易搜到解決辦法 signType: 'MD5', paySign: res.data.sign,//這裏是剛纔請求統一下單接口拿到的sign,放這裏直接用是錯誤的,坑就在這裏,巨坑 success(res) { console.log(res) }, fail(res) { console.log(res) } })
而後就會報錯 支付驗證簽名失敗,那麼這個paySign到底應該咋獲取呢,這裏有文檔,不少人都不知道要在微信小程序客戶端再作一次這個加密過程動做:小程序
wx.requestPayment
將要準備發起請求的參數中的:'appId' 'timeStamp' 'nonceStr' 'package' 'signType' 等字段進行字典序排序,而後拼接上API安全key(key設置路徑:微信商戶平臺(pay.weixin.qq.com)-->帳戶設置-->API安全-->密鑰設置
)