編輯:關於android開發
今天來聊聊,android中接入微信支付的需求,肯定有人會說,這多簡單呀,還在這裡扯什麼,趕快去洗洗睡吧~~
那我就不服了,要是說這簡單的,你知道微信支付官網多少嗎,要是你一百度,下面全是廣告,哈哈,你一不小心就掉坑去了,在簡單的事,只要你想把他做好,其實也是很復雜的~
首先我們來到微信支付官網瞅瞅:
可以看到這就是微信支付首頁,下面有幾種支付方式,而我們今天的主角就是APP支付,我們可以直接點進去,或者從左上角接入指引-APP支付,進去的文檔式樣的,這是這個文檔的位置如下圖所示:
肯定有人說,你貼這麼有毛用呀,還浪費我流量…
別急讓我給你說說這圖有什麼用,首先從這圖你能看出從注冊開發平台賬號到完成支付接入需要哪些步驟,哪些資料,這樣你可以讓相關的人員事先去准備這些資料,而不是填完一步資料,在去找下一步資料,記住時間就是金錢,另外你領導說來給我講講微信支付那准備哪些資料,你沒看過這文檔,那我就只能呵呵了O(∩_∩)O~。另外哪些說支付簡單的,有幾個知道這張圖,又有誰認真看過~~
可以看到是要加300塊的,還需要企業的一些資料。
另外微信支付有兩個平台分別是開發者平台和商戶平台
開發者平台:主要是針對開發者,比如:創建應用,獲取appid
商戶平台:主要是商戶上面的一些管理,比如:可以查看流水,訂單呀
這裡我只是演示怎麼創建應用,最後不會用這個賬號的,因為我這是個人賬號,沒法申請支付,只是給不會創建的朋友做一個演示,需要哪些資料而已,會的可略過~
首先我們來到開發者平台,沒有賬號的先注冊,這個我想不用演示了,直接演示怎麼創建應用,首先你的登錄完賬號,點擊管理中心-移動應用:
點擊左上角的創建移動應用,到如下界面,因為這裡是測試,所有資料都是隨便填啦
點擊下一步就來到了
這一步讓你填寫,需要的平台,以及平台信息,我這裡只懸著android,填入包名和簽名,另外這裡他沒有想微博那樣可以填入多個簽名,那麼這裡我建議你一開始填入debug的簽名,等調試通過了在填寫正式簽名,簽名的獲取方法和接入第三方登錄是一樣的。最後提交審核,等審核完以後,我們點擊到應用詳情,應該是這樣的效果
個人賬號創建的應用審核通過後只有,分享功能,如果還需要支付,可以點擊申請,然後認證賬號並上傳一些資料,這又是一個漫長的過程,這裡我們就不了那麼多了,現在直接說怎麼在代碼實現吧
記住這裡的支付demo是在商戶平台的幫助裡面下載,地址在這裡,而不是開發者平台下載的那個demo(以前是可以,現在這裡下載的demo,裡面剔除了支付),如下圖,是這個頁面:
第一個是基礎庫,點擊後會跳到開發者平台,第二個參數支付demo,當然裡面也包含了分享等一些功能,可以說如果你既要做支付又要做分享,那麼你只需要這個一個demo就行了,當然還得需要我這篇文章呀
下載完導入eclipse,替換debug.keystore然後運行,就可以看到如下界面,終於看到支付了,激動不已是不是
然後我們就可以點擊“跳轉到支付界面”,看看什麼效果呀,是騾子是馬總的溜溜吧,看到這一面,感覺神清氣爽,因為demo跑通了,呵呵~
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什麼啥的交個朋友也是不錯的,另外微信,微博都會不定期發一些優質的文章,感謝大家的支持~~,聯系方式在我的個人介紹裡啦
Android之利用HTTP網絡通信實現與PHP的交互(三),android網絡通信 Android與PHP的交互是通過Http網絡編程來實現的,利用php訪
ELF Format 筆記(十一)—— 程序頭結構,elfformatilocker:關注 Android 安全(新手) QQ: 2597294287 程序頭表 (pro
Android 手機衛士--是否有密碼區分對話框類型,android衛士本文開始逐步實現設置中心的“手機防盜”功能模塊 本文地址:/www.cn
開啟我的Android之旅-----記錄Android環境搭建遇到的問題,-----android在現在這個離不開手機的時代,對於手機APP的開發也是一個很大的市場,所以