Cordova - 徹底搞定安卓中的微信支付插件!


Cordova:8.0.0

Android studio:3.2.1

cordova-plugin-adam-wechat : 3.0.6

你看到這個標題肯定會驚訝,一個Cordova的微信支付插件,有這么誇張嗎?

一,不要使用的微信支付插件https://github.com/xu-li/cordova-plugin-wechat 

上面的插件,是目前大家在網上搜索文章時候,推薦最多的插件,但是,插件開發者,已經不再維護這個插件了,從最新版插件的代碼看,確實是那樣,其中從2.0.0開始的bug,到了最終的2.3.0也沒有修復,而且還增加了bug!如果真的想使用上面這個插件,而且你沒有能力去修改bug,我強烈建議你使用2.1.0版本,安裝命令如下:

cordova-plugin-wechat@2.1.0 --variable wechatappid=你的微信appid

下面是這個插件的bug列表,以及修復方法:一共3個bug!

1,微信支付類安裝路徑錯誤。這個插件在安裝時候,把微信支付類安裝到了錯誤路徑下。當你安裝這個插件之后,你會發現在"你的工程目錄platforms\android"下有一個"src"文件夾,這個文件夾正常是不應該存在的,如果有是因為這個插件安裝JS的bug導致的!這個bug從2.0.0開始,一直到2.3.0都沒有修復!!

修復方法1:修改安裝插件安裝JS文件。

打開文件“你的工程目錄\plugins\cordova-plugin-adam-wechat\scripts\android-install.js”,在44行左右,找到“targetFiles = ["EntryActivity.java", "WXEntryActivity.java", "WXPayEntryActivity.java"];”這行代碼,把它上面的代碼修改為:

    var targetDir = path.join(projectRoot, "platforms", "android", "app","src","main","java", packageName.replace(/./g, path.sep), "wxapi");    

修復方法2:不用修改此文件,直接拷貝用到的微信支付類到正確的包下。這根據你的工程名稱決定了,假設現在工程的包結構為:“com.sunylat.test”,那么就應該把安裝到上面錯誤目錄中的"wxapi"目錄,直接拷貝到“你的工程目錄\platforms\android\app\src\main\java\com\sunylat”。

2,JAVA類方法使用錯誤。Wechat.java中,有兩處低級的JAVA編程錯誤,當編譯的時候,會發現在2.3.0版本的這個類中,有兩個編譯錯誤。

錯誤1:方法使用不當,使用的方法沒有輸入參數,而錯誤處加入了輸入參數。這個錯誤,因為不了解程序的詳細細節,暫時無法給出修復建議。

錯誤2:在靜態類中,使用非靜態類的字段。這個錯誤,把"static"修飾符去掉就可以了。

 對於一款這樣的插件,無論從那個角度,我都不建議你繼續使用了!!!

二,推薦使用的微信支付插件:

https://github.com/adam198824/cordova-plugin-wechat

安裝命令:

cordova-plugin-adam-wechat --variable wechatappid=你的APPID  

這個插件,已經修復上面插件的所有錯誤!!我正在使用這個插件,而且測試完畢,在安卓和IOS下都工作正常,所以我推薦這個微信支付插件!此插件作者不僅維護這個插件,還維護着支付寶插件,感謝adam198824!!!

三,決定使用“adam-wechat”插件后,如何能夠順利測試我們的APP?

“adam-wechat”插件就是上面我推薦的插件,是“wechat”插件的一個分支,修復了最后一個版本以及先前版本“wechat”插件的的已知bug,上面我提到的3個bug!!僅僅知道這個插件確實可以使用,可能還不行,因為我們開發程序,不可能直接就寫代碼,隨后測試都不做,就發布了,那么怎么能夠完成這個程序的測試過程?你真的得耐心看下去!

(一)測試APP的准備工作:

 1,微信支付接口准備。

A,必須通過騰訊公司審核,拿到微信支付appid。

B,生成微信支付接口提交數據的工作已經完成,給微信支付接口提交數據前,必須生成對應的支付數據,隨后向微信支付接口提交這些數據,才能支付。

C,下載騰訊公司提供的簽名生成工具,下載后,安裝到測試手機中,等要測試手機APP時候,生成添加到騰訊微信支付接口驗證簽名的對應處。

