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
    评论
通过flutter的webview_flutter插件,我们可以在应用中嵌入支付宝微信支付,并实现支付功能。使用webview_flutter的步骤如下: 1. 首先,在`pubspec.yaml`文件中引入webview_flutter插件。可以在dependencies部分添加`webview_flutter: ^2.0.0`,然后运行`flutter pub get`命令进行依赖安装。 2. 在需要嵌入支付功能的页面中,导入webview_flutter插件。在页面的顶部引入`import 'package:webview_flutter/webview_flutter.dart';`。 3. 在页面的主体中,创建一个WebView组件,并指定需要加载的URL。例如,在Container中使用WebView组件,可以使用如下代码: ```dart Container( child: WebView( initialUrl: 'https://www.alipay.com/', javascriptMode: JavascriptMode.unrestricted, ), ) ``` 4. 在支付宝微信支付的URL中,传递相关的支付参数,例如订单号、支付金额等。 5. 在WebView组件中,可以通过注册一个JavaScript channel来监听网页中的支付回调信息。例如,在页面初始加载完成后,可以通过使用`onPageFinished`回调方法来执行一段JavaScript代码,监听支付结果。在该代码中,可以通过调用与原生平台交互的方法,将支付结果返回到Flutter中进行处理。 6. 在Flutter中,可以根据支付结果展示相关的提示信息,例如支付成功支付失败等。 需要注意的是,支付宝微信支付的具体接口和参数可能会根据版本的更新而有所变化,所以在代码实现中需要根据最新的文档进行调整。同时,为了确保支付过程的安全性,建议在应用中对支付接口进行适当的安全设置,例如使用HTTPS协议,并对支付参数进行加密处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值