概要
最近在搞一個(gè)購物類的APP寺庄,是vue+Cordova的一個(gè)跨平臺(tái)項(xiàng)目祠够,期間需要使用到微信支付和支付寶支付压汪,現(xiàn)在記錄一下期間遇到的坑,也希望能夠幫助更多的人少踩坑古瓤。止剖。腺阳。把更多的時(shí)間留給開發(fā)。
解決方案
? ? ? ? 2018年11月15日穿香,大佬幫我找到了一個(gè)修復(fù)了lixu版微信支付插件的部分bug亭引,cordova-plugin-adam-wechat,但是美中不足的是皮获,它似乎還是繼承了原插件2.3的bug焙蚓,缺失appid,傳遞參數(shù)的時(shí)候把a(bǔ)ppid也合著之前的參數(shù)一起傳過去就好了洒宝,這里是這個(gè)大佬的使用心得主届,是JQuery mobile版本的解決方案;
如果覺得這樣不夠安全或者其他什么的建議使用原插件2.0.0或者2.1.0版本待德,只需要根據(jù)下文中內(nèi)容更改既可。
? ? ? ? 好了廢話不多說枫夺,首先你需要看一下這個(gè)大佬的文章将宪,在這篇文章里你能夠了解到此插件各個(gè)版本問題出現(xiàn)在哪里,如何解決橡庞,當(dāng)然较坛,本人的評(píng)論可以無視,因?yàn)榘亲睢3笄凇!0扇ぁ_@個(gè)插件的調(diào)用方式可真的與眾不同胺ň骸!當(dāng)你按照這篇文章使用并修復(fù)了2.0.0版本的插件時(shí)强挫,你應(yīng)該就可以正常調(diào)用岔霸,也許會(huì)遇到“普通錯(cuò)誤”。什么俯渤?你沒法調(diào)用呆细?如果你的前端使用的是vue或者是其他非ionic框架的東西,那么你走運(yùn)了八匠,因?yàn)檫@個(gè)坑我踩了絮爷,首先!檢查在入口html中有沒有引入cordova.js梨树!如果沒有引入的話坑夯,你無論怎么進(jìn)行下面的操作都是白搭!在引入之后劝萤,調(diào)用方法就是作者演示的渊涝,Wechat.方法,不需要加任何前綴,在調(diào)用其他Cordova插件的時(shí)候跨释,都是是需要cordova.plugin.插件名.方法,例如:Cordova二維碼插件的調(diào)用就是cordova.plugins.barcodeScanner.scan()胸私。
這里說個(gè)題外話,在使用cordova-alipay-chenyu這個(gè)插件作為支付寶支付的時(shí)候鳖谈,因?yàn)樽髡咧徽f明了在ionic中的使用方式岁疼,但是在vue或者其他非ionic框架中這種調(diào)用方法時(shí)行不通的,需要使用我前面說的cordova.plugin.插件名.方法缆娃,此處就是cordova.plugins.MyAlipay.coolMethod(params);此處params就是原作者中聲明的需要的參數(shù)捷绒,不過不再需要then()了,這點(diǎn)需要注意贯要;不過可能你也發(fā)現(xiàn)了為何這里不是插件名暖侨。。我也不清楚崇渗,但是作者在這里對(duì)js暴漏的方法就是這個(gè)字逗,這一點(diǎn),你可以輸出cordova.plugins來查看你當(dāng)前加載的插件宅广,唯獨(dú)葫掉!wechat插件是不在這里的!切記跟狱!
然后去添加平臺(tái)吧~添加完成之后需要注意的是請查看你的微信文件位置是否正確俭厚!正確位置如圖:
這一點(diǎn)非常重要,因?yàn)樵寮募胖檬清e(cuò)誤的驶臊,這樣的就會(huì)造成你的app直接FC(即:force close挪挤!強(qiáng)制關(guān)閉!)在Android studio中調(diào)試報(bào)錯(cuò)中應(yīng)該如下圖:
如果你根據(jù)文章頭中讓你看的那個(gè)文章关翎,已經(jīng)修改了android-install.js中的內(nèi)容电禀,那你就需要?jiǎng)h除platforms文件夾,重新添加平臺(tái)笤休,就可以正確的生成了尖飞。
? 到了這里,你已經(jīng)完成了對(duì)Cordova-plugin-wechat這個(gè)插件本身的配置店雅,現(xiàn)在使用Wechat.isInstalled()方法應(yīng)該是可以檢測機(jī)器上是否安裝了微信政基,如果可以檢測,則插件本身運(yùn)行沒有問題了闹啦,這個(gè)方法使用方法在作者文檔里有說明沮明。
現(xiàn)在你應(yīng)該開始遇到”普通錯(cuò)誤“,這個(gè)錯(cuò)誤造成的原因有兩種:
? ? 一窍奋,是因?yàn)橛唵翁?hào)不唯一荐健,第二次和第一次的訂單號(hào)是一樣的酱畅,會(huì)造成這個(gè)問題,(我沒遇到江场,因?yàn)槲沂请S機(jī)生成16位訂單號(hào)纺酸,欸嘿~)在搜索的時(shí)候發(fā)現(xiàn)了,在這里記錄一下址否,源于:這里餐蔬。
? ? 二,你的應(yīng)用簽名不對(duì)佑附,此處的簽名不是APK的簽名樊诺!在做微信支付分享開發(fā)時(shí),你的軟件必須以release版本音同,可以使用keystore和jks簽名词爬,或者是,已經(jīng)簽名了的debug版本权均,如果不知道這個(gè)可以不用想是什么缸夹,那你就以release版本就好了。并非必須使用keystore螺句,已親測可行,APK每次打包的簽名必須是同一個(gè)橡类!不然就會(huì)循環(huán)“普通錯(cuò)誤”蛇尚!切記!顾画!安裝到手機(jī)之后取劫,去微信開放平臺(tái)下載簽!名研侣!生谱邪!成!工庶诡!具5胍!D┦摹3毒恪!該工具位置所在如圖:
下載之后在手機(jī)上安裝喇澡,運(yùn)行起來應(yīng)該時(shí)這樣的迅栅,然后操作如圖:
那一串綠色的才是你需要填寫到官網(wǎng)的這個(gè)頁面里:
至此,你的app應(yīng)該是可以拉起微信并且進(jìn)行支付了晴玖,分享操作也可以了读存。
注意为流!成功的是你后端給你的數(shù)據(jù)是完全沒問題的,參照了微信的開發(fā)文檔做的让簿,現(xiàn)在給出當(dāng)后端打了瞌睡之后敬察,產(chǎn)生的“普通錯(cuò)誤”的原因!
ps:我的后端是nodejs拜英,可能在其他后端語言中的使用和代碼書寫方法會(huì)有所不同静汤。
在我的案例中,后端出錯(cuò)的地方是noncestr字段算法出現(xiàn)錯(cuò)誤居凶,在微信的開發(fā)文檔中說明了拉起APP需要的參數(shù)
錯(cuò)誤的隨機(jī)字符串算法
這樣的雖然也一樣能夠生成不長于32位的字符串虫给,但~~傳給我的時(shí)候就是報(bào)“普通錯(cuò)誤”,無奈更改為
這樣的侠碧,len的值為32抹估,就可以生成可正常拉起的字符串了。
后端簽名計(jì)算問題
2.0.0的插件是不需要appid和package這兩個(gè)字段弄兜,但是药蜻!但是!后端在計(jì)算簽名的時(shí)候替饿,我的案例中语泽,后端是先將XML解析之后再進(jìn)行簽名計(jì)算,如圖:
當(dāng)我說不需要這兩個(gè)字段的時(shí)候视卢,后端小哥哥就將這兩個(gè)字段直接剔除踱卵,這樣就導(dǎo)致了,簽名計(jì)算出現(xiàn)錯(cuò)誤据过,再給到前端拉起app的時(shí)候惋砂,報(bào)錯(cuò):“普通錯(cuò)誤”。解決辦法也很好解決绳锅,加回去或者使用臨時(shí)變量將發(fā)送給前端的數(shù)據(jù)區(qū)分開就好了西饵。以上這幾個(gè)參數(shù),在計(jì)算簽名中缺一不可鳞芙,少了一個(gè)就當(dāng)場暴斃~~~~~
現(xiàn)在我們來看看ios端眷柔,是遇到了什么麻煩,首先,在生成ios平臺(tái)之后,在編譯的時(shí)候報(bào)錯(cuò)拉讯,
錯(cuò)誤信息:ld: library not found for -lstdc++.6
那么如何解決?救星來了宙拉!看這里!這個(gè)博主講述的應(yīng)該是非常清晰明了丙笋,同時(shí)我的編譯環(huán)境和他的也是一樣的谢澈,雖然他的是熱更新插件煌贴,但是報(bào)錯(cuò)信息都是一樣的!那么何嘗不試一試锥忿?我自身是成功了的牛郑。
ok現(xiàn)在,編譯時(shí)沒問題了敬鬓,Cordova-plugin-wechat在ios中不需要額外配置什么淹朋,就可以正常使用了,唉钉答。础芍。。数尿。比安卓省心多了仑性,現(xiàn)在試一試實(shí)體機(jī)測試?一口氣跑通右蹦?開玩笑~~接好你的報(bào)錯(cuò):
什么诊杆?你說你無法真機(jī)調(diào)試?那么請看這里何陆,好了晨汹,現(xiàn)在我們來說說怎么解決這個(gè)問題,首先贷盲,這個(gè)問題是因?yàn)樾碌膞code編譯環(huán)境是新的淘这,但是Cordova并沒有跟進(jìn),畢竟 - -在這個(gè)穩(wěn)定之前晃洒,肯定先不折騰是最好的。請看這里:詳細(xì)的解決方案朦乏。
至此球及,就是所有我所遇到的所有問題了,解決這些問題呻疹,一共花費(fèi)了我接近半周的時(shí)間吃引,我還是太菜了(苦笑),在此刽锤,感謝幫助我的大大們(鞠躬ing)