1. 程式人生 > >Android 3分鐘整合支付寶支付

Android 3分鐘整合支付寶支付

一.話不多說,直接上步驟。

image.png

2.在app的.gradle檔案中引入此jar包

//支付寶支付
compile files('libs/alipaySdk-20170922.jar')

3.清單檔案 即AndroidManifest.xml檔案中宣告支付所需的activity

  <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>

4.許可權宣告。

 A.普通許可權:
<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"
/>
B.高危許可權: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

5.資源匯入完成,開始支付流程。主要分為三部曲。

  a.向伺服器傳送請求,伺服器返回訂單資訊

  b.呼叫支付寶非同步請求發起支付

  c.處理回撥結果

其中,b支付寶的非同步請求程式碼如下:

   Runnable payRunnable = new Runnable() {//要在子執行緒
        @Override
        public void run() {
            PayTask alipay = new PayTask(ShoppingActivity.this);
            Map<String, String> result = alipay.payV2
                    (t.getPaySdk(), true);//這裡的t.getPaySdk() 即為支付資訊, 伺服器返回的一個String型別的欄位
            Message msg = new Message();
            msg.what = SDK_PAY_FLAG;    //SDK_PAY_FLAG此為靜態常量,在Activity中宣告即可。      
                                        //private static final int SDK_PAY_FLAG = 1;
            msg.obj = result;
            mHandler.sendMessage(msg);
        }
    };
    Thread payThread = new Thread(payRunnable);
    payThread.start();

其中,c 處理回撥結果程式碼如下,:

  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);
                /**
                 對於支付結果,請商戶依賴服務端的非同步通知結果。同步通知結果,僅作為支付結束的通知。
                 */
                String resultInfo = payResult.getResult();// 同步返回需要驗證的資訊
                String resultStatus = payResult.getResultStatus();
                // 判斷resultStatus 為9000則代表支付成功
                if (TextUtils.equals(resultStatus, "9000")) {
                    // 該筆訂單是否真實支付成功,需要依賴服務端的非同步通知。
                    Toast.makeText(ShoppingActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                    ClimbTo(PaySuccessActivity.class);
                } else {
                    // 該筆訂單真實的支付結果,需要依賴服務端的非同步通知。
                    Toast.makeText(ShoppingActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
                }
                break;
            }

            default:
                break;
        }
    }
};

6.支付完成,需要做混淆的小夥伴可在混淆檔案中加入如下程式碼:

  -keep class com.alipay.android.app.IAlixPay{*;}
  -keep class com.alipay.android.app.IAlixPay$Stub{*;}
  -keep class com.alipay.android.app.IRemoteServiceCallback{*;}
  -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
  -keep class com.alipay.sdk.app.PayTask{ public *;}
  -keep class com.alipay.sdk.app.AuthTask{ public *;}
  -keep class com.alipay.sdk.app.H5PayCallback {
      <fields>;
      <methods>;
  }
  -keep class com.alipay.android.phone.mrpc.core.** { *; }
  -keep class com.alipay.apmobilesecuritysdk.** { *; }
  -keep class com.alipay.mobile.framework.service.annotation.** { *; }
  -keep class com.alipay.mobilesecuritysdk.face.** { *; }
  -keep class com.alipay.tscenter.biz.rpc.** { *; }
  -keep class org.json.alipay.** { *; }
  -keep class com.alipay.tscenter.** { *; }
  -keep class com.ta.utdid2.** { *;}
  -keep class com.ut.device.** { *;}

三.隨手分享,喜歡的朋友可以關注本簡書號MiHomes,後續會有更多更好的部落格推送給您。

另:歡迎指出不足,會進行更正

同步更新至簡書 : https://www.jianshu.com/p/4dce4b060385