Android學習之 移動應用微信支付整合小結

小呂-ICE發表於2014-07-22

       微信支付現在主要整合在:1、移動應用開發  2、網站應用開發  3、公眾賬號開發

       本篇主要針對移動應用App整合微信支付,實際專案坑點分享!

一、既予之、與共之:平臺資源

1、微信開放平臺:https://open.weixin.qq.com/

2、微信公眾平臺:https://mp.weixin.qq.com/

3、微信支付指引和資源中心:微信支付接入指南和資源下載中心<強力推薦閱讀>

https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&lang=zh_CN

4、微信公眾平臺支付介面除錯工具沙箱地址:可通過沙箱測試驗證簽名的有效性

http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=pay/index

5、公眾平臺開發者問答系統:在開發過程中有遇到什麼問題,都可以上該平臺上找找是否有你需要的答案和解決方案。

http://mp.weixin.qq.com/qa/index.php?qa=questions

6、推薦兩個蠻給力的博主:

      柳峰:http://blog.csdn.net/lyq8479  

<我接觸微信公眾平臺,第一個公眾號的開發都是看他的部落格進行學習的,小呂強力推薦>   開發語言:JAVA

      方倍工作室:http://www.cnblogs.com/txw1958/    開發語言:PHP

7、小呂在開發微信支付過程中收集的資源一簍筐<SDK /支付DEMO / IOS、Android介面文件 V1.7最新版 /SDK API文件 / Android應用包名簽名APK工具>:免費下載址:http://download.csdn.net/detail/l416112167/7665807


二、本篇將不用程式碼等來介紹微信支付的整個流程過程,因為

        1、小呂已提供了上面的平臺資源連結、基本上只要你靜下心稍微閱讀第一個連結和第七個下載連結中小呂提供的【微信支付】APP支付(Android)介面文件V1.7.doc

 <小呂閱讀過v1.2版、v1.5版、v1.7版 其中閱讀完1.7版後 解決了我在前面版本閱讀中所有的疑問> 就可以非常清晰的瞭解整個支付介面呼叫流程,畢竟為官方文件,小呂也不可能會寫的比官方文件還詳細。

        2、小呂覺得微信提供的demo程式程式碼也比較清晰。各位可自行下載檢視。

        3、下面是APP支付(Android)介面文件V1.7.doc文件中最具有代表性的幾張截圖展示:

               圖1、APP 支付的使用者互動:


           圖2、更直觀詳細的互動時序圖:


           圖3、文件書籤截圖:

                     


      整個微信支付開發過程給我的小結就是:文件雖詳細、坑點卻不少<特別是針對Android開發者>。


三、避開坑點,慷慨大道我走來:

       坑點1:執行官方的demo程式為什麼還是沒調出支付介面?

正確執行demo調出微信支付介面效果如下:

        

那為什麼有些同事執行demo程式提示能獲取到prepayid成功  但是卻始終沒有見到如上圖的支付UI,就提示微信支付結果:-1 呢?

PS:這裡備註說明一下:微信支付常見有3種支付結果code返回

resp.errCode==  0 :表示支付成功

resp.errCode== -1 :表示支付失敗

resp.errCode== -2 :表示取消支付

原因:執行時沒有使用、配置demo程式sdk demo工程目錄中的debug.keystore檔案

執行sdk  demo工程正確步驟:

1、解壓sdk demo工程壓縮包,並匯入到workspace,如下圖:

     

2、選擇Eclipse頂部選單Window->Preferences,在彈出的對話方塊中,選擇Android目錄下的Build,如下圖:

          

指定Custom debugkeystore選項的路徑為sdk demo工程目錄中的debug.keystore檔案,如下圖:

並應用該配置。

3、執行該sdk_sample工程。


         坑點2:專案中(非sdk demo程式)呼叫微信支付介面wxApi.sendReq(mPayRed)不起作用,還是調不出支付介面

問題產生原因分析:

1、首先需要確保商戶在微信開放平臺上的申請稽核流程是否已完成。必須要在所有流程稽核通過後才能進行開發調式。即使用者能拿到appid/appsecret/appkey/partnerkey。

2、Android應用需要在開放平臺繫結應用包名和應用簽名後才能正常使用。填寫不正確將無法正常調起支付。

     <IOS應用不需要這一過程>

    簽名工具下載地址:

https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

注意:比如我們的客戶商戶是用的自己的生產環境.keystore簽名檔案對apk進行的簽名,然後使用微信提供的包名簽名工具生成的應用簽名字串與應用包名繫結後,那麼Android開發者在除錯應用時也須要使用客戶商戶的.keystone檔案對apk進行簽名後才能除錯程式,不然無法調起支付。<這點非常重要,小呂就被坑在這裡>

可以使用Gen_Signature_Android.apk 校驗應用簽名字串是否和商戶填寫的一致 如下圖:


3、校驗訂單詳情package的擴充套件字串定義、app_signature的生成規則、新增prepayid再次簽名這三個過程是否都正確,可通過沙箱測試驗證簽名的有效性, 沙箱地址:

http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=pay/index

4、簽名過程不可更改引數名稱<一個非常低階的錯誤,但也是要注意的一個點>:

這裡小呂就有遇到這樣一個烏龍,算是自己挖了坑給自己跳了

在新增prepayid再次簽名的過程中:如下圖


因為簽名後返回給APP的json字串中有一個引數名為package,通常在手機端我們會將json字串解析成java bean物件,但是package在java中是一個關鍵字,所以小呂想啊、在返回的json字串中把package換個名字叫做packageValue吧,這樣就方便我直接把json解析成java物件了。就這樣問題就來啦,因為在簽名生成sign的過程中原本叫做package的引數變成了packageValue,因此簽名生成的sign值自然就是錯誤的,最終導致支付調不起。


         坑點3:支付成功後無法跳轉到相應的通知Activity介面。



             坑點4:小呂日後在開發過程中遇到再後續補充... ...



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PS 小呂正在不斷的學習中完善自身、希望能與大家一起學習、交流... ...

         下面是我的微信公眾號:Ice資訊助手    歡迎大家掃一掃  關注小呂、一起學習、交流。

          


相關文章