Как получить ответ платежного шлюза в WebView с помощью flutter

#flutter #dart #webview #flutter-dependencies #flutter-web

#flutter #dart #webview #flutter-зависимости #flutter-web

Вопрос:

форма платежного шлюза загружается в webview с помощью flutter. когда я нажимаю кнопку оплаты, я не могу получить успешный или неудачный ответ. если это успешно, перейдите на главный экран.

Для собственного мобильного приложения получите ответ, используя addJavascriptInterface .Для flutter где реализовать обратный вызов addJavascriptInterface?

Может кто-нибудь, пожалуйста, помогите мне? Я застрял на последние 2 дня.

   WebView(              
        initialUrl:widget.webpageurl,
          javascriptMode: JavascriptMode.unrestricted,
        javascriptChannels: Set.from([
          JavascriptChannel(
              name: 'ReceiveIframeResponse',
              onMessageReceived: (JavascriptMessage message) {
                print('ReceiveIframeResponse${message.message}');
                var jsonData = jsonDecode(message.message);
                print('jsonData $jsonData');
                if(jsonData['status'] == 'CANCELLED'){
                  // Your code
                }else if(jsonData['status'] == 'SUCCESS'){
                  // Your code
                }
              })
        ]),
          onWebViewCreated: (WebViewController webViewController) {
            _controller.complete(webViewController);
          },
          onProgress: (int progress) {
            print("WebView is loading (progress : $progress%)");

          },
          onPageFinished: (finish) {
            setState(() {
              isLoading = false;
            });

            print("WebView is onPageFinished $finish");


          },

        onPageStarted: (data){
          print("WebView is onPageStarted $data");
        },

      ),
 

Ответ №1:

Вы можете использовать обратный вызов интерфейса javascript следующим образом,

 WebView(
      initialUrl: widget.webpageurl,
      javascriptMode: JavascriptMode.unrestricted,
      javascriptChannels: Set.from([
        JavascriptChannel(
            name: 'messageHandler',
            onMessageReceived: (JavascriptMessage message) {
              print(message.message);
              var jsonData = jsonDecode(message.message);
              if(jsonData['status'] == 'CANCELLED'){
                // Your code
              }else if(jsonData['status'] == 'SUCCESS'){
                // Your code
              }
            })
      ]),
      onWebViewCreated: (WebViewController webViewController) {
        
      },
    );
 

Вы можете использовать этот скрипт в своем HTML, например, который содержит функцию обратного вызова,

 <script type="text/javascript">  
    function myCallback(status) {
    var statusData = JSON.stringify(status);
        console.log(statusData)
        messageHandler.postMessage(statusData);
    }
</script>
 

Комментарии:

1. спасибо, можете ли вы, пожалуйста, помочь мне I / chromium (18630): [ИНФОРМАЦИЯ: КОНСОЛЬ (1)] «Нераспознанная функция: «оплата».», источник: js.stripe.com/v3 что такое ошибка