上次集成支付宝支付已经很久了,今天写东西用到了支付宝支付,就大致写一下流程;

去蚂蚁金服下载最新版的Android&IOS端SDK

全部文档 -- 资源下载 -- App支付客户端

下载后解压,分为Android和IOS端,里面有demo和SDK,使用Android端

把SDK中的jar导入到工程中:

build.gradle中添加

  1. compile files('libs/alipaySdk-20170922.jar')

AndroidManifest.xml中添加:

权限:

  1. <!-- 允许读出外部存储器 -->
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  3. <!-- 允许使用相机 -->
  4. <uses-permission android:name="android.permission.CAMERA" />
  5. <!-- 允许程序打开网络套接字 -->
  6. <uses-permission android:name="android.permission.INTERNET" />
  7. <!-- 允许程序设置内置sd卡的写权限 -->
  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  9. <!-- 允许程序获取网络状态 -->
  10. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  11. <!-- 允许程序访问WiFi网络信息 -->
  12. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  13. <!-- 允许程序读写手机状态和身份 -->
  14. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  15. <!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 -->
  16. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

配置:

  1. <activity
  2. android:name="com.alipay.sdk.app.H5PayActivity"
  3. android:configChanges="orientation|keyboardHidden|navigation|screenSize"
  4. android:exported="false"
  5. android:screenOrientation="behind"
  6. android:windowSoftInputMode="adjustResize|stateHidden" >
  7. </activity>
  8. <activity
  9. android:name="com.alipay.sdk.app.H5AuthActivity"
  10. android:configChanges="orientation|keyboardHidden|navigation"
  11. android:exported="false"
  12. android:screenOrientation="behind"
  13. android:windowSoftInputMode="adjustResize|stateHidden" >
  14. </activity>

现在需要的文件已经集成,拿着你的生成的订单号去请求服务器(我们的是这样的),服务器返回给你支付宝支付的orderInfo;

使用这个orderInfo调起支付:

  1. private final int SDK_PAY_FLAG = 1;
  2. private final int SDK_AUTH_FLAG = 2;
  1. findViewById(R.id.tvPay).setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View view) {
  4. final String orderInfo = "服务器返回的OrderInfo"; // 订单信息
  5. Runnable payRunnable = new Runnable() {
  6. @Override
  7. public void run() {
  8. PayTask alipay = new PayTask(GoodsDatailsActivity.this);
  9. Map<String, String> result = alipay.payV2(orderInfo,true);
  10.  
  11. Message msg = new Message();
  12. msg.what = SDK_PAY_FLAG;
  13. msg.obj = result;
  14. mHandler.sendMessage(msg);
  15. }
  16. };
  17. // 必须异步调用
  18. Thread payThread = new Thread(payRunnable);
  19. payThread.start();
  20. }
  21. });

接受返回信息,这个以服务器的为准,前端只是展示:

  1.  
  1. private static Handler mHandler = new Handler() {
  2. public void handleMessage(Message msg) {
  3. switch (msg.what) {
  4. case SDK_PAY_FLAG: {
  5. @SuppressWarnings("unchecked")
  6. PayResult payResult = new PayResult((Map<String, String>) msg.obj);
  7. String resultInfo = payResult.getResult();// 同步返回需要验证的信息
  8. String resultStatus = payResult.getResultStatus();
  9. LogUtils.i(payResult.getMemo()+"______"+payResult.getResult()+"_____"+payResult.getResultStatus());
  10.  
  11. // 判断resultStatus 为9000则代表支付成功
  12. if (TextUtils.equals(resultStatus, "9000")) {
  13. // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
  14. Toast.makeText(context, "支付成功", Toast.LENGTH_SHORT).show();
  15. Intent BuySucceed = new Intent(context ,Order_BuySucceed_Activity.class);
  16. context.startActivity(BuySucceed);
  17. } else {
  18. // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
  19. Toast.makeText(context, "支付失败", Toast.LENGTH_SHORT).show();
  20. }
  21. break;
  22. }
  23. case SDK_AUTH_FLAG:
  24. break;
  25. default:
  26. break;
  27. }
  28. }
  29. };

OK完成了;其中PayResult这个类,用支付宝的那个老是报错;

  1. public class PayResult {
  2. private String resultStatus;
  3. private String result;
  4. private String memo;
  5.  
  6. public PayResult(Map<String, String> rawResult) {
  7. if (rawResult == null) {
  8. return;
  9. }
  10.  
  11. for (String key : rawResult.keySet()) {
  12. if (TextUtils.equals(key, "resultStatus")) {
  13. resultStatus = rawResult.get(key);
  14. } else if (TextUtils.equals(key, "result")) {
  15. result = rawResult.get(key);
  16. } else if (TextUtils.equals(key, "memo")) {
  17. memo = rawResult.get(key);
  18. }
  19. }
  20. }
  21.  
  22. public PayResult(String obj) {
  23.  
  24. }
  25.  
  26. @Override
  27. public String toString() {
  28. return "resultStatus={" + resultStatus + "};memo={" + memo
  29. + "};result={" + result + "}";
  30. }
  31.  
  32. /**
  33. * @return the resultStatus
  34. */
  35. public String getResultStatus() {
  36. return resultStatus;
  37. }
  38.  
  39. /**
  40. * @return the memo
  41. */
  42. public String getMemo() {
  43. return memo;
  44. }
  45.  
  46. /**
  47. * @return the result
  48. */
  49. public String getResult() {
  50. return result;
  51. }
  52. }

