第三方支付至支付宝对接
前言
App开发中用到的支付有支付宝、微信、银联卡、pos等,但最常见的方式就是支付宝和微信支付,尤其电商项目。闲来没事总结一下,以下是集成支付宝支付的个人心得。
首先App添加支付宝支付功能,需要满足两点条件。
1:签约成为支付宝商户
签约地址:https://b.alipay.com/, 只有成为签约商户的开发者才能具备集成支付宝app支付的资格。 签约资料:1)营业执照 2)APP说明文档 3)商户经营信息、商户联系人等信息
2:集成APP代码
2.1:导入jar包资源
Eclipse将lib包复制到lib文件夹下,Android studio在gradle中可以添加依赖
compile files('libs/alipaySdk-20160223.jar')
- 1
- 2
2.2:修改AndroidManifest.xml清单
声明activity
<activityandroid:name="com.alipay.sdk.app.H5PayActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind" >
- 1
- 2
- 3
- 4
- 5
- 6
<activityandroid:name="com.alipay.sdk.auth.AuthActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind" >
- 1
- 2
- 3
- 4
- 5
- 6
添加权限
<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" />
- 1
- 2
- 3
- 4
- 5
- 6
2.3:根据情况添加支付宝混淆规则
2.4:添加主要代码(重要)
主要流程分为:
1:app通过下单调用后台接口,然后后台服务器返回签名后订单信息
2:app调起支付宝支付,传签名的订单信息,用户输入支付宝密码进行支付
3:支付宝返回支付结果,app进行支付结果展示,支付宝服务端异步回调商户服务端即我们自己后台服务端,后台更改订单状态
生成签名后的订单信息官方建议安全起见,在后台服务端生成,在此我在app端生成方面讲解整个流程。
//生成订单所需信息
public String getOrderInfo(String order_id,String order_sn, String price) {// 签约合作者身份IDString orderInfo = "partner=" + "\"" + Keys.DEFAULT_PARTNER + "\"";// 签约卖家支付宝账号orderInfo += "&seller_id=" + "\"" + Keys.DEFAULT_SELLER + "\"";// 商户网站唯一订单号orderInfo += "&out_trade_no=" + "\"" + order_id+"-"+getTimeByCalendar()+ "\"";// 商品名称orderInfo += "&subject=" + "\"" + order_sn + "\"";// 商品详情orderInfo += "&body=" + "\"" + order_id + "\"";// 商品金额orderInfo += "&total_fee=" + "\"" + price + "\"";// 服务器异步通知页面路径orderInfo += "¬ify_url=" + "\"" + payUrlBean.getAlipay_order_pay_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\"";// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)// orderInfo += "&paymethod=\"expressGateway\"";return orderInfo;
}// 对订单信息做RSA 签名String sign = sign(orderInfo);try {// 仅需对sign 做URL编码sign = URLEncoder.encode(sign, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}// 完整的符合支付宝参数规范的订单信息final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"+ getSignType();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
然后app需要调起支付宝上传订单信息
Runnable payRunnable = new Runnable() {@Overridepublic void run() {// 构造PayTask 对象PayTask alipay = new PayTask(OrderConfirmActivity.this);boolean exist = alipay.checkAccountIfExist();// 调用支付接口,获取支付结果String result = alipay.pay(payInfo);Message msg = new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};// 必须异步调用Thread payThread = new Thread(payRunnable);payThread.start();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
根据支付宝返回的支付结果展示信息
private Handler mHandler = new Handler() {@Overridepublic void handleMessage(android.os.Message msg) {switch (msg.what) {case RQF_PAY://支付成功break;case RQF_LOGIN: //支付失败break;case SDK_PAY_FLAG: PayResult payResult = new PayResult((String) msg.obj);// 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签String resultInfo = payResult.getResult();String resultStatus = payResult.getResultStatus();// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档if (TextUtils.equals(resultStatus, "9000")) {Toast.makeText(OrderConfirmActivity.this, "支付成功",Toast.LENGTH_SHORT).show();//支付成功} else {// 判断resultStatus 为非“9000”则代表可能支付失败// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)if (TextUtils.equals(resultStatus, "8000")) {Toast.makeText(OrderConfirmActivity.this, "支付结果确认中",Toast.LENGTH_SHORT).show();} else {// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误Toast.makeText(OrderConfirmActivity.this, "支付失败",Toast.LENGTH_SHORT).show();}}break; default:break;}};
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
这就是整个支付流程,最后附上支付宝官网文档及demo
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1
第三方支付至支付宝对接相关推荐
- SpringBoot工程接入第三方支付渠道支付宝(C扫B支付)
目录 1.C扫B的概念 2.支付宝接口调研 2.1.产品列表 2.2.线下场所接入支付 3.配置支付宝沙箱环境 3.1.简介 3.2.注册开放平台账号 3.3.配置密钥 3.4.沙箱账号 4.生成二维 ...
- 第三方支付 - 微信/支付宝 - 学习/实践
1.应用场景 主要用于学习与使用微信/支付宝支付, 了解熟悉第三方平台支付流程,将其用在项目中. 2.学习/操作 1.文档阅读 PHP实战天龙八部之微信支付视频教程-免费在线视频教程-php中文网 ...
- html扫码支付,WEB端第三方支付接入 - 支付宝 - 扫码支付
需要接入支付宝支付了 支付宝支付相对于微信支付接入更麻烦一些,要配置密钥啥的 需要支付宝开放平台账号,并开通网站支付相关权限,具体查看官方网站 上代码: 1 - 引入依赖 com.alipay.sdk ...
- 第三方支付(支付宝)
windows系统安装Python虚拟环境 首先保证你的系统已经安装好了Python 安装virtualenv C:\WINDOWS\system32>pip3 install virtuale ...
- Android常用的第三方支付(支付宝、微信、银联)
移动支付 用户使用移动的终端完成对所购买商品或者服务的支付功能;分为近场支付(蓝牙支付,刷卡,滴卡),和远程支付(网上支付,短信支付) app支付模块 常见的支付厂商-->常见的支付方式 支付宝 ...
- android 第三方支付之支付宝使用详解
介绍 参考安卓Dialog源码,他的builder设计模式实现方式是,使用内部类来实现功能,外部类的作用是通过build()函数,来对内部类进行参数设置,例如setter方法. Buidler设计模式 ...
- 第三方支付平台:易宝支付
国付宝国企 LianLianPay连连支付 这个比较好用,可以自己试试 我这里说的是易宝支付 两种在线支付的方式 在线支付一共有两种方式: 电商直接与银行对接: 电商通过第三方支付平台与银行对接: 电 ...
- 涉及到第三方支付接口该如何测试?
现在有不少测试朋友做的项目中,可能也会涉及到支付相关的功能.比如:做商城的,做游戏的以及其他在线交易的网站.APP等.如果支付出了问题,或者用户拿少的钱通过篡改请求数据购买大金额的商品,如果是实物的话 ...
- 微信支付与支付宝钱包的竞争分析
微信支付与支付宝钱包的竞争分析 NO1: 十九世纪七十年代起,"物竞天择,适者生存,优胜劣汰"已逐渐成为现代生物学的口号.而今,不知不觉中,它似乎也成了当代社会学的口号.罗素说:& ...
- 在线支付(通过第三方支付平台易保支付)
支付方案1:网站直接与银行对接 这种方式接方式的优缺点: 优点:钱通过银行直接存到网站帐户,交易资金结算安全.适合资金流量比较大的企业. 缺点:每个银行可能有不同的接入方案,开发人员需要针对不同银行编 ...
最新文章
- 输入20本书的书名,作者,出版社,出版日期,单价,按书名排序输出
- 写了一个开源的ASP.Net的系统信息探针(适用于MS.Net 1.x/2.0和Mono 1.0/2.0)
- 计算机组成原理—— 寻址方式
- Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
- 3 v4 中心节点固定_科研人员提出新型水声网络移动节点接入协议
- grDevices | R语言中的配色方法汇总(Ⅱ-1)
- 操作xml文档的常用方式
- 如何基于链表实现 LRU 缓存淘汰算法?
- Noip2010提高组总结
- 编程语言:8086汇编中int 16h接收alt+方向键
- 抖音短视频解析去水印 抖音视频编辑器伪原创
- 软工+C(9): 助教指南
- 第一个将Palette Mode引入VVC,阿里云在JVET会议上引起关注
- 东京实验店开张!日本7-Eleven以脸部辨识付款商店
- linux rhel unix centos FreeBSD 查看CPU核数使用率 系统 位 内存大小 硬盘 HBA光纤卡号 常用命令
- c语言一剑穿心图案编程,通达信一剑穿心指标公式(附图,源码,贴图)
- 程序员中的“芳心纵火犯”, 这就是面向对象编程吗?
- open-falcon judge部署
- 第一章 仿真器的工作原理
- 为什么你的问题群里没人回答?这就是原因!