工具下載:https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

2,安裝“adam-wechat”插件。執行安裝命令:

cordova plugin add cordova-plugin-adam-wechat --variable wechatappid=你的微信appid

(二)編寫cordova程序中的代碼:

1,最好每次都能夠獲取動態生成的支付數據。這一點非常重要,我幾乎調試了一個晚上,驗證了這一點!微信支付接口,對於提交的數據是有時效性的,並不是所有已經生成的數據,不管間隔多長時間都能夠繼續提交!所以,如果能夠每次都獲取到要支付的數據,那么你最好是先做這個工作,否則,間隔時間長了,數據失效,那么提交肯定失敗,而且,所報錯誤並不是軟件本身引起的,極容易讓大家誤認為軟件本身有bug!!我在測試時候,有一個錯誤就是因為數據失效造成的,而我誤以為是插件本身有bug,隨后進入JAVA類里面,設置斷點、修改源代碼,各種方式調試、驗證,最終發現原來是我測試數據失效造成的!!目前,這個插件的代碼,我暫時沒有發現什么bug,應該可以放心使用,如果出現問題,那么應該是其它方面的,並不是插件bug造成的!

2,客戶端數據的格式:客戶端提交的數據是JSON數據,在客戶端生成一個標准JSON對象,隨后添加進所有需要提交參數就可以了,下面我給出了正確的代碼,如果你按照我寫代碼編寫你的程序,那么我覺得肯定可以!

下面代碼是我在JQuery mobile中的代碼:

                            //從生成微信支付數據服務器返回的JSON字符串
var responseText = "你從服務器返回的JSON數據";
                           
//解析服務器返回JSON字符串為JS對象
var responseObj = JSON.parse(responseText);

//解析微信支付需要的各個參數的對象
var objObject = responseObj.包含提交數據的JSON對象;
                           
/*
注意問題:如果想真正使用,那么這些參數肯定要動態生成,在調試時候,最好就是動態獲取,否則肯定讓你郁悶死, 因為這些提交的參數,是有時效性的,不是一直有效,如果超過時效,提交會失敗,你會誤以為插件有bug,其實不是。 */ //聲明提交參數JSON對象 var params = {}; //加入要提交的各個參數 //注意:這個參數必須有,否則會導致參數格式不正確的錯誤,支付插件對比本地存儲的appid后,決定是否保存到字段。 params["appid"] = objObject.appid; params["partnerid"] = objObject.partnerid; params["prepayid"] = objObject.prepayid; params["noncestr"] = objObject.noncestr; params["timestamp"] = objObject.timestamp; params["sign"] = objObject.sign; //調用微信支付插件,向微信支付發起支付操作
Wechat.sendPaymentRequest(params,
function () { alert("Success"); }, function (reason) { alert("Failed: " + reason); });

 上述代碼是對“adam-wechat”插件,完整可正確運行的微信支付代碼,本人測試完畢、正在使用的代碼!

 (三)用Android Studio給安卓程序簽名。無論你的程序是debug還是release版本,均可以測試微信支付接口,但是都需要進行簽名,否則無法調用微信支付接口。

安卓程序簽名,可以使用Android studio,也可以采用命令行工具簽名,我采用的是Android studio簽名。對於微信支付接口調用,無論你采用keystore還是jks文件方式簽名,都可以!!網上有些介紹說必須keystore方式簽名,並非那樣,最終你測試一下就知道了!

官方說明:https://developer.android.com/studio/publish/app-signing

A,生成簽名需要文件。

1,點擊Android studio的菜單,“Build”->"Genertate Signed Bundle/APK",打開生成簽名文件對話框。

2,選中“APK”單選按鈕,隨后點擊“Next”按鈕。

3,點擊”Create new..."按鈕,填寫必要信息后,點擊”OK“按鈕。

4,選中"Remember passwords"復選框,隨后點擊”Next“按鈕。

5,點擊”Build Type“下拉列表,選擇對那種編譯類型文件簽名;選中”V2 (Full APK Signature)“,對整個APK簽名,隨后點擊”Finish“按鈕,這樣生成簽名文件就完成了。

