Flutter中使用WebView接入微信h5支付

需求: flutter项目中使用webView, webView中使用微信h5支付.

1. 方案1, 使用webview_flutter库(安卓失败)

webview_flutter: 0.3.22+1

 WebView(
            initialUrl: 'https://www.example.com',
            javascriptMode: JavascriptMode.unrestricted,
            navigationDelegate: (NavigationRequest request) async{
              var url = request.url;
              print('拦截URL = $url');
              if(url.startsWith("weixin://wap/pay?"))
              {
                   await launch(url);
                  return NavigationDecision.prevent;
              }
              return NavigationDecision.navigate;
            },
          

webView中接入微信h5支付, 正常只要拦截url(weixin://wap/pay?), 打开微信app即可。iOS中正常可以进行微信支付,但是在安卓手机上就坑了, 拦截之后, 打开微信后就报错(商家参数格式有误, 请联系商家解决), 前后端一切切配置都是正常的, 就是安卓报错.在这里插入图片描述

经过搜索发现安卓中的webView有一个参数 ignoreSSLErrors, 忽略SSL错误, 设置为true即可. 但是webview_flutter库里面并没有该参数, 故使用flutter_webview_plugin库.

方案2, 使用flutter_webview_plugin

把ignoreSSLErrors参数设置为true, 即可解决安卓中出现的问题


final _flutterWebviewPlugin = new FlutterWebviewPlugin();

WebviewScaffold(
                url: widget.url,
                withJavascript: true,
                clearCache: true,
                ignoreSSLErrors: Platform.isAndroid ? true: false,
              )


void initState() {

    _flutterWebviewPlugin.onStateChanged.listen((event) async{
      if (event.type == WebViewState.shouldStart) {//拦截即将展现的页面
        if (event.url.startsWith("weixin://")) {
          _flutterWebviewPlugin.stopLoading();//停止加载
          await launch(event.url);
          return;
        }
        if(event.url.startsWith("alipays://") || event.url.startsWith("alipay://")) {
          await launch(event.url);
        }
      }
   
    super.initState();
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
通过flutterwebview_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协议,并对支付参数进行加密处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值