Android 集成支付宝支付
2018-03-29 本文已影响182人
MiHomes
一.话不多说,直接上步骤。
1.导入jar包至项目Libs文件夹下。下载地址:https://docs.open.alipay.com/54/104509
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.** { *;}
二.支付宝官方集成步骤:https://docs.open.alipay.com/204/105296/
三.随手分享,喜欢的朋友可以关注微信公众号MiHomes,后续会有更多更好的博客推送给您。
另:欢迎指出不足,会进行更正
末尾:移动互联&人力资源交流群,可加微信zy666128入群交流。
image.png