相比之前的支付宝sdk,新版的sdk不再判断App客户端是否安装了支付宝客户端。如果用户安装了支付宝,将跳到支付宝客户端支付;如果用户没有安装支付宝客户端,将跳到 sdk中的H5PayActivity 中进行支付。xml中需要对这个H5Pay进行声明。

下文为对支付宝demo的使用整理。。

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

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind"

android:windowSoftInputMode="adjustResize|stateHidden" />

有的demo中自己搞了一个H5PayActivity,完全没必要,只会误导。。。

一、支付流程

拼装支付宝认同的订单信息--orderInfo

对订单做RSA 签名---sign

对签名后的订单信息做URL编码---sign

拼装完整的订单信息,即orderInfo+sign+签名方式(固定)

进行支付(异步任务)

二、支付前准备

PARTNER 商户PID

SELLER 商户收款方账号

RSA_PRIVATE 商户私钥,pkcs8 格式

alipay_notify 支付宝异步通知地址,同自家服务端商量

支付宝sdk

三、开始支付

拼装订单信息orderInfo

//s为商品的价格,单位为元!!!!

String orderInfo = getOrderInfo("商品名", "商品描述", “商品价格,s);

/**

* create the order info. 创建订单信息

*/

private String getOrderInfo(String subject, String body, String price) {

// 签约合作者身份ID

String orderInfo = "partner=" + "\"" + Constans.PARTNER + "\"";

// 签约卖家支付宝账号

orderInfo += "&seller_id=" + "\"" + Constans.SELLER + "\"";

// 商户网站唯一订单号---我们是由服务器返回的

orderInfo += "&out_trade_no=" + "\"" + out_Trade + "\"";

// 商品名称

orderInfo += "&subject=" + "\"" + subject + "\"";

// 商品详情

orderInfo += "&body=" + "\"" + body + "\"";

// 商品金额

orderInfo += "&total_fee=" + "\"" + price + "\"";

// 服务器异步通知页面路径

orderInfo += "&notify_url=" + "\"" + Constans.alipay_notify + "\"";

// 服务接口名称, 固定值

orderInfo += "&service=\"mobile.securitypay.pay\"";

// 支付类型, 固定值

orderInfo += "&payment_type=\"1\"";

// 参数编码, 固定值

orderInfo += "&_input_charset=\"utf-8\"";

// 设置未付款交易的超时时间

// 默认30分钟,一旦超时,该笔交易就会自动被关闭。

// 取值范围:1m~15d。

// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。

// 该参数数值不接受小数点,如1.5h,可转换为90m。

orderInfo += "&it_b_pay=\"30m\"";

// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付

//orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空

orderInfo += "&return_url=\"m.alipay.com\"";

return orderInfo; }

对订单信息做RSA 签名

String sign = sign(orderInfo);

//SignUtils为支付宝demo中的类,SignUtils中用到的Base64也是demo中的类,复制即可

private String sign(String content) {

return SignUtils.sign(content, Constans.RSA_PRIVATE);

}

对签名后的订单信息做URL编码

try {

/**

* 仅需对sign 做URL编码

*/

sign = URLEncoder.encode(sign, "UTF-8");}

catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

拼装支付宝认同的订单信息

final String payInfo = orderInfo + "&sign="" + sign + ""&" + getSignType();

/**

* get the sign type we use. 获取签名方式

*/

private String getSignType() {

return "sign_type=\"RSA\"";

}

调用支付宝sdk开始支付(异步任务)

Runnable payRunnable = new Runnable() {

@Override

public void run() {

// 构造PayTask 对象

PayTask alipay = new PayTask(RechargeActivity.this);

// 调用支付接口,获取支付结果

String result = alipay.pay(payInfo, true);

Message msg = new Message();

msg.what = SDK_PAY_FLAG;

msg.obj = result;

mHandler.sendMessage(msg);

} };

// 必须异步调用

Thread payThread = new Thread(payRunnable);

payThread.start();}

Handler中对支付结果进行获取

@SuppressLint("HandlerLeak")

