編輯:關於Android編程
今天來聊聊,android中接入微信支付的需求,肯定有人會說,這多簡單呀,還在這裡扯什麼,趕快去洗洗睡吧~~
那我就不服了,要是說這簡單的,你知道微信支付官網多少嗎,要是你一百度,下面全是廣告,哈哈,你一不小心就掉坑去了,在簡單的事,只要你想把他做好,其實也是很復雜的~
首先我們來到微信支付官網瞅瞅:
可以看到這就是微信支付首頁,下面有幾種支付方式,而我們今天的主角就是APP支付,我們可以直接點進去,或者從左上角接入指引-APP支付,進去的文檔式樣的,這是這個文檔的位置如下圖所示:
vc3qs8nWp7i2vdPI69Do0qrExNCpsr3W6KOsxMTQqdfKwc+jrNXi0fnE47/J0tTIw8/gudi1xMjL1LHKws/IyKXXvLG41eLQqdfKwc+jrLb4srvKx8zuzerSu7K918rBz6Os1NrIpdXSz8LSu7K918rBz6OsvMfXocqxvOS+zcrHvfDHrqOswe3N4sTjwey1vMu1wLS4+M7SvbK9ss6i0MXWp7i2xMfXvLG4xMTQqdfKwc+jrMTjw7u/tLn91eLOxLW1o6zEx87Svs3Wu8Tcuse6x8HLTyihyV+hySlPfqGjwe3N4sTE0KnLtdanuLa88rWltcSjrNPQvLi49taqtcDV4tXFzbyjrNPW09DLrcjP1ea/tLn9fn48L3A+Cgo8cD6/ydLUv7S1vcrH0qq80zMwML/ptcSjrLu50OjSqsbz0rW1xNK70KnXysHPoaM8L3A+Cgo8cD7B7c3izqLQxdanuLbT0MG9uPbGvcyot9ax8MrHPGEgaHJlZj0="https://open.weixin.qq.com/">開發者平台和商戶平台
開發者平台:主要是針對開發者,比如:創建應用,獲取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編程解析XML方法。分享給大家供大家參考,具體如下:XML在各種開發中都廣泛應用,Android也不例外。作為承載數據的一個重要角色,如何讀寫
本文參考借鑒:http://www.jb51.net/article/102983.htm先上效果圖:自定義控件:AttendanceProgressBar代碼如下: p
(一)概述上節我們學習了Service的生命周期,以及兩種啟動Service的兩種方法, 本節繼續來深入了解Service中的IntentService,Service的
Intent組件雖然不是四大組件,但卻是連接四大組件的橋梁,學習好這個知識,也非常的重要。一、什麼是Intent1、Intent的概念:Android中提供了Intent