最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在Android App中集成支付寶和微信支付功能

 更新時間:2018年05月02日 09:19:59   作者:WZH  
支付是各位Android開發(fā)者們在日常工作中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于如何在Android App中集成支付寶和微信支付功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

本文主要介紹如何在 Android App 里集成支付寶和微信支付的功能,文中將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對同樣遇到這個問題的朋友相信會是一個很好的參考,下面話不多說了,來一起看看詳細(xì)的介紹吧。

集成支付寶支付

沒想到現(xiàn)在 App 里集成支付寶是這么的簡單,我還折騰了好久…


好了,開始,假設(shè)你已經(jīng)完成了支付寶那些繁雜的申請啥的工作,進(jìn)入開發(fā)了。

首先,去下載官方的 DEMO :

App支付客戶端DEMO&SDK。

導(dǎo)入開發(fā)資源

解壓后把里面的 jar 包拿出來放到你工程的 lib 目錄下,如圖

然后進(jìn)入工程的“Project Structure”,在app module下選擇“File dependency”,將libs目錄下的alipaySDK-xxxxxxxx.jar導(dǎo)入,或者在app module下的build.gradle下手動添加依賴,如下代碼所示:

......
compile files('libs/alipaySdk-20170725.jar')
......

修改 AndroidManifest 文件

復(fù)制進(jìn)去就行

<activity
 android:name="com.alipay.sdk.app.H5PayActivity"
 android:configChanges="orientation|keyboardHidden|navigation|screenSize"
 android:exported="false"
 android:screenOrientation="behind"
 android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
 <activity
 android:name="com.alipay.sdk.app.H5AuthActivity"
 android:configChanges="orientation|keyboardHidden|navigation"
 android:exported="false"
 android:screenOrientation="behind"
 android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>

聲明權(quán)限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

好了,準(zhǔn)備工作基本完成。

支付接口的調(diào)用

這里參考下給的 Demo。
由于支付包的 Demo 給的是本地加密的方式,并且不推薦使用這種方法,所以我們只需要用的其中的部分代碼就好了。
首先,把 PayResult.java這個類復(fù)制到你的項(xiàng)目里。代碼如下:

public class PayResult {
 private String resultStatus;
 private String result;
 private String memo;
 public PayResult(Map<String, String> rawResult) {
  if (rawResult == null) {
   return;
  }
  for (String key : rawResult.keySet()) {
   if (TextUtils.equals(key, "resultStatus")) {
    resultStatus = rawResult.get(key);
   } else if (TextUtils.equals(key, "result")) {
    result = rawResult.get(key);
   } else if (TextUtils.equals(key, "memo")) {
    memo = rawResult.get(key);
   }
  }
 }
 @Override
 public String toString() {
  return "resultStatus={" + resultStatus + "};memo={" + memo
    + "};result={" + result + "}";
 }
 /**
  * @return the resultStatus
  */
 public String getResultStatus() {
  return resultStatus;
 }
 /**
  * @return the memo
  */
 public String getMemo() {
  return memo;
 }
 /**
  * @return the result
  */
 public String getResult() {
  return result;
 }
}

然后調(diào)支付接口。PayTask對象主要為商戶提供訂單支付、查詢功能,及獲取當(dāng)前開發(fā)包版本號。獲取PayTask支付對象調(diào)用支付(支付行為需要在獨(dú)立的非ui線程中執(zhí)行),

private static final int SDK_PAY_FLAG = 1;
// 訂單信息
final String orderInfo = info; 
Runnable payRunnable = new Runnable() {
@Override
 public void run() {
  PayTask alipay = new PayTask(PayDemoActivity.this);
  Map<String, String> result = alipay.payV2(orderInfo, true);
  Message msg = new Message();
  msg.what = SDK_PAY_FLAG;
  msg.obj = result;
  mHandler.sendMessage(msg);
 }
};
Thread payThread = new Thread(payRunnable);
payThread.start();

注意下 orderInfo這個變量,這個值是由通過向后臺請求返回的值。

這里需要后臺注意的是,寫的時候看好App支付請求參數(shù)說明這個文檔。

然后是支付結(jié)果的獲取與處理。

