Android支付寶和微信支付整合_Android

來源:互聯網
上載者:User

情境
隨著移動支付的興起,在我們的app'中,會經常有整合支付的需求.這時候一般都會採用微信和支付寶的sdk 來整合

(一)支付寶支付
在使用支付寶支付的過程中,我們是在伺服器端產生訂單,用戶端提供者,並得到訂單資訊,調用介面支付,支付成功後支付寶會分別 非同步呼叫伺服器端,並向用戶端返回支付結果.

開發步驟:

①註冊支付寶帳號——進行實名認證——提交審核資料——審核通過

支付寶無線快捷支付介面:
b.alipay.com/order/productDetail.htm?productId=2014110308141993&tabId=4#ps-tabinfo-hash

ps: 申請要上傳你的apk和產品說明文檔,產品截圖、介面使用情境、資費說明等,審核通過後會得到PID和秘鑰。

開發人員可以通過支付寶公開金鑰驗證訊息來源,同時可使用自己的私密金鑰對資訊進行加密。

② 下載官方Sdk Demo裡麵包含文檔.該Demo中需要將審核通過後擷取的PID替換,並且輸入支付寶收款賬戶和使用者私密金鑰. 運行demo,查看sdk調用方式,

PID對應的密鑰一共有三種加密方式,分別是MD5、RSA、DSA。Java開發人員需要將密鑰轉換成PKCS8格式,並將公開金鑰上傳到支付寶.產生方式見文檔.[支付寶開放平台]

③ 匯入項目,用戶端調用,.首先將支付寶demo中的jar包匯入到項目中,可以參照,demo中拼接參數

支付寶demo類匯入

//方法名稱:payTask.pay//方法原型:PayTask payTask = new PayTask(activity); String result = payTask.pay(orderInfo);//方法功能:提供給商戶訂單支付功能。

請求參數以索引值對的形式拼裝到一個String中,參數具體說明詳見官方文檔.

④ 修改Manifest,添加com.alipay.sdk.app.H5PayActivity和uses-permission,並在proguard-project.txt中添加相關的混淆規則即可.

ps: 簽名注意事項:

在請求參數列表中,除去sign、sign_type兩個參數外,其他需要使用到的參數皆是要簽名的參數
sign值要做utf-8 URLencode。
⑤回調處理,詳見 支付寶同步通知參數說明.out_trade_no可以作為唯一標誌和伺服器端進行互動,
當支付寶同步 通知後,用戶端通過out_trade_no詢問伺服器端是否支付成功,因為真正的成功標誌是需要伺服器端來驗證的.

 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");   }  } }

(二)微信支付
同樣,有了支付寶支付,呢麼微信支付也不可缺少,微信支付和支付寶支付流程,大體相同,通過伺服器端擷取訂單資訊返回給用戶端,用戶端調用sdk進行支付,支付完成後進行同步和非同步回調.

微信開放平台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,登記並選擇行動裝置 App進行設定後,將該應用提交審核,只有審核通過並擷取appId的應用才能進行開發。

②下載Android 微信支付demo.

我們所需要關注的依舊是PayActivity.使用微信的登陸和支付,大家都知道,需要在項目下建立一個wxapi檔案夾來實現回調.

③項目整合,首先我們需要將libammsdk.jar匯入到lib目錄下,這個是核心jar包.同時修改Manifest

 <activity   android:name=".wxapi.WXPayEntryActivity"   android:exported="true"   android:launchMode="singleTop"/>

④介面調用.

首先我們需要初始化一個IWXAPI api,並註冊到應用,

api.registerApp(Constants.APP_ID); PayReq req = new PayReq();//....拼接req參數api.sendReq(req);// 調用支付

⑤支付回調.

在支付回調類WXPayEntryActivity的onResp(BaseResp resp)方法中我們可以得到 用戶端 和伺服器 唯一標誌prepayid參數,來實現支付成功的後續處理.

 // 支付成功    if (resp instanceof com.tencent.mm.sdk.modelpay.PayResp) {     com.tencent.mm.sdk.modelpay.PayResp payResp = (PayResp) resp;     String prepayId = payResp.prepayId;

ps: 微信支付中需要注意的是支付回調方法.支付回調必須在項目中建立一個wxapi目錄,並命名為WXPayEntryActivity(包名或類名不一致會造成無法回調),回調方法中擷取prepayId.

// 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法 @Override public void onResp(BaseResp baseResp) {//  String result = "";  switch (baseResp.errCode) {   case BaseResp.ErrCode.ERR_OK://    result = "發送成功";   {    Intent intent = new Intent(Constants.payAction);    intent.putExtra(Constants.prepayId, ((PayResp) baseResp).prepayId);    mLocalBroadcastManager.sendBroadcast(intent);   }   break;   case BaseResp.ErrCode.ERR_USER_CANCEL://    result = "發送取消";    break;   case BaseResp.ErrCode.ERR_AUTH_DENIED://    result = "發送被拒絕";    break;   default://    result = "發送返回";    break;  }  finish(); }

總之,三方支付官方文檔寫的都非常詳細,就是需要細心處理細節和注意參數,微信支付不能使用debug的,因為要驗證簽名等.否則支付不成功.

完整demo:https://github.com/BoBoMEe/ThirdPay

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.