WebView H5支付跳转原生(支付宝微信平台)

网页里支付,如果嵌在webview内,支付是会出现问题的。
1、支付宝支付
现在很多解决方案的文章,都比较老旧,并不能完善解决问题。
需要参考:
https://opendocs.alipay.com/open/203/106493
但是,该文档里面,对应的aar是16年的版本,需要自己去这个链接里找对应的最新版本的:https://opendocs.alipay.com/open/54/104509
注意匹配sdk版本,修改manifest文件

2、微信支付
微信支付的话,需要自行去匹配一下url

        if (url.startsWith("https://wx.tenpay.com")) {
            //H5微信支付要用,不然说"商家参数格式有误"
            HashMap<String, String> lStringStringHashMap = new HashMap<>();
            if (!TextUtils.isEmpty(mReffer)) {
                lStringStringHashMap.put("referer", mReffer);
                view.loadUrl(url, lStringStringHashMap);
            } else {
                view.loadUrl(url, lStringStringHashMap);
            }
            return true;
        }

        if (url.startsWith("weixin://")) {//微信schema直接跳转
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }

最终,给一下全部的代码吧:
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
Log.i(“ZHIFU-”, url);
Log.i(“ZHIFU-mReffer”, mReffer);

        if (url.startsWith("https://wx.tenpay.com")) {
            //H5微信支付要用,不然说"商家参数格式有误"
            HashMap<String, String> lStringStringHashMap = new HashMap<>();
            if (!TextUtils.isEmpty(mReffer)) {
                lStringStringHashMap.put("referer", mReffer);
                view.loadUrl(url, lStringStringHashMap);
                Log.i("ZHIFU-mReffer", "load");
            } else {
                view.loadUrl(url, lStringStringHashMap);
            }
            return true;
        }

        if (url.startsWith("weixin://")) {//微信schema直接跳转
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }

        /**
         * 推荐采用的新的二合一接口(payInterceptorWithUrl),只需调用一次
         */
        final PayTask task = new PayTask(WebViewActivity.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)) {
                    WebViewActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            view.post(() -> view.loadUrl(url));
                        }
                    });
                } else {
                    view.post(() -> view.loadUrl(mainUrl));
                }
            }
        });

        /**
         * 判断是否成功拦截
         * 若成功拦截,则无需继续加载该URL;否则继续加载
         */
        if (!isIntercepted) {
            view.loadUrl(url);
        }
        return true;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值