@SuppressLint("HandlerLeak")
 private Handler mHandler = new Handler() {
  @SuppressWarnings("unused")
  public void handleMessage(Message msg) {
   switch (msg.what) {
   case SDK_PAY_FLAG: {
    @SuppressWarnings("unchecked")
    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
    /**
     對于支付結(jié)果,請商戶依賴服務(wù)端的異步通知結(jié)果。同步通知結(jié)果,僅作為支付結(jié)束的通知。
     */
    String resultInfo = payResult.getResult();// 同步返回需要驗(yàn)證的信息
    String resultStatus = payResult.getResultStatus();
    // 判斷resultStatus 為9000則代表支付成功
    if (TextUtils.equals(resultStatus, "9000")) {
     // 該筆訂單是否真實(shí)支付成功,需要依賴服務(wù)端的異步通知。
     Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
    } else {
     // 該筆訂單真實(shí)的支付結(jié)果,需要依賴服務(wù)端的異步通知。
     Toast.makeText(PayDemoActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
    }
    break;
   }
   default:
    break;
   }
  };
 };

然后就好了。

結(jié)束。

集成微信支付

微信支付還是好弄的,就是先該注冊的注冊,該申請的申請,這個不是本文的重點(diǎn)。

因?yàn)槲⑿庞袀€支付回調(diào)的問題,我的做法就是在項(xiàng)目的x.x.x.wxapi包路徑中實(shí)現(xiàn) WXPayEntryActivity 類(切記包名或類名一定要一致,否則會造成無法回調(diào))。代碼如下:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
 private static final String TAG = "WXPayEntryActivity";
 private IWXAPI api;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.pay_result);
  
  api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
  api.handleIntent(getIntent(), this);
  /*
  * 在這里去做跟后臺服務(wù)器的請求,
  * 獲取需要的簽名信息,然后調(diào)起微信支付。
  **/
 }
 @Override
 protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);
  api.handleIntent(intent, this);
 }
 @Override
 public void onReq(BaseReq req) {
 }
 @Override
 public void onResp(BaseResp resp) {
  Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
  switch(resp.errCode){
   case 0:
   //支付成功,做自己想做的處理
   break;
   case -1:
   //可能的原因:簽名錯誤、未注冊APPID、項(xiàng)目設(shè)置APPID不正確、注冊的APPID與設(shè)置的不匹配、其他異常等。
   break;
   case -2:
   //用戶取消.無需處理。發(fā)生場景:用戶不支付了,點(diǎn)擊取消,返回APP。
   break;
   default:
   break
  }
 }
}

后記

這是第一次接入支付寶支付,一開始還很起勁的參照一個庫去進(jìn)行封裝,然后發(fā)現(xiàn)好像多此一舉,并且還不成功,和后臺捯飭了好久然后看Demo才弄出來。

參考:

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Android編程實(shí)現(xiàn)定時發(fā)短信功能示例

    Android編程實(shí)現(xiàn)定時發(fā)短信功能示例

    這篇文章主要介紹了Android編程實(shí)現(xiàn)定時發(fā)短信功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android定時發(fā)送短信功能的相關(guān)原理、實(shí)現(xiàn)方法與注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Android App自動更新之通知欄下載

    Android App自動更新之通知欄下載

    這篇文章主要為大家詳細(xì)介紹了Android App自動更新之通知欄下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • android內(nèi)存及內(nèi)存溢出分析詳解

    android內(nèi)存及內(nèi)存溢出分析詳解

    這篇文章詳細(xì)介紹了android內(nèi)存及內(nèi)存溢出的問題,有需要的朋友可以參考一下
    2013-09-09
  • Kotlin?RecyclerView滾動控件詳解

    Kotlin?RecyclerView滾動控件詳解

    RecyclerView是Android一個更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動,也可以實(shí)現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法
    2022-12-12
  • Kotlin-Android之Activity使用詳解

    Kotlin-Android之Activity使用詳解

    這篇文章主要介紹了Kotlin-Android之Activity使用詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Android五種隱藏狀態(tài)欄和標(biāo)題欄的方法

    Android五種隱藏狀態(tài)欄和標(biāo)題欄的方法

    這篇文章主要介紹了Android五種隱藏狀態(tài)欄和標(biāo)題欄的方法的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android使用HorizontalScrollView實(shí)現(xiàn)水平滾動

    Android使用HorizontalScrollView實(shí)現(xiàn)水平滾動

    這篇文章主要為大家詳細(xì)介紹了Android使用HorizontalScrollView實(shí)現(xiàn)水平滾動,并點(diǎn)擊有相應(yīng)的反應(yīng)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • android幫助文檔打開慢的三種解決方法

    android幫助文檔打開慢的三種解決方法

    本文介紹了“android幫助文檔打開慢的三種解決方法”,需要的朋友可以參考一下
    2013-03-03
  • mac開發(fā)android環(huán)境搭建步驟圖解

    mac開發(fā)android環(huán)境搭建步驟圖解

    這里比較詳細(xì)的來總結(jié)下mac開發(fā)android的環(huán)境搭建步驟安裝過程,希望對一些正準(zhǔn)備配置Android開發(fā)環(huán)境的小伙伴們有一定幫助
    2014-01-01
  • Android用TextView實(shí)現(xiàn)跑馬燈效果代碼

    Android用TextView實(shí)現(xiàn)跑馬燈效果代碼

    大家好,本篇文章主要講的是Android?TextView實(shí)現(xiàn)跑馬燈效果代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論

桂平市| 营山县| 赣州市| 云南省| 扎赉特旗| 石楼县| 绍兴县| 宜城市| 淳安县| 东阳市| 呼玛县| 抚宁县| 恩平市| 怀集县| 铁力市| 黔南| 乌什县| 平原县| 曲周县| 泌阳县| 乌兰察布市| 繁峙县| 福泉市| 平阳县| 犍为县| 民丰县| 方正县| 惠来县| 湄潭县| 土默特右旗| 宜君县| 门源| 永嘉县| 仁化县| 轮台县| 无极县| 肥乡县| 交城县| 项城市| 蓬溪县| 凤庆县|