1. 程式人生 > >微信支付返回-1的問題集錦與各種爬坑過程

微信支付返回-1的問題集錦與各種爬坑過程

之前公司做微信支付的時候,負責這一模組的同事,天天抱怨微信支付的各種坑還有文件的不清晰,最近幫朋友做了一個app,裡面就有這一功能,看了一上午文件,瞬間發現我的語文也沒學好,各種看不懂就算了,提供的程式碼居然還有錯誤,我可以罵人嗎???!!!還有更噁心的就是第一次除錯的時候可以喚醒微信,以後就一直返回-1,相信會有很多朋友和我遇到同樣的問題。

先從申請微信支付說起,需要提供的包名和簽名,包名這塊肯定沒問題了,只要從manifest中拷貝出來就可以了,簽名這塊文章就多了,之前同事搞了兩天,主要原因就是因為簽名這塊出了問題,當時申請的時候讓我提供簽名,沒跟我說需要什麼格式,我提供的簽名是如下這種方式:

簽名

由於沒讀過微信支付提供的那個高深文件,不知道微信提供了獲取簽名的一個app,如下:

MD5

這裡寫圖片描述

這裡寫圖片描述

好了,現在簽名的問題解決了,但是如果換籤名的時候,這裡還需要重新填寫。

PS:回撥返回-1錯誤,經常是簽名錯了或者換籤名的時候忘記後臺修改。

接下來就是對接了,對接所提供的程式碼,我可以罵人嗎???!!!好吧,咱是文明國家的文明人,只做文明事,TMD,寫的什麼吊玩意,提供什麼吊程式碼,官網提供可參考的三個SDK,解壓後的資料夾如下:

SDK

這個看不出什麼要吐槽的,丫的,開啟資料夾後我瞬間懵逼了,微信你幾個意思啊,提供一年前的就算了,還TM提供四年前的jar,微信沒錢招人維護了嗎?微信支付開始收費了,多收點,多招個人去維護文件吧,滿足下廣大開發者的小小需求,有圖有真相,上圖:

12

13

15

毫無疑問,我肯定選最新的jar了,接下來再看對接文件,IOS中的一個欄位是“request.package = @”Sign=WXPay”;”,Android中是”request.packageValue = “Sign=WXPay”;“,在Java裡面,package 是關鍵字沒法做欄位名稱,真的就不能兩個名稱都寫成packageValue 嗎?多了五個字母,微信碼字員收費很高嗎?多了五個字母,我出五毛好不好?這五個字母的錢,讓我來付。。。

欄位沒統一我忍了,文件別寫錯可以嗎?

error

丫的,上面是request 下面就是req 了,五毛我都不給你。。。

再下來就是一件很搞笑的事情,回撥的時候,路徑必須是“包名+wxapi.WXPayEntryActivity”,這是在打廣告嗎?我們用的就是微信支付,不打廣告也知道的,哎,專業點好不好!!!

PS:此處如果名稱不對應,將收不到回撥。

返回-1的情況:

  • 最常見的就是上述所說的簽名的錯誤,此時最保險的方式就是從微信官網上下載獲取簽名的apk,通過那個apk去獲取應用的簽名。

  • appid錯誤,首先先檢查app端和伺服器端的appid是否與微信官方提供的一致。這次遇到的問題就是這個問題,搞了我兩天,最後debug的時候,發現後臺提供的appid和微信官網申請到的appid不一樣,這是很奇怪的,相信微信不會給後臺提供一個,app端提供另一個,帶著這個疑問去debug之前的專案,從之前專案列印看出,兩者一致的。

解決問題的過程中,發現網上也有和我一樣的情況,第一次呼叫的時候可以喚醒微信,以後就沒反應了,有的解決方案是清空快取,這個方法就是胡扯,清理一次後,還是隻能呼叫一次,總不能讓客戶每次支付完就去清空快取吧,就算可以,這方式也是治標不治本,這些問題應該從根本上去解決。