您好,登錄后才能下訂單哦!
小編給大家分享一下App移動客戶端如何集成微信支付,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
首先,你得去微信開放平臺申請微信支付。經過比較漫長的申請過程,審核通過之后,可以去這里下載文檔和demo。
使用方式描述: 當使用App點擊微信支付,會直接跳轉到微信進行支付。
獲取access token
獲取prepayid
得到sign,結合prepayid發起微信支付請求
支付完成
上面的所有步驟,你可以在iOS或者Andriod端完成,但是,為了安全最好在服務端完成前兩步。
而我就是在服務端完成了前兩步,使用Ruby。
使用access token 訪問支付接口。
預支付訂單的生成包含雙重驗證: a:package為訂單數據打包,攜帶一個md5簽名,sign, b:app_signature則為訪問接口使用簽名驗證,sha1。
得到預支付id,生成客戶端發起微信支付請求需要的sign,這個c: client_pay_sign是sha1簽名。因為你在服務端完成簽名,所以移動客戶端不需要知道package的具體值了,因為已經從服務端創建預支付訂單的時候傳過去了,所以這里只需要固定值“Sign=WXPay”
最終,需要把預支付id和簽名c(上面那個client_pay_sign)傳給客戶端,客戶端就可以發起微信支付請求了。
整個過程客戶端完全不知道appkey,secret,partnerid等敏感數據。
下面是值的注意的地方:
微信支付的文檔里寫的是用GET,我就不吐槽騰訊的文檔了,你用GET能取到的只有錯誤碼。所以這個地方是用POST,才能取到access token。
當然這里你用到的APPID和APPSECRET是你申請成功微信支付后才會有的。
第一眼看微信支付的文檔,感覺是和支付寶快捷支付一樣,但是看到這一步的時候,感覺微信支付做的更安全。生成預支付訂單完全可以在服務端完成。
很多人會碰到一個錯誤:{"errcode":40001,"errmsg":"invalid credential"}
這個時候需要仔細檢查你的access token是不是給對了。
然后就是POST Data,一定要是json對象, 要仔細看文檔,寫對參數名,否則會碰到{"errcode":49004,"errmsg":"not match signature"}的錯誤。
生成package
這個地方文檔描述的不是很正確,不知道是不是寫文檔的人語文沒學好,我來把文檔重新糾正一下。
A)對所有傳入參數按照字段名的 ASCII 碼從小到大排序(字典序)后,使用 URL 鍵值對的格 式(即 key1=value1&key2=value2...)拼接成字符串 string1;
B) 在 string1 最后拼接上 key=partnerKey 得到 stringSignTemp 字符串, 并對 stringSignTemp 進行 md5 運算,再將得到的字符串所有字符轉換為大寫,得到 sign 值 signValue。
C)對 string1 中的所有鍵值對中的 value 進行 urlencode 轉碼,按照 a 步驟重新拼接成字符 串,得到 string2。對于 js 前端程序,一定要使用函數 encodeURIComponent 進行 urlencode 編碼(注意!進行 urlencode 時要將空格轉化為%20 而不是+)。
D)將 sign=signValue 拼接到 string2 后面得到最終的 package 字符串。
字典序,在Ruby里,用sort方法就可以了。
文檔里的D)寫的是把sign=signValue拼接到string1后面,應該是拼到string2后面,也就是經過url encode的字串。
我被坑到的地方就是,POST Data轉成json對象的時候,使用了to_json方法, 把package參數里的&符號轉成了\u0026。
應該使用JSON.generate(data)來轉換。
把上面所說的搞對,基本就很順了。
生成app_signature
這里需要注意的是,appkey就是paySignKey, 128位長的字符串, 請不要和app secret、appid搞混。
以上是“App移動客戶端如何集成微信支付”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。