微信支付僅能成功調(diào)用一次問題的解決方法(Android)
本人使用Android開發(fā)有一段時(shí)間了,但是本身沒有系統(tǒng)學(xué),而且多年專注服務(wù)端開發(fā),總覺得因?yàn)轫?xiàng)目需要接觸Android移動端開發(fā)只是暫時(shí)的,所以沒有太上心,結(jié)果碰到一個(gè)大難題折騰了一天,最后被有經(jīng)驗(yàn)的小伙伴提示了一下才迎刃而解,感覺無地自容的同時(shí),又非常竊喜,畢竟跨過一個(gè)一個(gè)的坎,就成長了,在這里丟人等換個(gè)地方就成牛了也未可知,哈哈。閑言就絮叨到這里,趕緊分享:
微信支付調(diào)用接口整體的流程有必要簡述一下(目前網(wǎng)上的資料大部分都是適配微信支付舊版的代碼,最新的微信支付官方文檔中并沒有服務(wù)端的Demo,而且一些接口都變了,參數(shù)名稱也有變化,希望小伙伴們能夠注意):
1. 微信支付不需要訪問獲取Token那個(gè)接口了;
2. 直接訪問https://api.mch.weixin.qq.com/pay/unifiedorder 獲得Prepayid,參數(shù)以 xml格式傳輸就可以;
3. 有了Prepayid再加上一些其他的官網(wǎng)中提到的參數(shù)就可以調(diào)起客戶端的微信支付接口了;
此時(shí)就出現(xiàn)問題了:第一次調(diào)用非常OK,看到了微信支付界面,有自己生成的訂單號還有金額,但是放棄支付后再進(jìn)入,就連微信客戶端都調(diào)用不起來了,換個(gè)訂單也是這樣,換個(gè)手機(jī)也是第一單可以調(diào)用微信客戶端,展示訂單號,金額,但是第二單說什么也不行了,定格在自己APP的支付界面,不報(bào)錯(cuò),任何反應(yīng)也沒有。
原因就出現(xiàn)在這里: 我們申請微信支付的時(shí)候,有個(gè)地方會讓你填寫你的應(yīng)用Key:
申請以后你看到的就是圖片上的應(yīng)用簽名,這個(gè)簽名是如何生成的在這里有介紹: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
問題是這個(gè)Key的生成是跟正式發(fā)布時(shí)打包做簽名有關(guān)的,我們把Android應(yīng)用公開release的時(shí)候會將這個(gè)Key加進(jìn)去作為應(yīng)用的key防止被惡意覆蓋等等,我們在申請注冊微信應(yīng)用的時(shí)候必然要提供正式生成的這個(gè)應(yīng)用的Key給微信官網(wǎng)。
因此這件事就被忽略了,以至于在開發(fā)的過程中,我們在自己的本地運(yùn)行打包,訪問微信服務(wù)器調(diào)起支付的時(shí)候,微信第一次拿到了我們的應(yīng)用發(fā)來的請求,仿佛建立了連接開始了心跳,
這時(shí)微信會異步地根據(jù)留存的應(yīng)用包名和應(yīng)用Key與你現(xiàn)在發(fā)送的包名和應(yīng)用Key進(jìn)行驗(yàn)證,我相信即使你第一次進(jìn)行付款,也是很有可能不成功的,但是這塊我就沒有驗(yàn)證了,因?yàn)檫@個(gè)時(shí)候已經(jīng)有驗(yàn)證結(jié)果回調(diào)回來了。
所以跟運(yùn)維人員拿了Release時(shí)把Key打到APK安裝包里的命令,進(jìn)行包含正式Key的打包,命令如下:
``` cordova build --release android jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA1 -keystore E:\android-release-key.keystore E:\項(xiàng)目名稱\platforms\android\build\outputs\apk\android-release-unsigned.apk android-release-key.keystore //運(yùn)行完這條命令需要輸入密碼 zipalign -v 4 E:\項(xiàng)目名稱\platforms\android\build\outputs\apk\android-release-unsigned.apk a.apk ```
問題就解決了。每次訪問都能順利地調(diào)用微信支付了。 不得不感慨下,微信用這一手也嚴(yán)格控制了在他那里注冊的應(yīng)用,注冊一個(gè)Key用一個(gè),再想用,那么重新走流程吧。
本文已被整理到了《Android微信支付教程匯總》,歡迎大家學(xué)習(xí)閱讀。
更多精彩內(nèi)容點(diǎn)擊《Android微信開發(fā)教程匯總》,《java微信開發(fā)教程匯總》歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
仿墨跡天氣在Android App中實(shí)現(xiàn)自定義zip皮膚更換
這篇文章主要介紹了仿墨跡天氣在Android App中實(shí)現(xiàn)自定義zip皮膚更換的方法,即讓用戶可以自行通過自制或者下載的zip皮膚包進(jìn)行換膚,需要的朋友可以參考下2016-02-02快速了解Android?Room使用細(xì)則進(jìn)階
這篇文章主要為大家介紹了快速了解Android?Room使用細(xì)則進(jìn)階,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android中TextView文本高亮和點(diǎn)擊行為的封裝方法
這篇文章主要介紹了Android中TextView文本高亮和點(diǎn)擊行為的封裝方法,文中介紹的非常詳細(xì),相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-035個(gè)Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法
本文主要介紹了5個(gè)Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02Android 使用AsyncTask實(shí)現(xiàn)多任務(wù)多線程斷點(diǎn)續(xù)傳下載
這篇文章主要介紹了Android 使用AsyncTask實(shí)現(xiàn)多任務(wù)多線程斷點(diǎn)續(xù)傳下載的相關(guān)資料,需要的朋友可以參考下2018-05-05Android AutoWrapTextView中英文排版問題的解決方法
這篇文章主要給大家介紹了關(guān)于Android AutoWrapTextView中英文排版問題的解決方法,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05深入淺出RxJava+Retrofit+OkHttp網(wǎng)絡(luò)請求
本篇文章主要介紹了深入淺出RxJava+Retrofit+OkHttp網(wǎng)絡(luò)請求,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11深入Android中BroadcastReceiver的兩種注冊方式(靜態(tài)和動態(tài))詳解
這篇文章主要介紹了深入Android中BroadcastReceiver的兩種注冊方式(靜態(tài)和動態(tài))詳解,具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12解決Android自定義view獲取attr中自定義顏色的問題
這篇文章主要介紹了Android自定義view獲取attr中自定義顏色的問題解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12