Android支付寶和微信支付集成
場(chǎng)景
隨著移動(dòng)支付的興起,在我們的app'中,會(huì)經(jīng)常有集成支付的需求.這時(shí)候一般都會(huì)采用微信和支付寶的sdk 來(lái)集成
(一)支付寶支付
在使用支付寶支付的過(guò)程中,我們是在服務(wù)器端生成訂單,客戶端訪問(wèn)接口,并得到訂單信息,調(diào)用接口支付,支付成功后支付寶會(huì)分別 異步調(diào)用服務(wù)器端,并向客戶端返回支付結(jié)果.
開發(fā)步驟:
①注冊(cè)支付寶賬號(hào)——進(jìn)行實(shí)名認(rèn)證——提交審核資料——審核通過(guò)
支付寶無(wú)線快捷支付接口:
b.alipay.com/order/productDetail.htm?productId=2014110308141993&tabId=4#ps-tabinfo-hash
ps: 申請(qǐng)要上傳你的apk和產(chǎn)品說(shuō)明文檔,產(chǎn)品截圖、接口使用場(chǎng)景、資費(fèi)說(shuō)明等,審核通過(guò)后會(huì)得到PID和秘鑰。
開發(fā)者可以通過(guò)支付寶公鑰驗(yàn)證消息來(lái)源,同時(shí)可使用自己的私鑰對(duì)信息進(jìn)行加密。
② 下載官方Sdk Demo里面包含文檔.該Demo中需要將審核通過(guò)后獲取的PID替換,并且輸入支付寶收款賬戶和用戶私鑰. 運(yùn)行demo,查看sdk調(diào)用方式,
PID對(duì)應(yīng)的密鑰一共有三種加密方式,分別是MD5、RSA、DSA。Java開發(fā)者需要將密鑰轉(zhuǎn)換成PKCS8格式,并將公鑰上傳到支付寶.生成方式見文檔.[支付寶開放平臺(tái)]
③ 導(dǎo)入項(xiàng)目,客戶端調(diào)用,.首先將支付寶demo中的jar包導(dǎo)入到項(xiàng)目中,可以參照,demo中拼接參數(shù)
支付寶demo類導(dǎo)入
//方法名稱:payTask.pay //方法原型: PayTask payTask = new PayTask(activity); String result = payTask.pay(orderInfo); //方法功能:提供給商戶訂單支付功能。
請(qǐng)求參數(shù)以鍵值對(duì)的形式拼裝到一個(gè)String中,參數(shù)具體說(shuō)明詳見官方文檔.
④ 修改Manifest,添加com.alipay.sdk.app.H5PayActivity和uses-permission,并在proguard-project.txt中添加相關(guān)的混淆規(guī)則即可.
ps: 簽名注意事項(xiàng):
在請(qǐng)求參數(shù)列表中,除去sign、sign_type兩個(gè)參數(shù)外,其他需要使用到的參數(shù)皆是要簽名的參數(shù)
sign值要做utf-8 URLencode。
⑤回調(diào)處理,詳見 支付寶同步通知參數(shù)說(shuō)明.out_trade_no可以作為唯一標(biāo)志和服務(wù)器端進(jìn)行交互,
當(dāng)支付寶同步 通知后,客戶端通過(guò)out_trade_no詢問(wèn)服務(wù)器端是否支付成功,因?yàn)檎嬲某晒?biāo)志是需要服務(wù)器端來(lái)驗(yàn)證的.
public AliPayResultS(String result) { if (TextUtils.isEmpty(result)) return; String[] resultParams = result.split("&"); for (String resultParam : resultParams) { if (resultParam.startsWith("out_trade_no")) { out_trade_no = gatValue(resultParam, "out_trade_no"); } } }
(二)微信支付
同樣,有了支付寶支付,呢么微信支付也不可缺少,微信支付和支付寶支付流程,大體相同,通過(guò)服務(wù)器端獲取訂單信息返回給客戶端,客戶端調(diào)用sdk進(jìn)行支付,支付完成后進(jìn)行同步和異步回調(diào).
微信開放平臺(tái)Android接入指南:
open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
①獲取appId
同樣需要獲取appid,登記并選擇移動(dòng)應(yīng)用進(jìn)行設(shè)置后,將該應(yīng)用提交審核,只有審核通過(guò)并獲取appId的應(yīng)用才能進(jìn)行開發(fā)。
②下載Android 微信支付demo.
我們所需要關(guān)注的依舊是PayActivity.使用微信的登陸和支付,大家都知道,需要在項(xiàng)目下新建一個(gè)wxapi文件夾來(lái)實(shí)現(xiàn)回調(diào).
③項(xiàng)目集成,首先我們需要將libammsdk.jar導(dǎo)入到lib目錄下,這個(gè)是核心jar包.同時(shí)修改Manifest
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"/>
④接口調(diào)用.
首先我們需要初始化一個(gè)IWXAPI api,并注冊(cè)到應(yīng)用,
api.registerApp(Constants.APP_ID); PayReq req = new PayReq(); //....拼接req參數(shù) api.sendReq(req);// 調(diào)用支付
⑤支付回調(diào).
在支付回調(diào)類WXPayEntryActivity的onResp(BaseResp resp)方法中我們可以得到 客戶端 和服務(wù)器 唯一標(biāo)志prepayid參數(shù),來(lái)實(shí)現(xiàn)支付成功的后續(xù)處理.
// 支付成功 if (resp instanceof com.tencent.mm.sdk.modelpay.PayResp) { com.tencent.mm.sdk.modelpay.PayResp payResp = (PayResp) resp; String prepayId = payResp.prepayId;
ps: 微信支付中需要注意的是支付回調(diào)方法.支付回調(diào)必須在項(xiàng)目中創(chuàng)建一個(gè)wxapi目錄,并命名為WXPayEntryActivity(包名或類名不一致會(huì)造成無(wú)法回調(diào)),回調(diào)方法中獲取prepayId.
// 第三方應(yīng)用發(fā)送到微信的請(qǐng)求處理后的響應(yīng)結(jié)果,會(huì)回調(diào)到該方法 @Override public void onResp(BaseResp baseResp) { // String result = ""; switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: // result = "發(fā)送成功"; { Intent intent = new Intent(Constants.payAction); intent.putExtra(Constants.prepayId, ((PayResp) baseResp).prepayId); mLocalBroadcastManager.sendBroadcast(intent); } break; case BaseResp.ErrCode.ERR_USER_CANCEL: // result = "發(fā)送取消"; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: // result = "發(fā)送被拒絕"; break; default: // result = "發(fā)送返回"; break; } finish(); }
總之,三方支付官方文檔寫的都非常詳細(xì),就是需要細(xì)心處理細(xì)節(jié)和注意參數(shù),微信支付不能使用debug的,因?yàn)橐?yàn)證簽名等.否則支付不成功.
完整demo:https://github.com/BoBoMEe/ThirdPay
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 退出應(yīng)用程序的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 退出應(yīng)用程序的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-04-04Android實(shí)現(xiàn)搜索保存歷史記錄功能
這篇文章主要介紹了Android實(shí)現(xiàn)搜索保存歷史記錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Android編程實(shí)現(xiàn)手機(jī)震動(dòng)功能的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)手機(jī)震動(dòng)功能的方法,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)手機(jī)震動(dòng)功能的核心代碼與權(quán)限控制操作技巧,需要的朋友可以參考下2017-06-06Android自動(dòng)化測(cè)試處理各種彈窗的操作方法
這篇文章主要介紹了Android自動(dòng)化測(cè)試中如何處理各種彈窗,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09Android 廣播監(jiān)聽網(wǎng)絡(luò)狀態(tài)詳解及實(shí)例代碼
這篇文章主要介紹了Android 廣播監(jiān)聽網(wǎng)絡(luò)狀態(tài)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02XListView實(shí)現(xiàn)網(wǎng)絡(luò)加載圖片和下拉刷新
這篇文章主要為大家詳細(xì)介紹了XListView實(shí)現(xiàn)網(wǎng)絡(luò)加載圖片和下拉刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11