此项目已开源 赶快来围观 Start支持下吧
【客户端开源地址-JPay】【服务端端开源地址-在com.javen.alipay
包名下】

上一篇详细介绍了微信APP支付 点击这里

此篇文章来详细介绍下支付宝APP支付

目录
1、支付宝与微信对比(申请、费率、结算周期)
2、支付宝上线应用
3、支付宝App支付Android集成流程详解
4、服务端实现
5、客户端实现
6、常见错误解决方案(ALI40247、AL38173)

1、支付宝与微信对比

申请:【微信开发平台】注册的邮箱不能与腾讯其他产品同号,需要开发者资质认证(需要¥300,而且支付商户与公众号不公用)而支付宝只需要企业实名认证,其他质料类似(营业执照、组织机构代码(现在都三证合一了))。

费率:
【微信签约汇率参考质料】【支付宝签约汇率参考质料】

结算周期:
微信结算周期: 话费通讯、财经资讯、股票软件类、网络虚拟服务以及互联网相关行业 T+7 众筹 T+3 其他T+1,结算款项自动提现到商户的结算账户,一般从结算日起3个工作日到账(具体到账时间视不同银行到账情况而定)

支付宝结算周期:及时到支付宝账号

2、支付宝上线应用

1、注册账号并实名认证

注册账号了没有实名认证进入开发平台的管理中心会提示如下图


【账户认证-商家认证流程介绍】

2、创建应用开通支付并上线

官方文档有详细的介绍-创建应用、配置应用、上线应用

【资源下载:App支付DEMO&SDK、生成与配置密钥】

注意签名工具目录不能包含中文

这里上传的是rsa_public_key.pem Java版签名使用的密钥是rsa_private_key_pkcs8.pem

3、支付宝App支付Android集成流程详解

官方文档 点击这里

1、导入支付宝SDK 其中SDK在图资源下载汇总WS.APP_PAY_SDK_BASE_20.zip

2、修改Manifest

在商户应用工程的AndroidManifest.xml文件里面添加声明:

<activityandroid:name="com.alipay.sdk.app.H5PayActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind" >
</activity>
<activityandroid:name="com.alipay.sdk.auth.AuthActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind" ></activity>

3、权限声明

<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" />

4、如需混洗、添加混淆规则

在商户应用工程的proguard-project.txt里添加以下相关规则:
alipaySDK-xxxxx.jar根据下载的做响应的修改

-libraryjars libs/alipaySDK-xxxxx.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 *;}

5、支付接口调用

获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行
具体实现参考客户端实现,调用支付需要使用到orderInfo 具体实现参考服务端实现

6、支付结果获取和处理

调用pay方法支付后,将通过2种途径获得支付结果:

1、同步返回 商户应用客户端通过当前调用支付的Activity的Handler对象,通过它的回调函数获取支付结果。
2、异步通知 商户需要提供一个http协议的接口,包含在请求支付的入参中,其key对应notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url传输数据。

4、服务端实现

代码来自Demo 并做简单的封装

设置支付宝业务参数

核心实现代码如下

/*** App支付*/public void appPay(){String orderInfo;try {String body="我是测试数据";String passback_params="123";String subject="1";String total_amount="0.01";String notify_url="http://javen.ittun.com/alipay/pay_notify";String appId;String rsa_private;if (isDebug) {appId=prop.get("test_appId").trim();rsa_private=prop.get("test_rsa_private").trim();
System.out.println("test。。。。");}else {appId=prop.get("appId").trim();rsa_private=prop.get("rsa_private").trim();}
System.out.println("appId:"+appId);
System.out.println("rsa_private:"+rsa_private);         BizContent content = new BizContent();content.setBody(body);content.setOut_trade_no(OrderInfoUtil2_0.getOutTradeNo());;content.setPassback_params(passback_params);content.setSubject(subject);content.setTotal_amount(total_amount);content.setProduct_code("QUICK_MSECURITY_PAY");Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(appId,notify_url,content);String orderParam = OrderInfoUtil2_0.buildOrderParam(params);String sign = OrderInfoUtil2_0.getSign(params, rsa_private);orderInfo = orderParam + "&" + sign;log.info("orderInfo>"+orderInfo);result.success(orderInfo);renderJson(result);} catch (Exception e) {e.printStackTrace();result.addError("system error");}}

具体实现参考【开源项目】

5、客户端实现

客户端请求此action返回orderInfo,默认的访问地址为http://[域名或者IP]:端口号/[项目名称]/alipay/appPay

成功将返回:

