微信APP支付第一次成功,其他无法调起
微信支付 第一次成功,其他無法調(diào)起,返回-1(Android eclipse 微信支付之大坑 簽名工具問題)_ws1836300的博客-CSDN博客_微信支付提示包名不對(duì)參考鏈接:http://blog.csdn.net/xinluqishi123/article/details/52234002微信支付第一次成功,其它支付不成功,可能的原因有:1:訂單號(hào)重復(fù),這個(gè)重新生成一個(gè)訂單號(hào)就可以了。2:項(xiàng)目包名不對(duì)(包名必須與微信開發(fā)者平臺(tái)上的一致,詳情見參考鏈接)。3:APP的應(yīng)用簽名不對(duì),這個(gè)著重講一下哈(在這里我被坑了一個(gè)大跟頭,請(qǐng)大家盡量避免https://blog.csdn.net/ws1836300/article/details/53893102
問題:第一次調(diào)用非常OK,看到了微信支付界面,有自己生成的訂單號(hào)還有金額,但是放棄支付后再進(jìn)入,就連微信客戶端都調(diào)用不起來了,換個(gè)訂單也是這樣,換個(gè)手機(jī)也是第一單可以調(diào)用微信客戶端,展示訂單號(hào),金額,但是第二單說什么也不行了,定格在自己APP的支付界面,不報(bào)錯(cuò),任何反應(yīng)也沒有。
解決方案見
申請(qǐng)以后你看到的就是圖片上的應(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í)候會(huì)將這個(gè)Key加進(jìn)去作為應(yīng)用的key防止被惡意覆蓋等等,我們?cè)谏暾?qǐng)注冊(cè)微信應(yīng)用的時(shí)候必然要提供正式生成的這個(gè)應(yīng)用的Key給微信官網(wǎng)。?
因此這件事就被忽略了,以至于在開發(fā)的過程中,我們?cè)谧约旱谋镜剡\(yùn)行打包,訪問微信服務(wù)器調(diào)起支付的時(shí)候,微信第一次拿到了我們的應(yīng)用發(fā)來的請(qǐng)求,仿佛建立了連接開始了心跳,這時(shí)微信會(huì)異步地根據(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)格控制了在他那里注冊(cè)的應(yīng)用,注冊(cè)一個(gè)Key用一個(gè),再想用,那么重新走流程吧。
————————————————
?
微信支付第一次成功,其它支付不成功,可能的原因有:
1:訂單號(hào)重復(fù),這個(gè)重新生成一個(gè)訂單號(hào)就可以了。
2:項(xiàng)目包名不對(duì)(包名必須與微信開發(fā)者平臺(tái)上的一致,詳情見參考鏈接)。
3:APP的應(yīng)用簽名不對(duì),這個(gè)著重講一下哈(在這里我被坑了一個(gè)大跟頭,請(qǐng)大家盡量避免)。
(注:APK簽名步驟分為兩步,首先通過keytool生成用來簽名的 xxx.keystore,再用jarsigner簽名apk文件)
微信支付僅能成功調(diào)用一次的問題_聽從內(nèi)心的召喚-CSDN博客本人使用Android開發(fā)有一段時(shí)間了,但是本身沒有系統(tǒng)學(xué),而且多年專注服務(wù)端開發(fā),總覺得因?yàn)轫?xiàng)目需要接觸Android移動(dòng)端開發(fā)只是暫時(shí)的,所以沒有太上心,結(jié)果碰到一個(gè)大難題折騰了一天,最后被有經(jīng)驗(yàn)的小伙伴提示了一下才迎刃而解,感覺無地自容的同時(shí),又非常竊喜,畢竟跨過一個(gè)一個(gè)的坎,就成長(zhǎng)了,在這里丟人等換個(gè)地方就成牛了也未可知,哈哈。閑言就絮叨到這里,趕緊分享:微信支付調(diào)用接口整體的流程有必要簡(jiǎn)述https://blog.csdn.net/xinluqishi123/article/details/52234002
Android簽名用keytool和jarsigner制作apk文件https://www.cnblogs.com/linn/p/3784363.html
Android簽名用keytool和jarsigner制作apk文件
生成證書 keytool -genkey -alias aeo_android.keystore -keyalg RSA -validity 20000 -keystore aeo_android.keystore簽名 jarsigner.exe -verbose -keystore aeo_android.keystore -signedjar soccer-release.apk soccer-release-unsigned.apk aeo_android.keystore驗(yàn)證簽名 jarsigner.exe -verify soccer-release.apk 備注?同樣的程序發(fā)布過程,在同事的機(jī)器上(JDK 1.6)簽名后可以正常安裝,但是在我機(jī)器上(JDK 1.7)簽名后安裝說簽名錯(cuò)誤無法安裝。找到了解決的辦法,需要在簽名程序 jarsigner 增加如下參數(shù)-digestalg SHA1 -sigalg MD5withRSA?https://github.com/mobileresearch/weibo_android_sdk/blob/master/app_signatures.apk另外微博和微信的app校驗(yàn)簽名工具,實(shí)際對(duì)比的是程序簽名和包名,包名在AndroidManifest.xml:package=""??
jarsigner -verbose -keystore feelyou.keystore -storepass feelyou.info -signedjar signed.apk -digestalg SHA1 -sigalg MD5withRSA unsigned.apk feelyou解釋:
1、-keystore feelyou.keystore:指定需要使用的簽名文件,直接寫文件名說明在當(dāng)前目錄下,否則請(qǐng)自行指定具體路徑
2、-storepass feelyou.info:自動(dòng)輸入密碼,keystore的密碼和alias的密碼都是我用的都是feelyou.info
3、-signedjar signed.apk:指定簽名后的文件存儲(chǔ)路徑,這里是說以signed.apk的文件名存在當(dāng)前路徑下
4、-digestalg SHA1 -sigalg MD5withRSA:這就是必須加上的參數(shù),如果你是jdk 1.6也不受影響
5、unsigned.apk:未簽名的apk路徑,這里是當(dāng)前路徑下的unsigned.apk文件
6、feelyou:最后這個(gè)是alias
總結(jié)
以上是生活随笔為你收集整理的微信APP支付第一次成功,其他无法调起的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设置学生上计算机课玩游戏,如何在电脑
- 下一篇: GAMS-运行过程中关于0的问题