银联支付流程

article/2025/10/9 0:42:49

本文的前提是你已经申请好了银联的相关资料,即将进入集成阶段或者遇到坑了(没错。我踩了== 吐槽下 这东西真是渣),不bb了,直接开始吧

照着文档把相关的so jar data.bin文件拷贝到相应的文件夹,权限,activity注册等弄完之后。(再看文档,想吐槽)接下来看demo的三个activity:BaseActivity APKActivity JARActivity

首先是BaseActivity,基本的流程都在这个Activity里了

/****************************************************************** mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境*****************************************************************/private final String mMode = "01";private static final String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn";private final View.OnClickListener mClickListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {Log.e(LOG_TAG, " " + v.getTag());mGoodsIdx = (Integer) v.getTag();mLoadingDialog = ProgressDialog.show(mContext, // context"", // title"正在努力的获取tn中,请稍候...", // messagetrue); // 进度是否是不确定的,这只和创建进度条有关/************************************************** 步骤1:从网络开始,获取交易流水号即TN************************************************/new Thread(BaseActivity.this).start();}};
@Overridepublic void run() {String tn = null;InputStream is;try {String url = TN_URL_01;URL myURL = new URL(url);URLConnection ucon = myURL.openConnection();ucon.setConnectTimeout(120000);is = ucon.getInputStream();int i = -1;ByteArrayOutputStream baos = new ByteArrayOutputStream();while ((i = is.read()) != -1) {baos.write(i);}tn = baos.toString();is.close();baos.close();} catch (Exception e) {e.printStackTrace();}Message msg = mHandler.obtainMessage();msg.obj = tn;mHandler.sendMessage(msg);}

需要注意的,在用银联demo给的tn,和测试账号的时候,用01测试环境,在真正和后台交互的时候要换成00开发环境,不然报错。

demo中的步骤一,我们可以忽略掉,因为这个步骤一是在请求一个银联给的接口,只是用来获取tn值。(咱们上面第三部已经获取了tn值,所以直接跳过步骤一即可)


/************************************************** 步骤2:通过银联工具类启动支付插件************************************************/doStartUnionPayPlugin(this, tn, mMode);
其实这个是一个回调,你不封装的话这个没什么卵用,其实就是直接调用

UPPayAssistEx.startPay(activity, null, null, tn, mode);
上面代码可以在JARActivity中找到,当然,也可以在APKActivity中找到

// mMode参数解释:// 0 - 启动银联正式环境// 1 - 连接银联测试环境int ret = UPPayAssistEx.startPay(this, null, null, tn, mode);if (ret == PLUGIN_NEED_UPGRADE || ret == PLUGIN_NOT_INSTALLED) {// 需要重新安装控件Log.e(LOG_TAG, " plugin not found or need upgrade!!!");AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("提示");builder.setMessage("完成购买需要安装银联支付控件,是否安装?");builder.setNegativeButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {UPPayAssistEx.installUPPayPlugin(APKActivity.this);dialog.dismiss();}});builder.setPositiveButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}

这个可以自己看着办

