前段时间集成了银联、微信和支付宝,感觉银联和微信的集成过程都是比较容易的,只有支付宝在和后台进行加签的过程中容易出错,导致支付失败。自己总结了集成的过程,希望可以分享和记录下来。

一.银联的demo和jar包下载流程就不细讲了,可以到官网进行下载。

二.支付流程:

1.银联支付流程图:

三.支付流程文字讲解:

1.在客户端提交用户选择的产品信息,如:价格、产品名称等信息到我们的服务端。

2.我们的服务端会从银联服务端返回一个流水号(21位纯数字)给客户端。

3.客户端通过这个流水号(即是tn)调用起银联的支付界面。

4.然后我们在银联的支付控件填写银行卡等信息,支付控件会把这些信息发送到银联服务端。

5.最终银联服务端把支付结果返回我支付控件,支付控件会调用当前Activity的onActivityResult()方法。

四.开发步骤:(在AndroidStudio中开发)

一.导入jar包、.so文件、bin文件和在AndroidManifest配置一些信息。

1.添加资源文件

在我们中银联官网下载的文件中找到libentryexpro.so和ibuptsmaddon.so文件,并拷贝到

工程的libs/xxx/目录下,其中xxx为 armeabi-v7a、armeabi、arm64-v8a、x86、x86_64中之一;拷贝UPPayAssistEx.jar和UPPayPluginExPro.jar到libs目录下;在工程中新建一个assets目录,把data.bin复制到该目录下。

2.在AndroidManifest文件下配置。

<application>
<!--工程其它配置此处省略…-->
<uses-library android:name="org.simalliance.openmobileapi" android:required="false"/>
<activity
android:name="com.unionpay.uppay.PayActivity"
android:label="@string/app_name"android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"android:excludeFromRecents="true"
android:windowSoftInputMode="adjustResize"/><activityandroid:name="com.unionpay.UPPayWapActivity"android:configChanges="orientation|keyboardHidden"android:screenOrientation="portrait"android:windowSoftInputMode="adjustResize"/>
</application><textarea readonly="readonly" name="code" class="java">
配置一些权限:
<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission
android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc.hce"/>
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
<uses-permissionandroid:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permissionandroid:name="org.simalliance.openmobileapi.SMARTCARD" />
</textarea>

二.前期工作都做好了,是时候开始写代码了。

1.第一步是向后台发送请求,把金额和订单信息传给后台。
2.我使用的是retrofit和Rxjava网络请求,这是我请求后台成功后调用的方法。
// “00” – 银联正式环境
// “01” – 银联测试环境,该环境中不发生真实交易

