100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android集成支付宝支付SDK 实现支付功能

Android集成支付宝支付SDK 实现支付功能

时间:2021-07-16 09:44:16

相关推荐

Android集成支付宝支付SDK 实现支付功能

官方集成文档地址:https://docs./204/105296/

一、导入支付宝SDK

1.将alipaySdk-15.6.5-0718211159.aar包放在您的应用工程的libs目录下(图片中文件名仅做示例,请以实际 SDK 文件名为准):arr文件下载地址:/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-1023110917', ext: 'aar')// ... 其他依赖项}

至此,支付宝 SDK 开发资源导入完成。

运行权限

为正常完成良好的支付流程体验,支付宝 SDK 需要使用下面这些权限:

android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_WIFI_STATE

至此项目配置部分结束,接下来直接赋上代码:

一般订单加密,下单都是在服务端完成,所以我们首先要调用自己后台的一个接口,传递一些参数,让其携带可以调用支付宝的接口,实现统一下单功能,之后便返回一个订单数据串,对应的也就是代码中的orderInfo,移动端得到这个数据串,使用支付宝的sdk,调用支付宝程序进行支付。

/*** 支付宝账户支付业务示例*/public void alipay(View v, String orderInfo) {//orderInfo 的获取必须来源于服务端final String authInfo = orderInfo;final Runnable payRunnable = new Runnable() {@Overridepublic 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./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);}}}@Overridepublic 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;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。