官方集成文档地址:https://docs.open.alipay.com/204/105296/
一、导入支付宝SDK
1.将 alipaySdk-15.6.5-20190718211159.aar 包放在您的应用工程的 libs 目录下(图片中文件名仅做示例,请以实际 SDK 文件名为准):arr文件下载地址:https://download.youkuaiyun.com/download/github_39118247/11648340

2.在主项目的 build.gradle 中,添加下面的内容,将 libs 目录作为依赖仓库:

allprojects {
repositories {
// 添加下面的内容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他仓库
}
}
3.在您 App Module 的 build.gradle 中,添加下面的内容,将支付宝 SDK 作为项目依赖:

dependencies {
// 添加下面的内容
compile (name: 'alipaySdk-15.5.7-20181023110917', ext: 'aar')
// ... 其他依赖项
}
至此,支付宝 SDK 开发资源导入完成。
运行权限
为正常完成良好的支付流程体验,支付宝 SDK 需要使用下面这些权限:
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
至此项目配置部分结束,接下来直接赋上代码:
一般订单加密,下单都是在服务端完成,所以我们首先要调用自己后台的一个接口,传递一些参数,让其携带可以调用支付宝的接口,实现统一下单功能,之后便返回一个订单数据串,对应的也就是代码中的orderInfo,移动端得到这个数据串,使用支付宝的sdk,调用支付宝程序进行支付。
/**
* 支付宝账户支付业务示例
*/
public void alipay(View v, String orderInfo) {
//orderInfo 的获取必须来源于服务端
final String authInfo = orderInfo;
final Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayActivity.this);
Map<String, String> result = alipay.payV2(authInfo, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
* docType=1) 建议商户依赖异步通知
*/
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
Log.e("resultStatus", "resultStatus-------------------" + resultStatus);
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, "9000")) {
popPayPrice.setText("¥" + registrationPrice.getText().toString().trim());
pop_toll.showAtLocation(PayActivity.this, registrationPrice, Gravity.CENTER, 0, 0);
// Intent intent = new Intent(PayActivity.this, ModelTwoRegistrationActivity.class);
// startActivity(intent);
// finish();
} else {
// 判断resultStatus 为非"9000"则代表可能支付失败
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
Toast.makeText(PayActivity.this, "支付结果确认中", Toast.LENGTH_SHORT).show();
} else if (TextUtils.equals(resultStatus, "6001")) {//6001用户取消支付
Log.e("error", "error: ========" + payResult);
Toast.makeText(PayActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
} else {
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(PayActivity.this, "支付失败" + payResult, Toast.LENGTH_SHORT).show();
Log.e("error", "error: ========" + payResult);
}
}
break;
}
default:
break;
}
}
};
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;
}
}
本文详细介绍了如何在Android项目中集成支付宝SDK,并通过示例代码展示了完整的支付流程,包括权限配置、SDK导入及支付结果处理。
1万+

被折叠的 条评论
为什么被折叠?