private Handler mHandler = new Handler() {

@SuppressWarnings("unused")

public void handleMessage(Message msg) {

switch (msg.what) {

case SDK_PAY_FLAG: {

PayResult payResult = new PayResult((String) msg.obj);

/**

* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/

* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&

* docType=1) 建议商户依赖异步通知

*/

//PayResult为demo中的类,复制

String resultInfo = payResult.getResult();// 同步返回需要验证的信息

String resultStatus = payResult.getResultStatus();

// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档

if (TextUtils.equals(resultStatus, "9000")) {

Toast.makeText(RechargeActivity.this, "支付成功", Toast.LENGTH_SHORT).show();

finish();

} else {

// 判断resultStatus 为非"9000"则代表可能支付失败

// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)

if (TextUtils.equals(resultStatus, "8000")) {

Toast.makeText(RechargeActivity.this, "支付结果确认中", Toast.LENGTH_SHORT).show();

} else if (TextUtils.equals(resultStatus, "4000")) {

Toast.makeText(RechargeActivity.this, "订单支付失败", Toast.LENGTH_SHORT).show();

} else if (TextUtils.equals(resultStatus, "5000")) {

Toast.makeText(RechargeActivity.this, "重复请求", Toast.LENGTH_SHORT).show();

} else if (TextUtils.equals(resultStatus, "6001")) {

Toast.makeText(RechargeActivity.this, "中途取消", Toast.LENGTH_SHORT).show();

} else if (TextUtils.equals(resultStatus, "6002")) {

Toast.makeText(RechargeActivity.this, "网络连接出错", Toast.LENGTH_SHORT).show();

} else if (TextUtils.equals(resultStatus, "6004")) {

Toast.makeText(RechargeActivity.this, "支付结果未知,请查询交易记录", Toast.LENGTH_SHORT).show();

} else if (TextUtils.equals(resultStatus, "其它")) {

Toast.makeText(RechargeActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

}

}

break;

}

default:

break;

}

} ;};

到此,支付基本完成,按照官方demo配置应该都可以的!

android支付宝4000,Android支付——支付宝支付相关推荐

  1. android 支付模块封装,Android集成支付----支付宝支付总结与封装

    前言 类似于Android集成支付----微信支付总结与封装(可以查看本人另外一篇文章),本文对支付宝支付进行一个总结与封装.相比于微信支付,支付宝支付没有那么多坑. 集成支付宝支付SDK 这里只是简 ...

  2. Android客户端三步完成支付宝支付SDK接入

    迁移最新版本 1.下载SDK 下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&d ...

  3. android 支付宝 收款,Android支付——支付宝支付

    相比之前的支付宝sdk,新版的sdk不再判断App客户端是否安装了支付宝客户端.如果用户安装了支付宝,将跳到支付宝客户端支付:如果用户没有安装支付宝客户端,将跳到 sdk中的H5PayActivity ...

  4. Android动画(Android Animation)笔记

    demo源码地址:https://github.com/totond/LearnAnimation Android里动画时非常常见的,几乎每个炫酷的自定义控件都涉及动画.Android里面的动画分为两 ...

  5. android如何实现支付宝,(Android集成支付宝支付)react-native实现支付宝支付

    网上关于RN的支付宝支付组件大部分都是IOS的,Android要实现支付宝支付只剩下走原生这一步了. 整体思路: 1.在蚂蚁金服开放平台申请应用 2.在android原生集成支付宝 3.封装andro ...

  6. 移动支付--银联,支付宝,微信(android)

    在这个移动互联网快速发展的时代,手机已经成为人们生活或者出行之中必不可少的设备了,如今非常多城市的商户都能够採用支付宝,微信支付了.人们出门仅仅须要随身携带带手机.不用带大量现金就能够放心购物了.如今 ...

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

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

  8. 支付宝 android 指纹支付,支付宝更新,小米5终于用上了指纹支付

    原标题:支付宝更新,小米5终于用上了指纹支付 iPhone的出现,一直在改变着我们的生活.它扮演者一个神产品的角色,出现在我们生活当中.2013年Apple发布会首款拥有指纹(Touch ID)解锁的 ...

  9. android支付宝支付微信支付封装,如何在Android App中集成支付宝和微信支付功能

    前言 本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介 ...

  10. android移动支付——支付宝支付,android开发游戏加速器

    上面的支付流程细化下来就是: 1.浏览商品 2.把要买的商品加入购物车 3.把商品拿到收银台,收银人员处理商品信息 4.告诉收银员支付方式 5.选择支付方式进行支付 6.处理支付结果(成功.失败.取消 ...

最新文章

  1. jQuery中的$.getJSON
  2. 使用第三方工具覆写Object中方法
  3. openlayers之style符号化
  4. css 首字下沉 错位,css+div错位问题的修复小结
  5. [八]RabbitMQ-客户端源码之ChannelN
  6. 禁用DropDownList某一选项
  7. html5中折叠面板,Ant Design中折叠面板Collapse
  8. PreScan轨迹mat文件数据格式
  9. Oracle数据库imp
  10. html框架集frame是啥意思,HTML框架集frameset和内嵌框架iframe
  11. Soft-Masked BERT:文本纠错与BERT的最新结合
  12. 决策树算法python源代码_CART决策树(Decision Tree)的Python源码实现
  13. ManualResetEvent实现线程的暂停与恢复
  14. opnet物联网仿真-编程集锦
  15. ADA程序实例(面向对象特性之多态)
  16. 如何安装vue并创建vue.js框架项目
  17. ESXI下安装OpenWrt/LEDE软路由教程(附超全功能固件镜像下载)
  18. 怎么样上台演讲(结合ppt)。。超级实用。。。
  19. 把音频中的某个人声去掉_能不能把一段音频中的人声和背景音乐分开
  20. 关于陌陌和微信表情页与输入法之间切换的问题

热门文章

  1. batch spring 重复执行_Spring Batch_JOB重启机制
  2. 人工智能在金融行业的应用
  3. html tr行内样式左对齐,探索CSS单行文字居中,多行文字居左的实现方式
  4. 生成yolov5.wts文件出错
  5. 【优化系列】龙芯loongson简介
  6. 腾讯云通信、网易云通信、极光IM、阿里百川、容云通信国内云通信抉择之路 看云通信市场风云与掌控力 带腾讯云通信实战代码demo
  7. 数学中的圆周率符号怎么输入
  8. 基于websocket的跨平台通信——iPhone/iPad/Mac控制树莓派(二):Swift控制端搭建,网络延迟显示
  9. 移动2班徐斌1803230241
  10. 阄阄乐-IOS抓阄抽签工具