安卓集成云闪付,以及So库冲突多moudle项目解决办法
安卓集成云闪付,以及So库冲突多moudle项目解决办法
- 支付流程介绍
- 1.无图无真相
- 2.前往银联下载修仙工具
- 3.权限和混淆配置
- 4.开始编写代码
- 5.完结撒花
支付流程介绍
交易流程如下图:
安卓端这边要做的就是把商品给后台,后台返回tn,然后通过tn去启动支付控件完成支付,银联返回支付结果
公司采用的是多Moudle项目管理,然后我在集成云闪付支付的时候,需要放so文件导致了冲突,但是又不报错,就是云闪付支付控件调用不起来。
1.无图无真相
2.前往银联下载修仙工具
1.首先去银联官网(银联安卓SDK包下载地址)下载对应的sdk包。
以防某些兄弟第一次,不熟悉这里老司机给你们引条路:
2.有了开发包后,我们又可以愉快的进行下一步了,把开发包里面的东西放到我们自己项目里面
拷贝 upmp_android/sdkPro/jar/data.bin 到自己工程的 assets/目录下
拷贝upmp_android/sdkPro/UPPayAssistEx.jar到工程的libs/目录下
拷贝upmp_android/sdkPro/jar/UPPayPluginExPro.jar到工程的libs/目录下
拷贝所有的so文件到工程的jniLibs(与res同级)目录下,如下图所示(这个和官方的不一样,因为我的项目是多Moudle项目,不这么做会导致so库冲突,进而后续调用不起支付控件)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521135324175.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MzYzNTA2,size_16,color_FFFFFF,t_70#pic_center ==350x650)
**这里讲个东西,很多人放进去后都喜欢在项目中app的build.gradle添加如下代码
sourceSets {main {jniLibs.srcDirs = ['libs']}}
千万不要这样乱搞,这句话的意思是把库文件的位置转移到了libs目录下了,如果你是多Module,那你就冲突了兄弟,如果不是当我没说。
**3.**最后附上一张把开发包放到自己项目的集成图:
3.权限和混淆配置
1.在工程的AndroidManifest.xml文件中注册支付插件使用的Activity。添加如下:
<uses-libraryandroid:name="org.simalliance.openmobileapi"android:required="false"/><activityandroid:name="com.unionpay.uppay.PayActivity"android:configChanges="orientation|keyboardHidden|keyboard"android:screenOrientation="portrait"></activity><activityandroid:theme="@style/UPPay"android:name="com.unionpay.UPPayWapActivity"android:configChanges="orientation|keyboardHidden|fontScale"android:screenOrientation="portrait"android:windowSoftInputMode="adjustResize"></activity>
如果应用没有给Application显示设置dialogTheme,在Android Q上可能会出
现dialog是透明的现象,解决方法给com.unionpay.uppay.PayActivity和
com.unionpay.UPPayWapActivity设置一个定义了dialogTheme的主题。如:
<style name="UPPay"><item name="android:dialogTheme">@android:style/Theme.Dialog</item>
</style>
同时添加,银联支付插件相关权限
<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_EXTERN
AL_STORAGE"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_S
TATE"/>
<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="org.simalliance.openmobileapi.SMARTCARD" />
2.Proguard规则:
//在proguard文件中添加如下规则
-dontwarn com.unionpay.**
-keep class com.unionpay.** {*;}
-keep class org.simalliance.openmobileapi.** {*;}
4.开始编写代码
1.首先先判断用户有没有装云闪付APP
if (!UPPayAssistEx.checkWalletInstalled(PayActivity.this)) {//没装的话给个吐司让用户装咯}
2.从后台获取tn
String tn = getOrderQuickParamResult.getPayParam();//这个是我json解析后的对象,你们的自己换//这个tn是后台传过来的Message msg = mHandler.obtainMessage();msg.obj = tn;mUppHandler.sendMessage(msg);//mUppHandler这个自己定义下记得在onCreate中初始化( mUppHandler = new Handler(this); )
3.通过银联工具类启动支付插件
先让你的Activity去实现Handler.Callback接口,实现他的handleMessage方法
//云闪付相关@Overridepublic boolean handleMessage(Message msg) {String tn = "";if (msg.obj == null || ((String) msg.obj).length() == 0) {networkErrorDialog = new LenzDialog(PayActivity.this,new Params().setTitle(PayActivity.this.getResources().getString(R.string.system_tip)).setContent(PayActivity.this.getResources().getString(R.string.cloud_quickpass_number)).setPositiveString(PayActivity.this.getResources().getString(R.string.confirm)), R.style.lenzDialog);networkErrorDialog.setOnClickPositiveListener(new OnClickPositiveListener() {@Overridepublic void onClick(View v) {networkErrorDialog.dismiss();}});networkErrorDialog.setOnClickNegetiveListener(new OnClickNegetiveListener() {@Overridepublic void onClick(View v) {networkErrorDialog.dismiss();}});networkErrorDialog.show(); //这个就一个自定义的对话框,大家随意发挥} else {tn = (String) msg.obj;/************************************************** 步骤2:通过银联工具类启动支付插件* 自己去定义private final String mMode = "01";* mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境************************************************/UPPayAssistEx.startPay(this, null, null, tn, mMode);}return false;}
4.在Activity的onActivityResult方法中接收支付插件返回的结果
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, 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 = getString(R.string.paysuccess_tip);} else if (str.equalsIgnoreCase("fail")) {msg = getString(R.string.payfailed_tip);} else if (str.equalsIgnoreCase("cancel")) {msg = getString(R.string.user_cancel_payment);}paymentResultDialog = new LenzDialog(PayActivity.this,new Params().setTitle(PayActivity.this.getResources().getString(R.string.system_tip)).setContent(msg).setPositiveString(PayActivity.this.getResources().getString(R.string.confirm)), R.style.lenzDialog);paymentResultDialog.setOnClickPositiveListener(new OnClickPositiveListener() {@Overridepublic void onClick(View v) {paymentResultDialog.dismiss();}});paymentResultDialog.setOnClickNegetiveListener(new OnClickNegetiveListener() {@Overridepublic void onClick(View v) {paymentResultDialog.dismiss();}});paymentResultDialog.show();//这还是个自定义的对话框,兄弟们自己定义个就好了}
5.完结撒花
创作不易,欢迎一键三连(评论,点赞,关注)
安卓集成云闪付,以及So库冲突多moudle项目解决办法相关推荐
- 白苹果了怎么办_建行储蓄卡云闪付bug还款玩法(苹果和安卓机攻略)
小白玩卡指南在上一篇提到 建行龙支付多倍积分攻略 活动3:建行储蓄卡手机闪付5倍积分2019.10.1~2019.12.31建行借记卡(储蓄卡)使用手机闪付5倍积分,上限20000积分. 预估收益:活 ...
- 银联手机网页如何调用云闪付(银联钱包)
银联云闪付是目前市场上比较火热的一个名词,意思是说用户在进行支付时,通过调用云闪付客户端来进行快速支付的一种支付方式. 手机APP通过插件调起方法可调起导入的银联jar文件或者在手机安装银联云闪付客户 ...
- 极客日报:恶意软件感染超1000万台安卓设备;淘宝App已支持“云闪付”付款;OpenSSH 8.8发布
一分钟速览新闻点! OPPO在德国反诉诺基亚专利侵权 抖音支持外放音量过高提醒功能 淘宝App已支持"云闪付"付款 理想汽车称玻璃存在自动开裂可能性 阿里申请"阿里元宇宙 ...
- android版本60支持云闪付,云闪付app下载-云闪付 安卓版v8.0.5-PC6安卓网
云闪付app是一款以非接触支付技术为核心的银联移动支付新标志,涵盖NFC.HCE.TSM和Token等各类支付创新技术应用,只需一部具备NFC功能的手机,持卡人可直接在手机银行APP中生成一张即云闪付 ...
- iOS Apple Pay(银联渠道) 、云闪付
首先提一下.Apple pay 和 云闪付是两个东西.刚开始的时候产品理解不清楚,他们就认为是一个东西 Apple Pay:用的是苹果的设备,内部的资金的流向都是第三方操作的,我这边用的是银联渠道.你 ...
- 互联网晚报 | 9月30日 星期四 | 五菱与B站跨界合作;支付宝向“云闪付”开放支付场景;平安健康险上线“药划算”...
今日看点 ✦ 淘宝联盟宣布私域营销升级,今年双11将发10亿元补贴 ✦ 万达广场正式迈入400+时代,年客流超60亿人次 ✦ 蔚来换电站总数突破500座,预计年底超过700座 ✦ 五菱与B站跨界 ...
- Java 银联云闪付对接记录
一开始盲目找资料走了弯路: 还是从银联给的官方文档入手最高效: 附件3:云闪付业务商户入网服务指引.pdf http://tomas.test.upcdn.net/pay/%E9%99%84%E4%B ...
- PHP开发银联云闪付二维码支付
你好,是我琉忆.最近刚好有在研究银联云闪付的支付模块,所以就写篇总结分享给大家. 这算是第二次接触支付的东西了,接触得最多的是接入微信支付,自己也有相关的总结文章,可以去segmentfault搜索& ...
- 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付
第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 文章目录 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 一.分析背景与竞品选择 1.竞品分析目的 2.行业研究与市场趋势分析 ...
最新文章
- 数据库系统概论:第八章 数据库编程
- mysql+sql+子查询语句_SQL子查询
- session与cookie的简单使用
- jQuery.inArray()方法
- C# 监控字段_监控交换机选择:千兆/百兆/核心/PoE/光纤交换机选型指南
- WindowsAPI-------获取系统的相关信息
- 雷军:小米有机会重返世界前三;苹果为 Siri 泄露隐私事件致歉;Apache Tomcat 9.0.24 发布 | 极客头条...
- 30万奖金等你拿!Apache Flink 极客挑战赛入门指南(附Demo)
- nodeJS+bootstarp+mongodb整一个TODO小例子
- 计算机培训通知,关于开展上海师范大学2018年计算机办公自动化免费培训的通知...
- ASAN Pass源码分析(六)——全局变量插桩
- 微信朋友圈python广告评论_利用Python让你的微信朋友圈与众不同,更加高大上
- SpringMVC学习日志
- 详解统计指标PV、IP、UV、VV
- Android淘宝第三方登录
- Linux Control Groups (cgroups)
- konka电视怎么修改服务器,康佳网络电视如何升级 简单五步就搞定
- 2022制冷与空调设备运行操作考试题库模拟考试平台操作
- android heic图片,如何在安卓上查看HEIC图片的内容?
- 关于0“是不是自然数的了解