Android最新版支付宝支付集成的更多相关文章

  1. 商家 APP 如何接入新版支付宝支付,老版本商家如何升级

    代码地址如下:http://www.demodashi.com/demo/14006.html 前言 支付宝移动支付2.0版本对比1.0版本做了较大更新,新申请的商家都需要采用最新2.0版本 SDK ...

  2. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  3. iOS 支付宝支付集成获取私钥

    http://doc.open.alipay.com/doc2/apiList?docType=4 登录到支付宝开放平台,下载相关支付宝支付的demo.解压出来有3个文件夹.(服务端demo,客户端 ...

  4. ios 支付宝支付集成

    支付宝支付: 下载官方demo,把需要的framwork下载下来,在自己的工程中,新建文件夹,然后全部塞进去,到build phases中把需要的全部导入,其中xcode7以上需要多导入两个.a文件, ...

  5. django支付宝支付集成

    概要 本文是关于django集成支付宝[电脑网站支付]功能的过程记录. 功能逻辑主要分为两块: 用户下单跳转至支付宝支付界面 支付成功的回调验证 本文用到的alipay-sdk是基于阿里开发文档htt ...

  6. 支付宝支付集成,上传RSA公钥一直显示格式错误

    碰到同样的问题,支付宝的问题,已有解决方案:https://openhome.alipay.com/platform/keyManage.htm?keyType=partner

  7. 支付宝支付集成过程中如何生成商户订单号(out_trade_no)

    out_trade_no是指商户网站唯一订单号,在商户端唯一,每个商户订单号会对应一个支付宝订单号 ,此订单号由珊瑚自己生成,商户订单号要求64个字符以内.可包含字母.数字.下划线:需保证在商户端不重 ...

  8. 支付宝支付集成中:refund_fastpay_by_platform_nopwd接口服务器通知验签不通过

    在做p2p配资平台,也就是公司的项目,遇到了一个问题:refund_fastpay_by_platform_nopwd接口服务器通知验签不通过 下面是实录: 通知服务器的POST过来的数据: 1.si ...

  9. Android开发支付集成——支付宝集成

    微信支付传送门:https://www.cnblogs.com/dingxiansen/p/9209159.html 一.支付宝支付 1. 支付宝支付流程图 2. 集成前准备 去蚂蚁金服注册应用获取a ...

随机推荐

  1. 我发起了一个 .Net 平台上的 NewSql 数据库 BabanaDB

    发起这个项目的起因, 是偶然看到一个网友发的 MongoDB 的 新闻, 我想, 像  MongoDB  这样的 非关系数据库 ,随时 都可以写 很多个, 真正 难写 的 是  关系数据库, 非关系数 ...

  2. Bundle类解读

    1.Bundle bundle = Platform.getBundle("org.eclipse.ui.views"); Platform是eclipse平台运行时的核心类,它是 ...

  3. Node。js 访问gmail

    参考: https://developers.google.com/gmail/api/quickstart/nodejs step 1,在google网站上打开gmail api,下载JSOn st ...

  4. oracle之 单实例监听修改端口

    Oracle 单一主机多个实例多个监听器配置要点   1. 一台服务器主机, 有多个实例, 如: TSDB/ORCL; 又需要配置多个监听器 2. 需要指定不同的LISTENER端口   3.pmon ...

  5. Java的date和string互转

    https://blog.csdn.net/angus_17/article/details/7656631

  6. dnstop DNS分析工具

    http://dns.measurement-factory.com/tools/dnstop/src/ https://github.com/measurement-factory/dnstop h ...

  7. 导入导出Excel文件

    搭建环境 先新建web project ,然后Add Struts Capabilties: 下载导入导出Excel所需的jar包: poi-3.8-20120326.jar包  :  http:// ...

  8. Spring Cloud(Dalston.SR5)--Eureka 服务消费

    服务被注册.发布到 Eureka 服务器后,需要有程序去发现他,并且进行调用,称为服务消费,一个服务可能会部署多个实例,调用过程可能涉及负载均衡.服务器查找等问题,这些问题 Netflix 项目已经帮 ...

  9. ubuntu如何为获得root权限

    在终端中输入:sudo passwd rootEnter new UNIX password: (在这输入你的密码)Retype new UNIX password: (确定你输入的密码)passwd ...

  10. GetClass与RegisterClass的应用一例

    利用GetClass与RegisterClass可以实现根据字符串来实例化具体的子类,这对于某些需要动态配置程序的场合是很有用的.其他的应用如子窗体切换,算法替换等都能得到应用. unit Examp ...