B,使用Android studio給安卓APP簽名過程。AS給APP簽名,有兩種方式,一種是編譯程序時候,自動加上簽名,就是我下面介紹的簽名方式,還有一種是單獨簽名,上面的“生成簽名需要文件”,有一步,可以完成APP簽名。

1,打開Cordova安卓工程:點擊Android studio的菜單,“File”->"Open",隨后選擇你建立的Cordova工程,選擇里面的“android”。

2,打開簽名配置對話框。在“android”工程名上鼠標右鍵,“Open Moudle settings”。

3,選中對話框左側的“app”模塊名稱,隨后點擊“Signing”tab頁,點擊"+",隨后輸入對應信息。

name:隨意起,一會發布程序簽名用。

key Alias:生成簽名文件時候對應值。

key password:生成簽名文件時候對應值。

store file:生成的簽名文件,Android studio生成為jks擴展名文件。

store password:生成簽名文件時候對應值。

當上面所有值填寫正確之后,點擊“Build types”tab頁。

4,配置debug和release版本APP的簽名。給哪個版本APP配置簽名,就先選擇左側的哪個項目,隨后右面選擇主要是兩項:

A,“Signing config”,點擊這個下拉列表,選擇剛才填寫的簽名配置信息名稱。

B,“Debugable”,這個決定程序在這個版本是否可以調試,如果是測試階段,建議選中。

隨后點擊“OK”按鈕,完成debug和release版本的簽名配置,以后在生成不同版本軟件時候,都會給生成軟件自動簽名。

C,選擇生成APP版本。

1,點擊Android Studio左側的“Build variants”。

2,點擊“app”后面對應的下拉列表,選擇debug或release,編譯后就會生成對應版本的APP。

(四)向騰訊公司網站提供測試APP的簽名串。如果你沒有使用騰訊公司提供的獲取測試APP簽名串工具,獲取測試程序的簽名串,並且上傳到騰訊公司網站中,那么也應該測試不了微信支付!

 A,從安裝了測試APP的手機里獲取簽名串。如果沒有安裝騰訊獲取簽名串工具,那么應該把它安裝到已經安裝了測試APP手機中,獲取簽名串,就靠這個工具。

工具下載:https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

打開簽名串獲取工具,隨后輸入你測試程序的倒域名,隨后點擊”Get Sinature“按鈕,你會看到一行字符串,那就是要加入到騰訊網站中的簽字串,把它記錄下來。

B,登錄騰訊網站,修改APP信息。

1,進入騰訊管理網站。

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=e2846182cf5b8338d7fd0ceafc8afdbf98464f9a&lang=zh_CN

打開上面網站,隨后點擊上面右側的”登錄“按鈕,在彈出對話框中輸入賬號和密碼后,點擊此對話框中的”登錄“按鈕后,進入這個網站。

2,點擊"修改",進入修改頁面。

 

3,選中”Android應用“復選框,隨后在”應用簽名“文本框中輸入從測試手機里獲取到的簽名串;”應用包名“,對應倒域名,全部輸入正確后,點擊”保存“按鈕,退出網站就可以了。

到此,對騰訊網站測試APP簽名信息同步完成了,這樣才真正可以測試加入微信支付功能的安卓APP!

(五)常見錯誤:

1,app沒有簽名。如果沒有簽名,肯定測試不了微信支付,上面已經介紹了如何用AS簽名,無論debug還是realease版本,簽名后,都可以測試微信支付接口。

2,提交數據格式不正確。參照我上面代碼,就會避免這個問題。如果數據格式不正確,提交支付請求后,會返回數據格式不正確的錯誤。

3,提交數據參數不符。運行程序后,直接會反饋這類錯誤提示。

4,測試數據失效。如果測試數據是很久之前生成的,那么很有可能發生此類錯誤,而且此類錯誤非常讓大家誤以為是自己編寫程序或插件的bug,如果測試時候,提交的測試數據都是動態生成的,可以避免此類問題!

5,沒有在微信支付接口管理網站登記測試APP。測試的APP,必須使用騰訊公司提供的獲取APP簽名工具,得到簽名字符串之后,進入騰訊公司微信支付管理網站,把安卓對應部分的簽名串修改成你在手機里獲取到的簽名串,否則測試也不能通過。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM