最近在一個(gè)項(xiàng)目中遇到了微信支付的一些問(wèn)題,順便寫(xiě)篇筆記記錄一下。
1、errcode:48001 api unauthorized
這個(gè)問(wèn)題屬實(shí)很坑,剛剛收到這個(gè)錯(cuò)誤的時(shí)候我百度了一下,網(wǎng)上很多網(wǎng)友都說(shuō)是scope的原因,具體不再重復(fù),參考鏈接:https://blog.csdn.net/xgocn/article/details/100082900
然后花了兩天時(shí)間排查,直到我拿到前端傳過(guò)來(lái)的code,通過(guò)微信官方的調(diào)試工具依然報(bào)錯(cuò)時(shí)才問(wèn)前端你這code從那里獲得的。前端說(shuō)通過(guò)wx.login組件。
我們這個(gè)項(xiàng)目微信公眾號(hào)、小程序、APP是統(tǒng)一的賬號(hào)系統(tǒng),但是不同的端口調(diào)用的接口不一樣。wx.login屬于小程序登錄組件,獲取到的code只能通過(guò)code2session接口獲取openid。
至此問(wèn)題得以解決。
當(dāng)然如果是公眾號(hào)授權(quán)的話,大家參考上述鏈接內(nèi)容就可以解決問(wèn)題了。小程序中獲得code有兩個(gè)組件,要注意區(qū)分。
2、微信total_fee下單時(shí)要精確到分。
我們經(jīng)常用的金錢(qián)單位是元,因此商品的價(jià)格常常是類(lèi)似10.01這樣的格式,微信total_fee單位是分,在下單時(shí)我們需要乘以100,具體報(bào)的錯(cuò)誤忘了,但必須注意這個(gè)細(xì)節(jié)。
而支付寶的金額單位是元。注意區(qū)分微信和支付寶。
3、JSAPI缺少參數(shù)total_fee。
發(fā)生這種問(wèn)題首先要檢查接口返回?cái)?shù)據(jù)與官方是否一致,可以將相關(guān)數(shù)據(jù)打印輸出。
其次是訂單編號(hào)重復(fù)時(shí)也會(huì)在前端報(bào)這個(gè)錯(cuò)誤。有時(shí)候用戶(hù)對(duì)于一個(gè)訂單發(fā)起了支付,但是并未支付,第二次再次發(fā)起支付的時(shí)候,訂單中任何內(nèi)容發(fā)生變更都會(huì)報(bào)訂單重復(fù)的錯(cuò)誤。
遇到訂單重復(fù)的時(shí)候網(wǎng)友們建議的方法是修改訂單號(hào)。
4、預(yù)支付ID
預(yù)支付ID的有效期為兩個(gè)小時(shí),預(yù)支付ID為空的時(shí)候往往會(huì)發(fā)生以下三種情形:
①金額為空
②訂單編號(hào)重復(fù)
③訂單編號(hào)為空
5、微信獲取Openid的所有文檔。
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4