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

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

笔者在此总结了下阿里旗下支付宝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

<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() { @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结束。祝各位集成支付宝支付成功!

结束语

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

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

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

时间: 2024-10-18 14:50:44

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

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

写在前面 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一.梳理了下微信支付的接入,今天给大家分享下腾讯旗下的微信支付SDK的接入流程. 接入流程 1.申请开发者资质 地址:https://open.weixin.qq.com/ 使用公司管理者/高层帐号登录微信开放平台,进入"账号中心",进行开发者资质认证,需要填写公司资料,包括但不限于,公司注册号,公司营业执照,公司对外办公电话,公司对公银行卡

一看就懂的Android APP开发入门教程

  这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣.于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出

Android app第三方支付宝支付接入教程

支付宝的接入相对比较简单,看看支付宝官网的文档基本都能搞定,但是切记一点让你们的后台也要搞清楚支付宝的流程,重中之重. 1.注意事项 开发前一定要阅读支付宝官方文档 强烈建议签名等处理在后台处理,我这个是测试是在自己本地写的,不要吐槽 想获取支付宝合作商户ID,及支付宝公钥请点击支付宝链接,生成密钥及PKCS8转码工具在文档中 添加Android.permission.INTERNET权限和android.permission.ACCESS_NETWORK_STATE权限 要导入支付宝的包 2.

Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSDK分享组件的,奈何需要去注册各平台的账号,还要审核,有些审核还挺久,就没办法,改为写这个Bmob了,相信大家对Bmob都是挺期待的吧,因为他作为Android后端的实现很好的支持,国内很多软件都在使用它,他的功能也是特别神奇,这里就不一一细说了,我们用实际的例子来见证他的神奇 官网:http://w

利用android客户端支付宝sdk的jar包和demo的几个处理支付的类再做一个jar包

问题描述 利用android客户端支付宝sdk的jar包和demo的几个处理支付的类再做一个jar包 利用android客户端支付宝sdk的jar包和demo的几个处理支付的类(不包含activity)再做一个jar包,其它项目中只要导入该包和传入几个参数就可以使用支付宝支付功能 解决方案 将项目导出作为一个jar供他人引用不就好了,或者使用webservice

Android后台杀死系列之二:ActivityManagerService与App现场恢复机制

本篇是Android后台杀死系列的第二篇,主要讲解ActivityMangerService是如何恢复被后台杀死的进程的(基于4.3 ),在开篇FragmentActivity及PhoneWindow后台杀死处理机制 中,简述了后台杀死所引起的一些常见问题,还有Android系统控件对后台杀死所做的一些兼容,以及onSaveInstance跟onRestoreInstance的作用于执行时机,最后说了如何应对后台杀死,但是对于被后台杀死的进程如何恢复的并没有讲解,本篇不涉及后台杀死,比如Lowm

大叔也说Xamarin~Android篇~支付宝SDK的集成

原文:大叔也说Xamarin~Android篇~支付宝SDK的集成 首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本着贡献的精神继续撰写程序人生!希望各位继续支持大叔! 一 首先下面支付宝android的sdk,也就是手机端的sdk,一般也叫快捷支付 https://doc.open.alipay.com/doc2/detail?treeId=54&art

巧用第三方快速开发Android App 热门第三方SDK及框架

巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App 热门第三方SDK及框架 这这篇博客也是专门来聊聊这门课程有什么不一样,首先,这门课程是比较针对于快速学习,快速上手的同学的,所以这是面向参加工作或者准备参加工作的同学所迫切需要的,因为只有你掌握了这些,对于你实际开发中才是有帮助的,当然,你要是还在校,那也没关系的,学习本身就是一法通万法,但是你们却

android app使用微信sdk能不能调用微信浏览器?

问题描述 android app使用微信sdk能不能调用微信浏览器? 用webview或者用别的浏览器访问微信平台开发的项目时,不能正常访问,会提示必须用微信访问,被转到一个指定页面. 使用微信sdk能调用微信浏览器去打开我要访问的地址么?或者还有什么办法能够用webview或者手机浏览器去访问么?之前试过了修改user-agent去访问,没有用 解决方案 可以调用webview,微信的浏览器不行. 解决方案二: 可是webview不能访问啊,被拒绝了 解决方案三: 解决了没有??????