Android接入支付宝支付
2019-07-16 本文已影响0人
Wang_Mr
-
流程
常用的接入方式和架构建议
示例
1.下单 2.返回订单信息 3.唤起支付宝钱包
4.支付 5.返回支付结果
6.返回支付结果
-
集成
1.将alipaySdk-15.6.4-20190611174341.aar
包放在您的应用工程的libs
目录下
2.在项目的
build.gradle
中,添加下面的内容
allprojects {
repositories {
// 添加下面的内容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他仓库
}
}
dependencies {
// 添加下面的内容
implementation (name: 'alipaySdk-15.6.4-20190611174341', ext: 'aar')
// ... 其他依赖项
}
3.在AndroidManifest
文件中添加如下权限
<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" />
4.支付接口调用( PayTask 支付对象调用payV2()方法进行支付)
/**
* @param orderInfo 接口返回的订单信息
*/
protected void pay(final Activity activity, final String orderInfo) {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(activity);
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();
}
5.同步返回结果
@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);
/**
*对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
}
break;
}
}
}
};
6.PayResult类
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;
}
}
6.沙箱联调
// 在使用 SDK 时,在支付接口前调用如下方法
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
沙箱联调