安卓集成云闪付,以及So库冲突多moudle项目解决办法

  • 支付流程介绍
    • 1.无图无真相
    • 2.前往银联下载修仙工具
    • 3.权限和混淆配置
    • 4.开始编写代码
    • 5.完结撒花

支付流程介绍

交易流程如下图:

安卓端商户后台银联后台1.浏览商品,点击下单2.提交订单信息3.返回交易流水号(tn)4.返回交易流水号(tn)5.通过交易流水号启动支付控件开始支付6.支付控件收集支付信息,完成支付7.通知商户后台支付结果8.通知支付控件支付结果9.支付控件通知安卓端支付结果安卓端商户后台银联后台

安卓端这边要做的就是把商品给后台,后台返回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项目解决办法相关推荐

  1. 白苹果了怎么办_建行储蓄卡云闪付bug还款玩法(苹果和安卓机攻略)

    小白玩卡指南在上一篇提到 建行龙支付多倍积分攻略 活动3:建行储蓄卡手机闪付5倍积分2019.10.1~2019.12.31建行借记卡(储蓄卡)使用手机闪付5倍积分,上限20000积分. 预估收益:活 ...

  2. 银联手机网页如何调用云闪付(银联钱包)

    银联云闪付是目前市场上比较火热的一个名词,意思是说用户在进行支付时,通过调用云闪付客户端来进行快速支付的一种支付方式. 手机APP通过插件调起方法可调起导入的银联jar文件或者在手机安装银联云闪付客户 ...

  3. 极客日报:恶意软件感染超1000万台安卓设备;淘宝App已支持“云闪付”付款;OpenSSH 8.8发布

    一分钟速览新闻点! OPPO在德国反诉诺基亚专利侵权 抖音支持外放音量过高提醒功能 淘宝App已支持"云闪付"付款 理想汽车称玻璃存在自动开裂可能性 阿里申请"阿里元宇宙 ...

  4. android版本60支持云闪付,云闪付app下载-云闪付 安卓版v8.0.5-PC6安卓网

    云闪付app是一款以非接触支付技术为核心的银联移动支付新标志,涵盖NFC.HCE.TSM和Token等各类支付创新技术应用,只需一部具备NFC功能的手机,持卡人可直接在手机银行APP中生成一张即云闪付 ...

  5. iOS Apple Pay(银联渠道) 、云闪付

    首先提一下.Apple pay 和 云闪付是两个东西.刚开始的时候产品理解不清楚,他们就认为是一个东西 Apple Pay:用的是苹果的设备,内部的资金的流向都是第三方操作的,我这边用的是银联渠道.你 ...

  6. 互联网晚报 | 9月30日 星期四 | 五菱与B站跨界合作;支付宝向“云闪付”开放支付场景;平安健康险上线“药划算”...

    ‍ ‍今日看点 ✦ 淘宝联盟宣布私域营销升级,今年双11将发10亿元补贴 ✦ 万达广场正式迈入400+时代,年客流超60亿人次 ✦ 蔚来换电站总数突破500座,预计年底超过700座 ✦ 五菱与B站跨界 ...

  7. Java 银联云闪付对接记录

    一开始盲目找资料走了弯路: 还是从银联给的官方文档入手最高效: 附件3:云闪付业务商户入网服务指引.pdf http://tomas.test.upcdn.net/pay/%E9%99%84%E4%B ...

  8. PHP开发银联云闪付二维码支付

    你好,是我琉忆.最近刚好有在研究银联云闪付的支付模块,所以就写篇总结分享给大家. 这算是第二次接触支付的东西了,接触得最多的是接入微信支付,自己也有相关的总结文章,可以去segmentfault搜索& ...

  9. 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付

    第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 文章目录 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 一.分析背景与竞品选择 1.竞品分析目的 2.行业研究与市场趋势分析 ...

最新文章

  1. 数据库系统概论:第八章 数据库编程
  2. mysql+sql+子查询语句_SQL子查询
  3. session与cookie的简单使用
  4. jQuery.inArray()方法
  5. C# 监控字段_监控交换机选择:千兆/百兆/核心/PoE/光纤交换机选型指南
  6. WindowsAPI-------获取系统的相关信息
  7. 雷军:小米有机会重返世界前三;苹果为 Siri 泄露隐私事件致歉;Apache Tomcat 9.0.24 发布 | 极客头条...
  8. 30万奖金等你拿!Apache Flink 极客挑战赛入门指南(附Demo)
  9. nodeJS+bootstarp+mongodb整一个TODO小例子
  10. 计算机培训通知,关于开展上海师范大学2018年计算机办公自动化免费培训的通知...
  11. ASAN Pass源码分析(六)——全局变量插桩
  12. 微信朋友圈python广告评论_利用Python让你的微信朋友圈与众不同,更加高大上
  13. SpringMVC学习日志
  14. 详解统计指标PV、IP、UV、VV
  15. Android淘宝第三方登录
  16. Linux Control Groups (cgroups)
  17. konka电视怎么修改服务器,康佳网络电视如何升级 简单五步就搞定
  18. 2022制冷与空调设备运行操作考试题库模拟考试平台操作
  19. android heic图片,如何在安卓上查看HEIC图片的内容?
  20. 关于0“是不是自然数的了解

热门文章

  1. Latex, overleaf 输入中文 可行方法
  2. truct in6_addr has no member named in6_u
  3. VisionMaster 4.0.0 的Modbus通信
  4. 2012系统架构设计师考试大纲
  5. 官网生成spring-boot工程启动直接结束
  6. 硕士阶段总结《科苑行》之科研论文
  7. java 对Excel 操作 例子(下)
  8. Verilog设计_乘法器
  9. 从句中that可以省的情况
  10. 怎么查看当前登录的svn账号_svn 用户名,密码 查看/删除方法