{"code": 0,"data": "charset=utf-8&biz_content=%7B%22out_trade_no%22%3A%22120822453414812%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22passback_params%22%3A%22123%22%7D&method=alipay.trade.app.pay&format=json&notify_url=http%3A%2F%2Fjaven.ittun.com%2Falipay%2Fpay_notify&app_id=2016102000727659&sign_type=RSA&version=1.0&timestamp=2016-12-08+22%3A45%3A34&sign=m6fpNI58jkOIHROtm8Q2V1Ei7bxXc14JHtJEeqGM0B8dWlq3d%2FfAqpoQTZgeBb%2FVK%2B%2BydOJzVvSWc89dBxhYUq72KOeUwHiKlRJBFMnEMAZbJlRxqu9%2BRX2q7HSRmA6WRg75O68HZhkIhtO3bSNx3s710tMHmQCN230JoVWiwHw%3D","message": null
}
/** * 获取支付宝App支付订单信息 * @return */ public String getAliPayOrderInfo(Order order){String result=HttpKit.get(Constants.ALIPAY_URL);return result;} 

异步获取orderInfo

public class AliPay extends AsyncTask<Object, Integer, String> {private Activity mContext;public AliPay(Activity context) {this.mContext = context;}@Overrideprotected String doInBackground(Object... params) {return  IPayLogic.getIntance(mContext).getAliPayOrderInfo((Order)params[0]);}@Overrideprotected void onPostExecute(String result) {try {if (result!=null) {System.out.println("AliPay result>"+result);JSONObject data = new JSONObject(result);String message = data.getString("message");int code = data.getInt("code");if(code == 0){String orderInfo = data.getString("data");Toast.makeText(mContext, "正在调起支付", Toast.LENGTH_SHORT).show();IPayLogic.getIntance(mContext).startAliPay(orderInfo);}else{Log.d("PAY_GET", "返回错误"+message);
//                  Toast.makeText(mContext, "返回错误:"+message, Toast.LENGTH_SHORT).show();}}else {System.out.println("get  AliPay exception, is null");}} catch (Exception e) {Log.e("PAY_GET", "异常:"+e.getMessage());Toast.makeText(mContext, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();}super.onPostExecute(result);}}

支付接口调用

public void startAliPay(final String orderInfo){Runnable payRunnable = new Runnable() {@Override public void run() { PayTask alipay = new PayTask(mContext);Map<String, String> result = alipay.payV2(orderInfo, true);Message msg = new Message();msg.obj = result;mHandler.sendMessage(msg);} }; Thread payThread = new Thread(payRunnable);payThread.start();} 

客户端通过回调函数获取支付结果

private Handler mHandler = new Handler(Looper.getMainLooper()) {@SuppressWarnings("unchecked") public void handleMessage(Message msg) { PayResult payResult = new PayResult((Map<String, String>) msg.obj); System.out.println("alipay call "+payResult.toString()); String resultStatus = payResult.getResultStatus(); String memo = payResult.getMemo(); if (Constants.payListener !=null){ //返回状态以及详细的描述参考 // https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.xN1NnL&treeId=204&articleId=105302&docType=1 Constants.payListener.onPay(-2,resultStatus,memo); } } }; 

客户端具体使用方法

 public void testAliPay(View view){Toast.makeText(this, "支付宝测试", Toast.LENGTH_SHORT).show();Order order = new Order();order.setBody("会员充值中心");order.setParaTradeNo(System.currentTimeMillis()+"");order.setTotalFee(20);order.setAttach("json");//附加参数order.setNofityUrl("http://www.xxxx.com");//支付成功服务端回调通知的地址IPay.getIntance(MainActivity.this).toPay(IPay.PayMode.ALIPAY,order,new IPay.IPayListener() {@Override public void onPay(int wxcode, String alicode, String message) {System.out.println("回调过来的状态》"+alicode+" message>"+((message!=null && message.isEmpty())?"":message));Toast.makeText(MainActivity.this, "回调过来的状态》" + alicode, Toast.LENGTH_SHORT).show();} }); } 

6、常见错误解决方案

APP支付报错ALI40247处理方案

ALI40247的错误可以查看论坛提供的这个解决方案

AL38173的错误一般是参数问题造成的,建议检查请求参数,对照文档查看,比如:参数少了、多了、乱码、名称不对,还有必传参数是否都请求提交给支付宝了等等.

如果在网上查阅质料还未解决,可以寻求阿里的在线支持【支持中心】

此项目已开源 赶快来围观 Start支持下吧

【客户端开源地址-JPay】【服务端端开源地址-在com.javen.alipay包名下】

推荐阅读
Android版-微信APP支付
极速开发微信公众号之微信买单
极速开发微信公众号之公众号支付
极速开发微信公众号之扫码支付
极速开发微信公众号之刷卡支付
极速开发微信公众号之现金红包

记录学习的点滴,以此勉励不断奋斗的自己✌️✌️✌️ 如果对你有帮助记得点喜欢告诉我哈

Android版-支付宝APP支付相关推荐

  1. Android版-微信APP支付

    首发地址: Android版-微信APP支付 欢迎留言.转发 微信极速开发系列文章(微信支付.授权获取用户信息等):点击这里 目录 1.注册账号.开发者认证 2.添加应用 3.申请微信支付 4.技术开 ...

  2. 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

    java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写      一.流程步骤          1.执行流程            当手机端app(就是你公司开发的app) ...

  3. 支付宝app支付功能-服务端的实现-python3版

    支付宝app支付功能-服务端的实现-python3版 一:需求说明 二:支付宝app支付处理流程 三:所需依赖 3.1 依赖库 3.2 支付配置 3.2.1 沙箱环境配置 3.2.2 正式环境配置 四 ...

  4. android通过webview调起支付宝app支付

    android通过webview调起支付宝app支付 webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这 ...

  5. 支付宝APP支付(java后台版)

    本实例是基于springBoot框架编写 一.流程步骤          1.执行流程            当手机端app在支付页面时,调起服务端创建订单(自己公司业务接口)接口,后台把需要调起支付 ...

  6. java 支付宝服务端,支付宝app支付服务端的实现-Java版

    前言 最近在工作中需要使用支付宝app支付,在初次使用过程中也不可避免的出现了一些问题,那么本次随笔主要是概述支付宝app支付服务端的整个实现过程以及就服务端出现的一些问题做一些总结. 1.准备工作 ...

  7. 支付宝 app支付 沙盘使用

    支付宝 app支付 沙盘使用 文档说明 沙箱测试: App支付沙箱接入注意点 1.app支付支持沙箱接入:在沙箱调通接口后,必须在线上进行测试与验收,所有返回码及业务逻辑以线上为准: 2.app支付只 ...

  8. Android接入支付宝实现支付功能

    Android接入支付宝实现支付功能 我本来是想直接讲Android支付这一块的,包括支付宝,微信,其他第三方整合支付等,但是微信开放平台他对我的账号做了限制,所有我今天就先把重心放在支付宝的支付上, ...

  9. aliPay支付宝APP支付操作流程

    [TOC] aliPay支付宝APP支付操作流程 1 注册帐号&官方文档解析 在支付宝商家中心注册帐号,已经拥有支付宝帐号的用户,直接登录商家中心即可(同一个支付宝帐号,可以既是买家也是商家) ...

  10. java app支付_【支付宝支付】Java实现支付宝APP支付流程

    前言 官方文档 开放能力文档: APP支付接口API 开发准备工作 后端代码实现 参数配置 application.yml # 支付宝相关 ALIPAY: # 应用ID APP_ID: # 应用私钥 ...

最新文章

  1. linux定时任务简记
  2. 新浪微博的“独立”与互联网社区的“群居”
  3. 逆水寒服务器新消息,游戏新消息:逆水寒太火爆服务器爆满王思聪都挤不进去...
  4. 用React的方式思考
  5. 大话数据结构:拓扑排序
  6. 五、性能监视(2)Windows性能日志
  7. Python3 爬虫学习笔记 C18【爬虫框架 pyspider — 深入理解】
  8. NILMTK——经典数据集REDD介绍和使用
  9. Mybatis MySQL批量更新
  10. 【POJ3784】Running Median(中位数,对顶堆)
  11. map.setTerrain is not a function
  12. 公安交管网服务器维护,交管网总是维护
  13. 【golang】kafka
  14. 跨境电商如何利用Quora帮你引上万流量
  15. 怎么使用JavaScript进行进制…
  16. Element修改图标大小,设置颜色
  17. chrome浏览器打开网页排版错乱
  18. 知识图谱实体预测任务如何计算filtered MRR
  19. 陈省身文集40——21世纪的数学
  20. 转:各种文本格式转换的网站

热门文章

  1. 编译Libgdiplus遇到的问题
  2. nodejs首个框架开发(先只发个连接,有空再写)
  3. ASPNET--Basic Info
  4. SQL Server SQL语句调优技巧
  5. Delphi的命令行编译命令
  6. [題解]luogu_P2055假期的宿舍(二分圖最大匹配)
  7. Python之Numpy的基础及进阶函数(图文)
  8. modbus学习笔记——帧
  9. 相同源代码的html文件在本地和服务器端被浏览器请求时,显示的效果不一样!!!...
  10. k8s Custom Resource