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