Android第三方支付——支付宝APP支付
目录
乘热打铁,今天写了一篇关于Android微信支付的文章,索性就把支付宝支付也一并写入博客,一方面就当是自己一个开发笔记,另一方面也希望能够帮助那些刚刚接触支付宝APP支付开发者们。
集成流程
- 1.将支付宝JAR包放入工程libs下并引入到工程中。
- 2.在Manifest文件中声明所需activity
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
// 如果用户手机未安装支付宝APP,会调起支付宝网页去支付
<activity android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
// 调起支付宝APP授权activity
3.添加权限声明
<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" />
4.添加混淆规则
// 在应用工程的proguard-project.txt里添加以下相关规则
-libraryjars libs/alipaySDK-20150602.jar
-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 *;}
支付流程图
调起支付
获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行),代码示例:
final String orderInfo = info; // 后台返回的订单信息
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayActivity.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();
获取支付结果并处理
通过调用支付时候handler发送的消息,通过回调函数获取结果。
代码示例:
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
if(TextUtils.equals(resultStatus, "9000")) {
// 支付成功
} else {
//支付失败
}
};
};
注意事项
支付宝支付提供了沙箱环境用于测试,正式上线必须进行正式环境的测试。
支付宝沙箱环境配置是在调用支付宝支付前进行配置:
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);