Android 3分钟集成支付宝支付

934 阅读2分钟
原文链接: www.jianshu.com

一.话不多说,直接上步骤。

1.导入jar包至项目Libs文件夹下。下载地址:docs.open.alipay.com/54/104509

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,后续会有更多更好的博客推送给您。

另:欢迎指出不足,会进行更正