android 调起h5页面微信支付

原创 2017年10月31日 16:17:26

最近在做app的支付功能。具体过程在app中获取后台支付url(聚合支付)直接调起微信支付页面。app向webview传入url直接调起网页。以下为webview的部分代码:

webView.getSettings().setJavaScriptEnabled(true);//支持js 
webView.setWebViewClient(new WebViewClient());//对webview页面加载管理、如url重定向
private WebViewClient webViewClient = new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("weixin://")) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                startActivity(intent);
                return  true;
            }
            return false;
        }
    };

先简单分析一下上面的代码,webViewClient 类是对于网页中url加载和重定向的拦截,当url以weixin://开头就对他进行处理跳转到微信页面。为什么会有这种处理,这就不得不说一下app的scheme机制。android中可以通过intent的隐式启动,添加相关界面activity的包路径,来打开对应的应用和界面。但别人的app包路径不通过逆向手段是无法获取到的,并且有些界面需要传递一些参数,所以这种方法很难实现。因此scheme应运而生,开发商提供一个scheme供其他应用进入。
方法很简单在AndroidManifest.xml文件中的activity标签中添加intent-filter,并且添加data的scheme、host等。

<activity android:name=".module.user.ui.LoginAct"
            android:screenOrientation="portrait">
            <intent-filter>
                <data android:scheme="test"
                    android:host="hello">
                </data>
            </intent-filter>
        </activity>

上面的代码产生的scheme为test://hello

String url = "test:/hello" 
 Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(in);

当然也可以传递参数

String url = "test:/hello?key=传递的参数" 
 Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(in);

在目的页面进行接收

Intent intent = getIntent();
        String scheme = intent.getScheme();
        Uri uri = intent.getData()
        if (uri != null) {
            String host = uri.getHost();
            //获得参数值
            String key1 = uri.getQueryParameter("key1");
      }

言归正传,我在开发的时候跳转不过去,截取到的url是intent://开头的,经过测试发现在chrome浏览器是无法跳转的,其他浏览器可以,但webview正好是chrome内核。。。
这是通过网页的形式启动app,以前通过网页启动 app 是通过设置 iframe 的 src 属性例如

<iframe src="paulsawesomeapp://page1"> </iframe>

此方法适用 version 18 或者更早版本。其他 android 浏览器也适用。 这个功能在安卓 chrome 浏览器 version 25 之后版本发生了改变。不能在通过设置 iframe 标签的 src 属性来启动 app 了。取而代之的是你应该通过自定义 scheme 实现用户手势启动 app 或者使用本文描述的“intent:”语法。
所以上面程序修改成:

private WebViewClient webViewClient = new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("intent://")) {
                Intent intent = Intent.parseUri(uri);  
                intent.addCategory("android.intent.category.BROWSABLE");  
                intent.setComponent(null);   
                intent.setSelector(null);   
                startActivity(intent);
                return  true;
            }
            return false;
        }
    };

感谢Android 解析 Intent 协议并打开程序

版权声明:本文为博主原创文章,未经博主允许不得转载。

访问微信h5支付中的mweb_url支付跳转链接,一片空白

h5支付是微信2107年下半年推出来的一种支付方式, 可以让你的h5网站在移动设备上调用微信支付接口, 实现用户在线支付功能。 一、 获得mweb_url支付跳转链接 在进行微信h5支...
  • towtotow
  • towtotow
  • 2018年01月06日 11:35
  • 1176

微信H5支付接口开发步骤

接口流程图 1、用户在商户侧完成下单,使用微信支付进行支付 2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB 3、统一下单接口返回支付相关参数给商户...
  • paymm
  • paymm
  • 2017年06月13日 17:11
  • 12467

微信支付-公众号支付H5调用支付详解

最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验。...
  • fengshizty
  • fengshizty
  • 2015年05月11日 11:14
  • 47780

微信H5支付接口开发步骤

接口流程图 1、用户在商户侧完成下单,使用微信支付进行支付 2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB ...
  • paymm
  • paymm
  • 2017年09月13日 14:24
  • 1661

Android使用微信H5支付

有一种奇特的需求叫做,在app上使用h5支付。这个实际上是有优势的,比如有多个app要做微信支付,只要h5做一套就可以全部通用。网上搜了一圈,讲的有很多,但是都不太细致,有些坑没有说。下面是我的实现:...
  • u012185875
  • u012185875
  • 2017年09月01日 15:03
  • 4585

【Android】解决微信调起支付接口没反应,调不起来微信的问题

前言吐槽一下,微信支付的sdk真难用,文档混乱,坑不少。可能引起这种情况的问题1. 最不能出现的你的APPID和商户号写错了。appid是你open.weixin.qq.com里你设置的应用的id。2...
  • catshitone
  • catshitone
  • 2017年06月23日 10:49
  • 5214

Android的Webview中H5支付调起微信支付

1.问题 之前在app中集成过微信支付,此种微信支付方式为app支付,即在我们自己的应用中嵌入微信支付SDK,由Native代码调起微信支付。 后来由于业务需要在我们app的WebView中打开自...
  • fuzhongbin
  • fuzhongbin
  • 2017年08月14日 15:21
  • 8278

Android通过外部浏览器调用微信H5支付,Android+PHP详解

看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧。 微信官方体验链接:http://wxpay.wxu...
  • t6546545
  • t6546545
  • 2017年08月16日 23:44
  • 3355

安卓非微信内置浏览器中的网页调起微信支付的方案研究

问题来源 之前在app中集成过微信支付,此种微信支付方式为app支付,即在我们自己的应用中嵌入微信支付SDK,由Native代码调起微信支付。 后来由于业务需要在我们app的WebView中打开第...
  • huangwenkui1990
  • huangwenkui1990
  • 2016年07月13日 13:39
  • 10819

Android中微信支付的调用方法

商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。本文讲解Android微信支付...
  • qq_28963915
  • qq_28963915
  • 2016年05月19日 17:44
  • 4313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 调起h5页面微信支付
举报原因:
原因补充:

(最多只允许输入30个字)