@Overridepublic void getBankPayCodeSuccess(String model) {int ret = UPPayAssistEx.startPay(PayMentActivity.this, null, null, model, "00");if (ret == PLUGIN_NEED_UPGRADE || ret == PLUGIN_NOT_INSTALLED) {// 需要重新安装控件NormalAlertDialog dialog = new NormalAlertDialog.Builder(PayMentActivity.this).setBoolTitle(true).setContentText("完成购买需要安装银联支付控件,是否安装?").setLeftText("取消").setRightText("确认").setHeight(0.23f).setWidth(0.75f).setOnclickListener(new DialogInterface.OnLeftAndRightClickListener<NormalAlertDialog>() {@Overridepublic void clickLeftButton(NormalAlertDialog dialog, View view) {dialog.dismiss();}@Overridepublic void clickRightButton(NormalAlertDialog dialog, View view) {UPPayAssistEx.installUPPayPlugin(PayMentActivity.this);dialog.dismiss();}}).setTouchOutside(true).build();dialog.show();}}

model就是我们的服务端返回的流水号,然后我们通过银联jar的
UPPayAssistEx.startPay(PayMentActivity.this, null, null, model, "00")方法去调起银联支付控件。

3.重写onActivityResult(intrequestCode,intresultCode, Intent data)方法,在该方法中判断支付的结果。

if( data == null ){return;}String str =  data.getExtras().getString("pay_result");if( str.equalsIgnoreCase(R_SUCCESS) ){// 支付成功后,extra中如果存在result_data,取出校验
// result_data结构见c)result_data参数说明if(data.hasExtra("result_data")) {
String sign =  data.getExtras().getString("result_data");
} else {
// 未收到签名信息
// 建议通过商户后台查询支付结果
}}else if( str.equalsIgnoreCase(R_FAIL) ){showResultDialog(" 支付失败! ");}else if( str.equalsIgnoreCase(R_CANCEL) ){showResultDialog(" 你已取消了本次订单的支付! ");

到这一步,银联支付基本完成了,在官方的demo中,会有一个验签证书的过程,我们在开发时你不需要,直接删掉
好,不然会支付失败。

原创博客,转载请注明:
http://blog.csdn.net/lgl5785592

Android app支付-银联支付相关推荐

  1. android移动支付——银联支付

    前言 这里开篇讲解一系列的Android相关的移动支付.移动支付也称为手机支付,用户使用移动的设备,完成对所购买商品或者服务的支付功能.包括远程支付(网上支付.短信支付),近场支付(刷卡.滴卡.pos ...

  2. Android app集成微信支付

    Android app集成微信支付 鉴于微信支付的文档入口不太容易找到.以及文档中有些逻辑不通或者容易产生歧义或者缺失一些信息的情况,记录下此次接入的流程和需要关注的一些点. 使用的是app支付-&g ...

  3. Android开发之——银联支付初探

    前言 现在网上支付用的比较多的是微信支付,支付宝支付和银联支付.关于微信和支付宝支付前面已经讲过了,本文主要介绍关于银联支付集成的过程和步骤. 银联支付 资源查找 集成文档 点击上面的集成文档,打开如 ...

  4. Android支付宝,微信,银联支付支付的集成

    移动支付 用户使用移动的终端完成对所购买商品或者服务的支付功能;分为近场支付(蓝牙支付,刷卡,滴卡),和远程支付(网上支付,短信支付) app支付模块 常见的支付厂商-->常见的支付方式 支付宝 ...

  5. Android开发之——银联支付深入

    前言 上一遍讲解了银联支付的入门和演示,这篇文章继续介绍银联支付中的一些关键点解析和注意事项,希望对在银联开发接入的你有所帮助. 银联支付接入流程 第一步:申请入网 入网即签约,分银联官网注册和服务商 ...

  6. 安卓app接入银联支付

    刚接触了下银联支付,在网上搜还是看官方文档银联支付都不是很清晰,所以自己总结一篇,希望可以帮助大家快速集成. 一.进入下载官网,选择下载手机控件支付demo: https://open.unionpa ...

  7. Android 支付宝 微信 银联 支付

    补充技术:现在很多支付平台,那么就需要有一个统一的平台进行支付的封装,那就是PING++有兴趣的朋友可以自己看一下. 一.支付难不难,不难,都是属于第三方的东西,难度不大. 二.支付是安全的,因为都是 ...

  8. iOS第三方支付——银联支付

    1.概述 银联手机支付控件(以下简称支付控件),主要为合作商户的手机客户端提供安全.便捷的支付服务.用户通过在支付控件中输入银行卡卡号.手机号.密码(借记卡和预付卡)或者CVN2.有效期(信用卡).验 ...

  9. java 银联支付反馈,微信支付/支付宝支付/银联支付,对比加总结(Java服务端)

    今天来说讲支付.前端 工做到如今,接入过好几个项目的支付,其中涉及到了微信支付.支付宝支付.银联支付.服务器 三种支付的对接感觉其实总体上大同小异.都遵循同一个流程:微信 1).商户APP向商户服务器 ...

最新文章

  1. SaltStack入门(二)Grains、NoteGroup和State
  2. linux基础 云,云计算之linux基础一
  3. 让页面只能在微信浏览器里访问
  4. python特征选择relieff图像特征优选_ReliefF与QPSO结合的故障特征选择算法
  5. PAT甲级1028 List Sorting:[C++题解]排序,cin和cout会超时
  6. C# 遍历List 并删除某个元素
  7. linux下设定动态库路径的命令-error while loading shared libraries: xxx.so.x错误的原因和解决办法
  8. service注入为null_如何解决quartz调度时候,job中的service为null的问题?
  9. 获取Django所有路由
  10. 如何使用ITEXTSHARP将HTML代码字符串写进PDF
  11. python读取HDF5数据
  12. Matlab数组及多项式运算
  13. 思维导图☆三招十八式
  14. C#登录语音提醒操作
  15. Clickhouse基础语法、数据类型、数据表引擎学习
  16. 2020网赚模式不再亮眼,中小开发者如何在红海竞争中活下去?
  17. “商务网”,聚合头头网商务开放室,集群式商务推广平台
  18. html表格添加序号,通过layui给数据表格添加序号
  19. uiautomator2+python实现企业微信自动打卡
  20. Spring实战4—面向切面编程

热门文章

  1. 【拓扑学知识】2.连续同胚映射
  2. 关于字符串子串 真子串 非空子串 非空真子串的求解方法
  3. Linux-4.20.8内核桥收包源码解析(一)----------sk_buff(详细)
  4. 使用python-opencv去掉视频水印
  5. HTML 语法教学之连结标签
  6. 汉化+破解Substance Painter 2019 macv2019.1.0图文展示
  7. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day5】 —— 基础篇2
  8. 你给员工吃肉,你将迎来一群狼!
  9. python 网格交易源码_网格交易策略[tb源码]
  10. 【赛码网 牛客网】输入输出总结(python版)