最后,添加回调

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {/************************************************** 步骤3:处理银联手机支付控件返回的支付结果************************************************/if (data == null) {return;}String msg = "";/** 支付控件返回字符串:success、fail、cancel 分别代表支付成功,支付失败,支付取消*/String str = data.getExtras().getString("pay_result");if (str.equalsIgnoreCase("success")) {// 如果想对结果数据验签,可使用下面这段代码,但建议不验签,直接去商户后台查询交易结果// result_data结构见c)result_data参数说明if (data.hasExtra("result_data")) {String result = data.getExtras().getString("result_data");try {JSONObject resultJson = new JSONObject(result);String sign = resultJson.getString("sign");String dataOrg = resultJson.getString("data");// 此处的verify建议送去商户后台做验签// 如要放在手机端验,则代码必须支持更新证书 boolean ret = verify(dataOrg, sign, mMode);if (ret) {// 验签成功,显示支付结果msg = "支付成功!";} else {// 验签失败msg = "支付失败!";}} catch (JSONException e) {}} // 结果result_data为成功时,去商户后台查询一下再展示成功msg = "支付成功!";} else if (str.equalsIgnoreCase("fail")) {msg = "支付失败!";} else if (str.equalsIgnoreCase("cancel")) {msg = "用户取消了支付";}AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("支付结果通知");builder.setMessage(msg);builder.setInverseBackgroundForced(true);// builder.setCustomTitle();builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}
至此,demo中的东西都抄完了。满心欢喜运行起来。特么的坑爹了,竟然报错了。是的,就是下面这个坑爹的错误。

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.jlkf.mph-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]] couldn't find "libentryexpro.so"at java.lang.Runtime.loadLibrary(Runtime.java:366)at java.lang.System.loadLibrary(System.java:988)at com.unionpay.UPPayAssistEx.r(Unknown Source)at com.unionpay.UPPayAssistEx.n(Unknown Source)at com.unionpay.c.onError(Unknown Source)at com.unionpay.b.b.a(Unknown Source)at com.unionpay.b.b.a(Unknown Source)at com.unionpay.UPPayAssistEx.a(Unknown Source)at com.unionpay.UPPayAssistEx.a(Unknown Source)at com.unionpay.UPPayAssistEx.startPay(Unknown Source)at com.jlkf.mph.mine.activitys.AccountRechargeActivity.handleMessage(AccountRechargeActivity.java:317)at android.os.Handler.dispatchMessage(Handler.java:98)at android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5298)at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:708)

如果你也遇到了这个错误,恭喜你,我也遇到了,而且我也解决了,其实原因就是你把so文件什么的都放在了lib文件夹下,解决方法有两种

第一种,打开build.gradle文件,添加下面代码

sourceSets.main.jniLibs.srcDirs = ['libs']
defaultConfig {ndk {abiFilters 'armeabi-v7a', 'x86', 'armeabi','arm64-v8a','x86_64'}}
再打开你的gradle.properties文件,添加
android.useDeprecatedNdk=true

运行起来,就ok了

第二种 把你的东西丢到jniLibs文件夹下就可以了,至此,总算把银联支付集成了

其他错误参考https://open.unionpay.com/ajweb/help/faq/list?id=142&level=0&from=1


http://chatgpt.dhexx.cn/article/RgjUDfA7.shtml

相关文章

java银联支付

貌似最近银联出了什么活动,公司急需接入银联支付, 作为写代码的我们 , 只能服从命令,特地记录下接入银联的过程 ,后续还会说接入支付宝和微信的亲自体验历程.................................................................... 1.申请商户 首先得去银联那里开通商户,这个…

谈谈银联 js 支付

业务场景:银联 JS 支付指二维码为收单机构订单的 URL,用户扫描二维码后在 APP 浏览器中打开收单机构的 H5 页面,收单机构在确认支付后调用银联统一网关,由银联调用 APP 完成支付的场景。 银联 JS 支付为丰富 APP 受理范围&#x…

springboot整合银联支付B2C

springboot整合银联支付B2C 前期准备 需要注册银联,登录,下载相关的sdk 这里是整合B2C 注册,登录 注册登录地址 https://open.unionpay.com/tjweb/login 下载sdk sdk下载地址: https://open.unionpay.com/tjweb/acproduct/list?apiSvc…

银联支付接口申请流程-傲付宝

公司的业务主要是帮企业申请各种支付接口,申请得多就慢慢熟悉了一些门道,其实银联支付申请还是比较简单的(不用上传app截图什么的),只是申请比较难,还有填写的资料比较多。下面我给大家介绍下银联支付接口中…

PHP对接银联电子支付接口开发

PHP对接银联电子支付接口开发 提示:https://service.chinapay.com/OSIWeb/plogin/toLogin.action#银联在线,注册用户,签约成为商户。成为商户后银联会发邮件到你的邮箱,内容有插件、企业门户控台证书申请、logo、cp.cer、商户接入手册,和商户号ID。 企业门户控台证书申请…

PHP银联支付接口

同事整理的银联支付接口: 链接:http://pan.baidu.com/s/1boMJ2z1 密码:qxcx 1.首先导入Api银联支付接口到项目的Aip目录下。 2.前端创建如下相对应页面 2-1 2-2 3.填写如上图2-2的真实个人信息数据。发form表单或者ajax到后台方法中。 如下图…

银联支付接口+支付宝接口统一支付功能

