Android App支付:支付宝SDK接入详细指南(附官方支付demo)
Android App支付:支付宝SDK接入详细指南(附官方支付demo)
前言
一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一。
继《 Android App支付系列(一):微信支付接入详细指南》之后,有部分来自郭霖大神公众号:guolin_blog 的读者,和博客读者反馈,希望写一篇支付宝app支付sdk的接入博文。
笔者在此总结了下阿里旗下支付宝Android SDK支付的接入流程,供后来者参考。
本篇文章已授权微信公众号 guolin_blog(郭霖)独家发布.
接入流程如下:
1 签约成为支付宝商户
2 客户端代码集成准备
<code class="language-Groovy hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">compile <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">files</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libs/alipaySdk-20160223.jar'</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
- <activity
- android:name="com.alipay.sdk.app.H5PayActivity"
- android:configChanges="orientation|keyboardHidden|navigation"
- android:exported="false"
- android:screenOrientation="behind" >
- </activity>
- <activity
- android:name="com.alipay.sdk.auth.AuthActivity"
- android:configChanges="orientation|keyboardHidden|navigation"
- android:exported="false"
- android:screenOrientation="behind" >
- </activity>
添加必要权限
- <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" />
2.3 添加支付宝混淆规则
- -libraryjars libs/alipaySDK-20160223.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 *;}
3 客户端代码集成
支付宝交互流程示意图
流程图白话版解释
- app携带支付信息调用支付接口请求支付宝客户端调起支付界面;
- 用户操作,输入密码支付,支付成功;直接返回取消支付;出现错误,支付失败;进入支付界面,但输入密码支付,支付待确认;
- 支付宝客户端将支付结果告诉app客户端,商户服务器通知app服务器支付结果;
- app客户端处理支付结果;
- app服务器处理支付结果。
支付宝的支付流程较之微信的支付流程图少了一步app服务器端订单的生成,但是在其demo代码中是推荐使用app服务器进行sign签名过程的,于是笔者索性是按照的微信支付的流程(微信支付交互流程)去集成的。
- 客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:
- params.put("money", payMoney);// 商品金额,单位:元
- params.put("goodsname", goodsName);// 商品名称
注意:支付宝支付的人民币单位和微信支付,银联支付稍有不同,需以:元 作为支付单位。其他两者支付单位为:分
其他参数均交给咱们app服务器处理即可,详细参数请点击:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1
- app服务器参考上述详细参数链接,得到sign(支付签名信息)字段并返回sign字段给手机客户端;
- 手机客户端使用sign签名信息在非UI线程调起支付客户端进行支付;
用户操作:输入密码进行支付;返回键取消支付;进入支付界面,用户未进行支付,用户返回,待支付;网络无连接支付失败等; - 客户端得到支付结果;
- 支付宝服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)
这样做的好处:签名逻辑在服务器完成,app无需暴露公钥和私钥,更安全。同时也是demo中的推荐做法。
更详细的支付宝接入交互流程解释请点击:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1
4 客户端代码示例
- new Thread() {
- @Override
- public void run() {
- super.run();
- PayTask payTask = new PayTask(mActivity);
- String result = payTask.pay(signInfo, true);
- Message message = mHandler.obtainMessage();
- message.what = PAY_RESULT;
- message.obj = result;
- mHandler.sendMessage(message);
- }
- }.start();
支付处理代码(UI线程)
- /*支付宝支付结果码*/
- private static final String PAY_OK = "9000";// 支付成功
- private static final String PAY_WAIT_CONFIRM = "8000";// 交易待确认
- private static final String PAY_NET_ERR = "6002";// 网络出错
- private static final String PAY_CANCLE = "6001";// 交易取消
- private static final String PAY_FAILED = "4000";// 交易失败
- /*内部类,处理支付宝支付结果*/
- static class AliPayHandler extends Handler {
- private SoftReference<PayActivity> activitySoftReference;// 使用软引用防止内存泄漏
- public AliPayHandler(PayActivity activity) {
- activitySoftReference = new SoftReference<PayActivity>(activity);
- }
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- PayActivity activity = activitySoftReference.get();
- AliPayResult payResult = new AliPayResult((String) msg.obj);
- String resutStatus = payResult.getResultStatus();
- Log.d(TAG, "statusCode = " + resutStatus);
- if (resutStatus.equals(PAY_OK)) {
- activity.paySuccessed();
- } else if (resutStatus.equals(PAY_CANCLE)) {
- activity.payCanceled();
- } else if (resutStatus.equals(PAY_NET_ERR)) {
- activity.payFailed(NETWORK_ERR);
- } else if (resutStatus.equals(PAY_WAIT_CONFIRM)) {
- activity.payWaitConfirm();
- } else {
- activity.payFailed(UNKNOW_ERR);
- }
- }
- }
注:AliPayResult.Java来自支付宝demo中的PayResult.Java
至此,集成支付宝SDK结束。祝各位集成支付宝支付成功!
结束语
Android App支付:支付宝SDK接入详细指南(附官方支付demo)相关推荐
- Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)
前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一. 继< Android Ap ...
- 支付宝SDK接入详细指南(附官方支付demo)
前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一. 继< Android A ...
- Android App支付系列(一):微信支付接入详细指南(附官方支付demo)
写在前面 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一.梳理了下微信支付的接入,今天给大家分享下腾讯旗下的 ...
- android 支付宝sdk接入详解
android 支付宝sdk接入详解 第一步 在接入支付宝sdk之前首先要进入支付宝开发者平台申请应用所需要的应用唯一标识(APPID).应用私钥(APP_PRIVATE_KEY).支付宝公钥(ALI ...
- Android 阿里百川cps SDK接入流程
前言 因公司业务需求,需接入阿里百川SDK和京东联盟cps相关服务,为了跳到淘宝和京东,用户购买后得到佣金.接入过程中遇到很多坑,网上相关资料也甚少,虽然东西不算多,但花了不少时间,在此记录下来,为了 ...
- 巧用第三方快速开发Android App 热门第三方SDK及框架
巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...
- APP风控SDK之Android APP防作弊SDK解决方案
推荐阅读 Android APP防作弊SDK解决方案 APP防代理抓包 APP防Fiddler抓包 APP防Burp Suite抓包 移动安全和Web安全 kali渗透测试环境搭建 Web安全|d ...
- Android app集成支付宝支付
支付宝支付 其实是比较简单的,但因为发起订单总是失败,经过各种测试.排除,最终确定是服务端返回数据有误造成的.所以严格来说支付宝文档等没有什么问题,问题在于后端程序员不认真看文档和测试. 申请id需要 ...
- Android App集成支付宝
http://blog.csdn.net/wenzhibinbin_pt/article/details/7933078 手机的在线支付,被认为是2012年最看好的功能,我个人认为这也是移动互联网较传 ...
最新文章
- mysql数据库性别男用1存储那性别女用什么呢?
- EdgeConneX公司在都柏林数据中心园区新建数据中心
- 互联网1分钟 |1227
- Laravel以及Laravel-admin的命令行使用总结
- Scala _07trait特性
- JAVA读取本地图片并展示
- android qq弹出菜单,Android开发实现qqminihd 左右滑动菜单效果
- 详细描述一下 Elasticsearch 搜索的过程?
- Spring MVC学习总结(17)——SpringMVC之接口规范与Controller规范
- CSS Sprites在IE中不起作用[8/7/6]
- Excel数据转柱状图
- Laravel 路由知识回顾记录 转自laravel 学院Laravel5.8
- 华为ensp 和secureCRT 连接
- 平头哥CH2601开发环境(CDK)搭建
- 柴静《看见》中一段深有感触的话
- 服务器打开网页图片显示红x,cacti无法显示图片,图片显红叉
- java put 请求_java发送put请求
- win10电脑自带的office突然变成英文解决办法
- pyecharts--地图
- 全球的MLOps和ML工具概览
热门文章
- 阅读DSSS.py 并修改成支持python3.6
- js开始摄像头并获取数据
- 达内linux运维课程,达内linux运维工程师
- 计算机 sci论文好发吗,哪些计算机的SCI好发? - 已回答 - 天涯问答
- InsecureRequestWarning: Unverified HTTPS request is being made
- 【华为OD机试】1049 - 挑7
- 2018 与 我的技术之路
- Consider defining a bean of type ‘java.util.List‘ in your configuration.
- php 卡号生成,生成卡号php代码
- win10+ubuntu20.04双系统引导修复(最简单的方法,小白进)