前言

一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一。
继《 Android App支付系列(一):微信支付接入详细指南》之后,有部分来自郭霖大神公众号:guolin_blog 的读者,和博客读者反馈,希望写一篇支付宝app支付sdk的接入博文。
笔者在此总结了下阿里旗下支付宝Android SDK支付的接入流程,供后来者参考。

Android App支付系列(一):微信支付接入详细指南(附官方demo)
Android开发:使用EasyPay打造全能移动支付框架:集成微信,支付宝,银联支付的开源支付框架

本篇文章已授权微信公众号 guolin_blog(郭霖)独家发布.

接入流程如下:

1 签约成为支付宝商户

签约地址:https://b.alipay.com/,
只有成为签约商户的开发者才能具备集成支付宝app支付的资格。
签约资料:1)营业执照 2)APP说明文档 3)商户经营信息、商户联系人等信息
必要时还需提供APP apk以备审核。审核通过后即可进行代码集成。

审核通过后,可得到支付宝分配的商户号等信息。

2 客户端代码集成准备

2.1 导入jar包资源

目前最新版支付宝开发jar包下载地址:http://download.csdn.net/detail/xiong_it/9566771
下载后将之拷贝libs目录,Eclipse会自动添加依赖,Android Studio需在app的gradle中添加一行

compile files('libs/alipaySdk-20160223.jar')

点击右上角:Sync Now,稍等片刻

2.2 修改AndroidManifest.xml清单

声明必要Activity

<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 客户端代码集成

支付宝交互流程示意图

流程图白话版解释

  1. app携带支付信息调用支付接口请求支付宝客户端调起支付界面;
  2. 用户操作,输入密码支付,支付成功;直接返回取消支付;出现错误,支付失败;进入支付界面,但输入密码支付,支付待确认;
  3. 支付宝客户端将支付结果告诉app客户端,商户服务器通知app服务器支付结果;
  4. app客户端处理支付结果;
  5. 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() {@Overridepublic 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);}@Overridepublic 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结束。祝各位集成支付宝支付成功!

结束语

本文作者:xiong_it,本文链接:http://blog.csdn.net/xiong_it/article/details/51819559
app服务器接入注意事项:官方给出的填写rsa公钥的地址有误,无论填写什么都提示:公钥格式错误。需要移步至:支付宝公钥填写正确地址填写

udpate 20160714
近期登录开发平台,发现已改版,在原址填写rsa公钥即可.请各位知悉.

按照惯例,附上支付宝SDK接入的官方demo下载链接:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1

Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)相关推荐

  1. Android App支付:支付宝SDK接入详细指南(附官方支付demo)

    Android App支付:支付宝SDK接入详细指南(附官方支付demo) 前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多 ...

  2. 支付宝SDK接入详细指南(附官方支付demo)

    前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一.  继< Android A ...

  3. Android App支付系列(一):微信支付接入详细指南(附官方支付demo)

    写在前面 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一.梳理了下微信支付的接入,今天给大家分享下腾讯旗下的 ...

  4. android 支付宝sdk接入详解

    android 支付宝sdk接入详解 第一步 在接入支付宝sdk之前首先要进入支付宝开发者平台申请应用所需要的应用唯一标识(APPID).应用私钥(APP_PRIVATE_KEY).支付宝公钥(ALI ...

  5. Android短视频开发中的sdk接入方案

    目前短视频平台非常火,云豹科技作为优质的app源码提供商,在短视频开发领域有丰富的经验和完善的技术.下面以云豹短视频为例,概述Android短视频开发中的sdk接入方案,这里我们选择腾讯云的sdk进行 ...

  6. Android APP压力测试(二) 之Monkey信息自动收集脚本

    转载-原文地址:   http://www.cnblogs.com/findyou/p/3936063.html Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 本文重点 ...

  7. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  8. iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析

    最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面 俱到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟 ...

  9. iOS 支付宝SDK接入详解

    一,在支付宝开放平台下载支付宝SDK(https://openhome.alipay.com/platform/document.htm#down) https://doc.open.alipay.c ...

最新文章

  1. 使用sigaction处理内核信号
  2. Luogu 4438 [HNOI/AHOI2018]道路
  3. 介绍Zabbix的两种监控模式(主动模式和被动模式)
  4. python htmlparser使用问题小结
  5. [转] fastText
  6. 文巾解题 面试题 01.01. 判定字符是否唯一
  7. java面试mysql的引擎_面试官:你用过mysql哪些存储引擎,请分别展开介绍一下
  8. 高德智慧景区随身听播放器框架设计与实现
  9. 纯 as3 项目中引用 fl 包下的类
  10. 数据结构7.3_图的遍历
  11. oracle几何体数据类型,Oracle数据库之spatial操作geometry方法
  12. 【数据结构和算法笔记】数组(数组的储存方式和特殊矩阵的压缩储存)
  13. [ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 06 用户界面层...
  14. Mybatis全局配置文件Configuration.xml详解
  15. 第11章从 Web 抓取信息
  16. 街头篮球服务器ip地域位置图,浅谈《街头篮球》韩服与国服六个位置的不同之处...
  17. 科思创为全新概念车丰田LQ提供可持续解决方案
  18. (经典)tcp粘包分析
  19. 评测3款高颜值的安卓txt阅读器
  20. 程序员必备:Git入门,超详细

热门文章

  1. HTML——超文本标记语言
  2. Beam search 算法的通俗理解
  3. 网络营销推广怎么做(更全面的网络营销知识点)
  4. 类似staruml的工具有哪些?
  5. 《30天自制操作系统》第一天
  6. 3 在浏览器中查看请求报文和响应报文
  7. 简历制作(项目经验)
  8. 亚马逊发多款新品:智能眼镜来了 没摄像头支持语音
  9. 2017年应届生落户上海流程简介
  10. 关于印发《留学回国人员申办上海常住户口实施细则》的通知