Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android接入微信支付完全解析,太全了~

Android接入微信支付完全解析,太全了~

編輯:關於Android編程

今天來聊聊,android中接入微信支付的需求,肯定有人會說,這多簡單呀,還在這裡扯什麼,趕快去洗洗睡吧~~

那我就不服了,要是說這簡單的,你知道微信支付官網多少嗎,要是你一百度,下面全是廣告,哈哈,你一不小心就掉坑去了,在簡單的事,只要你想把他做好,其實也是很復雜的~

簡介

首先我們來到微信支付官網瞅瞅:

Paste_Image.png

可以看到這就是微信支付首頁,下面有幾種支付方式,而我們今天的主角就是APP支付,我們可以直接點進去,或者從左上角接入指引-APP支付,進去的文檔式樣的,這是這個文檔的位置如下圖所示:

Paste_Image.pngvc3qs8nWp7i2vdPI69Do0qrExNCpsr3W6KOsxMTQqdfKwc+jrNXi0fnE47/J0tTIw8/gudi1xMjL1LHKws/IyKXXvLG41eLQqdfKwc+jrLb4srvKx8zuzerSu7K918rBz6Os1NrIpdXSz8LSu7K918rBz6OsvMfXocqxvOS+zcrHvfDHrqOswe3N4sTjwey1vMu1wLS4+M7SvbK9ss6i0MXWp7i2xMfXvLG4xMTQqdfKwc+jrMTjw7u/tLn91eLOxLW1o6zEx87Svs3Wu8Tcuse6x8HLTyihyV+hySlPfqGjwe3N4sTE0KnLtdanuLa88rWltcSjrNPQvLi49taqtcDV4tXFzbyjrNPW09DLrcjP1ea/tLn9fn48L3A+Cgo8cD6/ydLUv7S1vcrH0qq80zMwML/ptcSjrLu50OjSqsbz0rW1xNK70KnXysHPoaM8L3A+Cgo8cD7B7c3izqLQxdanuLbT0MG9uPbGvcyot9ax8MrHPGEgaHJlZj0="https://open.weixin.qq.com/">開發者平台和商戶平台

開發者平台:主要是針對開發者,比如:創建應用,獲取appid
商戶平台:主要是商戶上面的一些管理,比如:可以查看流水,訂單呀

創建應用

這裡我只是演示怎麼創建應用,最後不會用這個賬號的,因為我這是個人賬號,沒法申請支付,只是給不會創建的朋友做一個演示,需要哪些資料而已,會的可略過~

首先我們來到開發者平台,沒有賬號的先注冊,這個我想不用演示了,直接演示怎麼創建應用,首先你的登錄完賬號,點擊管理中心-移動應用:

Paste_Image.png

點擊左上角的創建移動應用,到如下界面,因為這裡是測試,所有資料都是隨便填啦

Paste_Image.png

點擊下一步就來到了

Paste_Image.png

這一步讓你填寫,需要的平台,以及平台信息,我這裡只懸著android,填入包名和簽名,另外這裡他沒有想微博那樣可以填入多個簽名,那麼這裡我建議你一開始填入debug的簽名,等調試通過了在填寫正式簽名,簽名的獲取方法和接入第三方登錄是一樣的。最後提交審核,等審核完以後,我們點擊到應用詳情,應該是這樣的效果

Paste_Image.png

個人賬號創建的應用審核通過後只有,分享功能,如果還需要支付,可以點擊申請,然後認證賬號並上傳一些資料,這又是一個漫長的過程,這裡我們就不了那麼多了,現在直接說怎麼在代碼實現吧

運行官方demo

記住這裡的支付demo是在商戶平台的幫助裡面下載,地址在這裡,而不是開發者平台下載的那個demo(以前是可以,現在這裡下載的demo,裡面剔除了支付),如下圖,是這個頁面:

Paste_Image.png

第一個是基礎庫,點擊後會跳到開發者平台,第二個參數支付demo,當然裡面也包含了分享等一些功能,可以說如果你既要做支付又要做分享,那麼你只需要這個一個demo就行了,當然還得需要我這篇文章呀

下載完導入eclipse,替換debug.keystore然後運行,就可以看到如下界面,終於看到支付了,激動不已是不是

