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

笔者在此总结了下阿里旗下支付宝Android SDK支付的接入流程,供后来者参考。

接入流程如下:

1 签约成为支付宝商户

签约地址:https://b.alipay.com/,

只有成为签约商户的开发者才能具备集成支付宝app支付的资格。

签约资料:1)营业执照 2)APP说明文档 3)商户经营信息、商户联系人等信息

必要时还需提供APP apk以备审核。审核通过后即可进行代码集成。

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

2 客户端代码集成准备

2.1 导入jar包资源

目前最新版支付宝开发jar包下载地址:http://xiazai.jb51.net/201611/yuanma/alipaySdk_jb51.jar

下载后将之拷贝libs目录,Eclipse会自动添加依赖,Android Studio需在app的gradle中添加一行

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

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

2.2 修改AndroidManifest.xml清单

声明必要Activity

android:name="com.alipay.sdk.app.H5PayActivity"

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind" >

android:name="com.alipay.sdk.auth.AuthActivity"

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind" >

添加必要权限

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() {

@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 activitySoftReference;// 使用软引用防止内存泄漏

public AliPayHandler(PayActivity activity) {

activitySoftReference = new SoftReference(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结束。祝各位集成支付宝支付成功!

结束语

app服务器接入注意事项:官方给出的填写rsa公钥的地址有误,无论填写什么都提示:公钥格式错误。需要移步至:支付宝公钥填写正确地址填写

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

本文地址: http://www.cppcns.com/ruanjian/android/171409.html

app支付宝接入流程图_Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)...相关推荐

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

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

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

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

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

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

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

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

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

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

  6. Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件

    一.前言 接入Android SDK正式告一段落,在这段时间里面,依次接入了华为.应用宝.小米.360等等大大小小十来个SDK,也算对Unity接入渠道SDK有了较为全面的理解,对各个渠道的坑也算深有 ...

  7. 阵列信号DOA估计系列(二).导向矢量与空间FFT(附代码)

    阵列信号DOA估计系列(二).导向矢量 在DOA估计里面,经常会看到导向矢量这个名词,也有的地方叫方向矢量,方向矩阵,基本上都是array steering vector 的翻译. 本文首先对均匀线阵 ...

  8. app闪退后重启_Android app 如何实现崩溃后自动重启

    Android app  如何实现崩溃后自动重启 由于有很多场景需要让自己的app一直保持运行状态,比如客户的launcher,或者定制app. 都希望在自己的app崩溃之后还可以自重启. 对于这样子 ...

  9. 微信支付系列(二)之订单的创建

    一.创建订单需获取商品id和用户id 1.生成一个订单号,订单号要唯一 2.商品信息和用户信息需要远程RPC调用 3.将订单保存到数据库中 4.返回订单号给前端 二.具体代码实现 1.用户id可以根据 ...

  10. arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)

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

最新文章

  1. File Filter用法
  2. c++ fhog学习资料整理
  3. 牛客小白月赛5 E 面积 计算三角形面积模板 波尔约-格维也纳定理 匹克公式
  4. golang ffmpeg 做网络直播
  5. MySQL查询之聚合查询
  6. python邮件图片加密软件_用Python发一封图文并茂的邮件
  7. C++ 面向对象 一
  8. 机器人图规划算法研究现状简述
  9. python改变图片像素值大小_Python之修改图片像素值的方法
  10. c语言文学研究助手报告,文学研究助手数据结构报告
  11. 计算机前端开发论文参考文献,web前端论文参考文献.doc
  12. 《黑客秘笈——渗透测试实用指南(第2版)》—第1章1.5节构建渗透测试环境...
  13. 图的邻接(链)表表示法 Graph adjacency list representation
  14. 将姓名转为拼音,首字母大写
  15. 《高性能iOS 应用开发》之降低你 APP 的电量消耗
  16. 华硕Android原始密码,华硕路由器默认密码是多少?ASUS路由器初始密码介绍
  17. nginx与react配合二级路由
  18. explain 解析
  19. 【新年计划】过去的2021,2022年的期许
  20. Sublime Text 3 写js智能提示插件

热门文章

  1. Windows 7设备管理器有未知设备怎么办?
  2. CCF CSP 中国计算机学会-CCF计算机软件能力认证(计算机水平测试)-简介-详情
  3. ckfinder java 配置_JAVA里使用CKEditor和CKFinder的配置
  4. vue 渲染函数处理slot_Vue渲染函数详解
  5. linux测试上下行最大网速和实时网速
  6. Asp.Net 密码加密技术
  7. ceph rbd mysql_ceph-rbd使用
  8. 【Spring】IoC,DI,两种代理方式,AOP定义和使用
  9. UNIX网络编程---守护进程和inetd超级服务器(十三)
  10. 11月总结#nobody