微信支付V3版本的那些事

闖.漠北發表於2015-08-06

最近在接入微信支付這塊功能,部落格園也有很多博友發表了支付的各種吐槽和解決之道,基於那些經驗分享之上,我也來說說我的填坑之路。

1:準備工作,首先去申請註冊一個公眾號——服務號,然後將微信支付功能開通,獲得一系列的微信給你分配的商戶資料(重要的是商戶號),然後在微信支付商戶中心設定支付金鑰,這個金鑰在統一下單和微信簽名裡面要用到。

2:搭建自己的支付框架專案,開始用自己熟悉的語言開發前臺支付頁面和後臺介面,這裡可能因技術棧不同,而會衍生出多種版本,你可以基於PHP,JAVA,C#,NODEJS。

3:然後當你專案能生成訂單,進入支付後,開始我們今天的核心介紹=》微信支付(暫只介紹網頁支付方式JS-API),稍後會說明我的一些難點。

4:呼叫微信支付統一下單介面(https://api.mch.weixin.qq.com/pay/unifiedorder),傳遞下單引數,主要是簽名邏輯要正確,然後各個版本都已經有很多原始碼了,注意幾個地方:

      4.1:終端IP是你微信商店線上(或測試)伺服器IP。

      4.2:統一下單簽名引數名都是小寫。

      4.3:網頁支付需要引數openid

      4.4:訂單金額單位是分,整型,不能是浮點型

5:統一下單成功後,返回預支付標識prepay_id,這個在網頁支付中需要用到。

6:開始呼叫javascript的支付方法,這裡可以使用JS-SDK的支付方法chooseWXPay,也可以用微信瀏覽器原生物件WeixinJSBridge,不同的是裡面的引數要注意大小寫問題,由於微信內部程式設計人員可能不同,導致他們引數出現了一些大小寫不統一的問題,深表失望,也給廣大開發者上了一堂課,在做第三方開放介面的同時,一定要制定統一的編碼規則(具體是timeStamp這個引數,注意appId這個參與簽名的引數大小寫問題,前臺呼叫和後臺簽名引數大小寫必須保持一致,但是統一下單介面簽名是例外,這也是微信支付的一個坑)

7:如果簽名不正確,檢查引數大小寫,最後支付要設定授權目錄,如果支付報 _invalid appid ,應該就是授權目錄的問題,規則,授權目錄一定是支付頁面所在的目錄,例如支付頁面URL是:http://mydomain/weixin/pay/pay.php ,那授權目錄是:http://mydomain/weixin/pay/ 最後有斜槓,特別注意,很多同學也已經開始開發SPA微信網頁應用,最新版本微信已經支援Html5 pushstate 特性 本人用angularjs 開啟了此特性 ,頁面URL 經過angularjs 內部轉換後呈現在位址列 等價於真是的URL,只是基於URL友好性,而且能解決微信只需要授權一次的問題,不然每個頁面都需要微信授權,授權目錄也應該基於此友好URL來設定,不然會遇到支付失敗的問題

8:以上是經驗總結,基於網上程式碼太多,不放置程式碼,任何問題可以留言討論。

相關文章