Paste_Image.png

然後我們就可以點擊“跳轉到支付界面”,看看什麼效果呀,是騾子是馬總的溜溜吧,看到這一面,感覺神清氣爽,因為demo跑通了,呵呵~

Paste_Image.png

demo也看了,錢也付了,那我們現在就該開始接入支付了

正式接入支付

首先還是得上一張流程圖呀,不然你知道怎麼個邏輯?

這是這個文檔的官方地址

\,這是官方的解釋

商戶系統和微信支付系統主要交互說明:

步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。

步驟2:商戶後台收到用戶支付單,調用微信支付統一下單接口。參見【統一下單API】。

步驟3:統一下單接口返回正常的prepay_id,再按簽名規范重新生成簽名後,將數據傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay

步驟4:商戶APP調起微信支付。api參見本章節【app端開發步驟說明】

步驟5:商戶後台接收支付通知。api參見【支付結果通知API】

步驟6:商戶後台查詢支付結果。,api參見【查詢訂單API】

首要微信支付暴露給我的是兩步,一步是生成預支付訂單,然後那個預支付訂單id再去調用微信支付,所以說這裡就有兩種實現方式了,一種是客戶端處理這所有步驟,另外一種肯定是服務端創建與支付訂單和簽名,然後返回給我們,我們才拿著這些參數去調用微信支付。實際應用中,推薦使用服務那種,但是我這裡講的是本地怎麼實現支付,如果你們是在服務端支付,那麼你的告訴他你需要什麼參數,他怎麼創建預支付訂單等服務端下單參考這裡

配置

這是官方的app支付開發步驟,另外這裡由於我沒有可用的支付所以,寫demo我用的包名和key都是微信demo的

配置權限

配置activity

配置回調activity

調用支付

public void testWxPay(View view) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
            ToastUtil.shortToastInBackgroundThread(getActivity(), "獲取訂單中...");
            try {
                byte[] buf = Util.httpGet(url);
                if (buf != null && buf.length > 0) {
                    String content = new String(buf);
                    Log.e("get server pay params:", content);
                    JSONObject json = new JSONObject(content);
                    if (null != json && !json.has("retcode")) {
                        req = new PayReq();
                        //req.appId = "wxf8b4f85f3a794e77";  // 測試用appId
                        req.appId = json.getString("appid");
                        req.partnerId = json.getString("partnerid");
                        req.prepayId = json.getString("prepayid");
                        req.nonceStr = json.getString("noncestr");
                        req.timeStamp = json.getString("timestamp");
                        req.packageValue = json.getString("package");
                        req.sign = json.getString("sign");
                        req.extData = "app data"; // optional
                        ToastUtil.shortToastInBackgroundThread(getActivity(), "正常調起支付");
                        toPay();
                    } else {
                        Log.d("PAY_GET", "返回錯誤" + json.getString("retmsg"));
                        ToastUtil.shortToastInBackgroundThread(getActivity(), "返回錯誤" + json.getString("retmsg"));
                    }
                } else {
                    Log.d("PAY_GET", "服務器請求錯誤");
                    ToastUtil.shortToastInBackgroundThread(getActivity(), "服務器請求錯誤");
                }
            } catch (Exception e) {
                Log.e("PAY_GET", "異常:" + e.getMessage());
                ToastUtil.shortToastInBackgroundThread(getActivity(), "異常:" + e.getMessage());
            }
        }
    }).start();

}

private void toPay() {
    // 在支付之前,如果應用沒有注冊到微信,應該先調用IWXMsg.registerApp將應用注冊到微信
    api.sendReq(req);
}

到這裡如果你按照我的配置的話,正常情況下試可用調起支付界面了,如果出現-1,請檢查是不是替換了debug.keystore,如果替換了,還是這樣記得清空微信緩存

以上測試代碼都在github上,官方的下載的sdk包也在該倉庫的docs目錄下

如果我的文章對來帶來的幫助,可加我微信,微博,QQ什麼啥的交個朋友也是不錯的,另外微信,微博都會不定期發一些優質的文章,感謝大家的支持~~,聯系方式在我的個人介紹裡啦

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved