第三方商户调起支付宝出现 alipays://platformapi
来源:互联网 发布:java 项目的根目录 编辑:程序博客网 时间:2024/04/30 00:31
前言:
很久没有写过博客了,主要是因为之前一直在学习RN和web相关的知识,以及工作上的原因忙不过来,没有坚持了,现阶段终于有时间来写写博客了。
这次要分享的内容也是前不久项目中出现的一个问题,项目中有一块功能是需要与第三方商户合作,通过访问他们提供的h5页面来调起我们自己手机端的支付宝。先上一个出现错误的异常图
可以看到 url是由‘’alipays‘’开头的,由于我们的webview是无法识别这个(只能识别http/https开头的),所以要对这个操作进行拦截,也就是通过我们webview的setWebViewClient()方法,重写WebViewClient的shouldOverrideUrlLoading(WebView view, String url)中进行拦截.
//判断网络连接 if (!NetUtil.checkNetIsAccess(context)) { loading.setLoadStop(false, null, R.string.no_connect); } if(url.contains("alipays://platformapi")){ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); } else { view.loadUrl(url); LogUtil.d("url", url); }
shouldOverrideUrlLoading(WebView view, String url)中具体执行的代码就在上面。但是这样处理的话,可能就
会出现一种情况,因为这段代码是优先调起手机上的支付宝app的,在手机上没有安装支付宝app的时候,可能就会
出现异常,当时我就觉得奇怪了,为什么会这样,因为以上的处理方案也是在网上查找到的资料。后来通过与客服沟
通,可能原因是出在商户集成了第三方软件,然后该软件hook了系统的openurl函数导致的。原因是找到了,但是我们
这边不可能要求商户去改他们的第三方软件,所以只能我们这边处理。
主要是因为手机上没有安装支付宝app,所以可以从这里下手,我们可以先判断手机上是否安装了支付宝app,安装
了,就执行上图的代码。
判断手机上是否安装支付宝app:
//判断是否安装支付宝app public static boolean checkAliPayInstalled(Context context) { Uri uri = Uri.parse("alipays://platformapi/startApp"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); ComponentName componentName = intent.resolveActivity(context.getPackageManager()); return componentName != null; }
通过以上的判断来处理shouldOverrideUrlLoading(WebView view, String url)中的拦截事件
if(url.contains("alipays://platformapi")){ boolean visit = checkAliPayInstalled(mContext); if(visit){ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); } }
这问题当时困扰了好久,一直在排查我们这边项目的代码,后来才知道原来是商户那边的问题,通过以上的方式就
处理了当自定义url是 alipays 开头的时候,并且手机上不存在支付宝app时,能够正常调起h5的支付宝登录页。
阅读全文
1 0
- 第三方商户调起支付宝出现 alipays://platformapi
- 商户入网第三方支付——易宝之PC端支付流程
- 银汇通支付:第三方支付POS机备受商户青睐
- 商户入网第三方支付——支付接口
- 第三方支付架构设计之:商户回调通知系统的悲观和乐观策略
- 第三方支付宝支付
- 第三方支付宝支付
- 调起第三方app
- iOS 第三方支付 支付宝支付
- 第三方支付之支付宝支付
- 第三方支付之支付宝支付
- 第三方支付支付宝支付
- intent://platformapi/startapp?--Webview内跳转到支付宝网页
- 集成第三方支付宝
- Android支付宝第三方
- 支付宝第三方登录
- iOS第三方支付(支付宝SDK)
- iOS第三方支付(支付宝)
- 通过广播更新RecyclerView
- 关于java中的synchronization与volatile关键字
- TortoiseSVN安装步骤
- Linux时间函数之gettimeofday()函数之使用方法
- iOS的应用中集成QQ第三方登录获取相关信息
- 第三方商户调起支付宝出现 alipays://platformapi
- jQuery选择器总结
- B1018. 锤子剪刀布 (20')
- Blog for django
- 高频电感器的作用
- error C2065:未声明的标识符错误
- Swift实现单例模式
- ubuntu16.04安装windows7双系统
- bootstrap表格内容过长时用省略号表示