溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

App移動客戶端如何集成微信支付

發(fā)布時間:2021-12-22 14:11:32 來源:億速云 閱讀:178 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下App移動客戶端如何集成微信支付,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

申請微信支付:

首先,你得去微信開放平臺申請微信支付。經(jīng)過比較漫長的申請過程,審核通過之后,可以去這里下載文檔和demo。

開發(fā)

使用方式描述: 當(dāng)使用App點擊微信支付,會直接跳轉(zhuǎn)到微信進(jìn)行支付。

開發(fā)步驟:

  • 獲取access token

  • 獲取prepayid

  • 得到sign,結(jié)合prepayid發(fā)起微信支付請求

  • 支付完成

上面的所有步驟,你可以在iOS或者Andriod端完成,但是,為了安全最好在服務(wù)端完成前兩步。

而我就是在服務(wù)端完成了前兩步,使用Ruby。

支付邏輯

  • 使用access token 訪問支付接口。

  • 預(yù)支付訂單的生成包含雙重驗證: a:package為訂單數(shù)據(jù)打包,攜帶一個md5簽名,sign, b:app_signature則為訪問接口使用簽名驗證,sha1。

  • 得到預(yù)支付id,生成客戶端發(fā)起微信支付請求需要的sign,這個c: client_pay_sign是sha1簽名。因為你在服務(wù)端完成簽名,所以移動客戶端不需要知道package的具體值了,因為已經(jīng)從服務(wù)端創(chuàng)建預(yù)支付訂單的時候傳過去了,所以這里只需要固定值“Sign=WXPay”

  • 最終,需要把預(yù)支付id和簽名c(上面那個client_pay_sign)傳給客戶端,客戶端就可以發(fā)起微信支付請求了。

  • 整個過程客戶端完全不知道appkey,secret,partnerid等敏感數(shù)據(jù)。


下面是值的注意的地方:

獲取access token

 
POST url = https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential# post paramsappid=APPIDsecret=APPSECRET

微信支付的文檔里寫的是用GET,我就不吐槽騰訊的文檔了,你用GET能取到的只有錯誤碼。所以這個地方是用POST,才能取到access token。
當(dāng)然這里你用到的APPID和APPSECRET是你申請成功微信支付后才會有的。

獲取prepayid

第一眼看微信支付的文檔,感覺是和支付寶快捷支付一樣,但是看到這一步的時候,感覺微信支付做的更安全。生成預(yù)支付訂單完全可以在服務(wù)端完成。

 
POST  https://api.weixin.qq.com/pay/genprepay?access_token=ACCESS_TOKEN

很多人會碰到一個錯誤:{"errcode":40001,"errmsg":"invalid credential"}
這個時候需要仔細(xì)檢查你的access token是不是給對了。

然后就是POST Data,一定要是json對象, 要仔細(xì)看文檔,寫對參數(shù)名,否則會碰到{"errcode":49004,"errmsg":"not match signature"}的錯誤。

生成package
這個地方文檔描述的不是很正確,不知道是不是寫文檔的人語文沒學(xué)好,我來把文檔重新糾正一下。

  • A)對所有傳入?yún)?shù)按照字段名的 ASCII 碼從小到大排序(字典序)后,使用 URL 鍵值對的格 式(即 key1=value1&key2=value2...)拼接成字符串 string1;

  • B) 在 string1 最后拼接上 key=partnerKey 得到 stringSignTemp 字符串, 并對 stringSignTemp 進(jìn)行 md5 運算,再將得到的字符串所有字符轉(zhuǎn)換為大寫,得到 sign 值 signValue。

  • C)對 string1 中的所有鍵值對中的 value 進(jìn)行 urlencode 轉(zhuǎn)碼,按照 a 步驟重新拼接成字符 串,得到 string2。對于 js 前端程序,一定要使用函數(shù) encodeURIComponent 進(jìn)行 urlencode 編碼(注意!進(jìn)行 urlencode 時要將空格轉(zhuǎn)化為%20 而不是+)。

  • D)將 sign=signValue 拼接到 string2 后面得到最終的 package 字符串。

字典序,在Ruby里,用sort方法就可以了。
文檔里的D)寫的是把sign=signValue拼接到string1后面,應(yīng)該是拼到string2后面,也就是經(jīng)過url encode的字串。

我被坑到的地方就是,POST Data轉(zhuǎn)成json對象的時候,使用了to_json方法, 把package參數(shù)里的&符號轉(zhuǎn)成了\u0026。
應(yīng)該使用JSON.generate(data)來轉(zhuǎn)換。

把上面所說的搞對,基本就很順了。

生成app_signature

這里需要注意的是,appkey就是paySignKey, 128位長的字符串, 請不要和app secret、appid搞混。

以上是“App移動客戶端如何集成微信支付”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

app
AI