这个demo发出来已经比较久了,后面发现陆续还有同学找到我,我这里说下现在的情况。 这个接口中的银联支付接口实际也是走的支付宝接口,不需要单独申请银联了。但是!支付宝的这个接口已经下架了,以前已经接入的此接口还可…

#DNS比较(北京联通宽带) @FDDLC

阿里:223.5.5.5 腾讯:119.29.29.29 百度:180.76.76.76 北京联通:202.106.46.151 北京联通:202.106.195.68

牛啊,全国DNS服务器IP地址都在这里了

各省公共DNS服务器IP大全 欢迎关注微信公众号【厦门微思网络】。www.xmws.cn专业IT认证培训19周年主要课程:思科、华为、红帽、ORACLE、VMware、CISP、PMP等认证培训及考证 名称各省公共DNS服务器IP大全114 DNS114.114.114.114114.114.115.115阿里 AliDNS223.5.5.52…

教育网系统服务器域名地址,北京教育网dns服务器地址

北京教育网dns服务器地址 内容精选 换一换 默认部署在VPC下的应用可以调用API。如果域名解析失败,则参考配置内网DNS,在当前终端节点上配置DNS服务器。配置完成后,部署在VPC下的应用可以调用API。配置DNS需要配置“/etc”目录下的resolv.conf…

全国DNS地址大全

电信DNS: 北京DNS地址: 202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195 上海DNS地址: 202.96.199.132 202.96.199.133 202.96.209.5 202.96.209.6 202.96.209.133 天津DNS地址: 202.99.96.68 10.10.64.68…

【EtherCAT】基础概念

一、定义 EtherCAT(以太网控制自动化技术)是最初由德国倍福(Beckhoff)公司开发的实时(real—time)工业以太网(Ethernet)技术,它是一种以以太网为基础的现场总线系统&…

EtherCAT是如何工作的

来源https://blog.csdn.net/u014311679/article/details/90713554 若有侵权,请联系删除。 这次讨论一下ETHERCAT是如何工作的: 应用层-数据链路层-物理层 物理层: RJ45标准连接器;TX to FX转换器;LVDS:低电…

IgH详解十、EtherCAT DC(1)理论

(Distributed Clocks) 分布式时钟 分布式时钟相当于每个节点都有一个时钟,在同一时刻,触发所有节点做给定的动作,要达到同一时刻触发就要求大家的时钟保持一致,也就是同步。 比如每个人都有手机,只要手机接入网络&…

EtherCAT 之邮箱

EtherCAT特点 由于工作需要, 最近在学习EtherCAT总线,对于主站和从站的通信,发表一下我个人的理解。 1. EtherCAT为保证低延迟高响应,不可能像MODBUS一样用软件解析数据包再转发的模式,而是采用“高速火车”不停车上下…

IgH详解八、EtherCAT SDO原理

主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。 从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。 如下图写入操作,主站把数据发送到从站,从站返回WC确保数…

Ethercat学习笔记

1、EtherCAT原理介绍 EtherCAT从站设备在报文经过其节点时读取相应的数据报文,同样输入数据也是在报文经过时插入到报文中。整个过程报文只有几纳秒的时间延迟,实时性获得极大提高 EtherCAT作为一种工业以太网总线,充分利用了以太网的全双工…

igh ethercat主站文档(中文翻译上)

此翻译主要是用翻译软件翻译,部分自己修改,若有不当之处,可以下方评论或私聊我提醒修改,若转载,请注明出处 本文是1-4章节。 1 The IgH EtherCAT Master 本章介绍有关EtherCAT主站…

EtherCAT设备协议详解五、Modular Device Profile

ETG.5001.1: General MDP Device ModelETG5001定义了通用的模块设备模型,现在远程可扩展的IO模块基本都使用本协议实现 从总线上看是一个从站,实际上可以扩展多个卡片式IO模块 一个从站对应多个插槽,插槽可随机插入不同型号的卡片IO&#xff…

[工业互联-17]:常见EtherCAT主站与实现方法

目录 第1章 EtherCAT入门 1.1 简介 1.2 EtherCAT通信架构 第2章 EtherCAT主站方案 2.1 方案概述 2.2 主站配置步骤 2.3 EtherCAT主站软件 第3章 Windows操作系统支持EtherCAT的基本步骤 第4章 常见主站软件介绍:TwinCAT 4.1 简介 4.2 软件架构 4.3 应…