android微信和支付宝h5支付[INFO:CONSOLE(98)] "Uncaught ReferenceError:

后端写好h5页面之后  需要Android段使用webview调用然后转native调起微信和支付宝进行支付

h5的就不说了,Android端只要设置WebViewClient重写shouldOverrideUrlLoading()就可以了,拦截方法里面处理微信或者支付宝的代码相信各位都能从网上搜到,网上同时处理支付宝和微信的代码大多数都是错的,主要原因就是判断是支付宝支付还是微信支付的方法不对,我总结了一下,亲测可用。

wvPay.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, String url) {
        
        if (url.startsWith("https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb")) {
            Map<String, String> extraHeaders = new HashMap<>();
            extraHeaders.put("Referer", "这里填写后台提交的微信支付回调的网址");
            view.loadUrl(url, extraHeaders);
            return true;
        } else if (url.startsWith("weixin://wap/pay?")) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
            return true;
        } else {
            if (!(url.startsWith("http") || url.startsWith("https"))) {
                return true;
            }
            /**
             * 推荐采用的新的二合一接口(payInterceptorWithUrl),只需调用一次
             */
            final PayTask task = new PayTask(PayActivity.this);
            boolean isIntercepted = task.payInterceptorWithUrl(url, true, new H5PayCallback() {
                @Override
                public void onPayResult(final H5PayResultModel result) {
                    // 支付结果返回
                    final String url = result.getReturnUrl();
                    if (!TextUtils.isEmpty(url)) {
                        PayActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                view.loadUrl(url);
                            }
                        });
                    }
                }
            });
            if (!isIntercepted) {
                view.loadUrl(url);
            }
            return true;
        }
    }
});

这样处理就可以了  然后记得设置websetting

WebSettings settings = wvPay.getSettings();
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);

在最后在说一个问题,遇到过低版本android系统无法调起支付的问题,shouldOverrideUrlLoading()这个方法都不进来,不要慌,是h5的问题,日志可以看到

[INFO:CONSOLE(98)] "Uncaught ReferenceError: $SERVERURL is not defined", source: e: e: http://d11.cto.shovesoft.com/res/js/youkedaPay.js (98 (98 (98)

然后在网上搜是js调用顺序的问题,具体的大家去搜吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值