科尔多瓦中的 inappbrowser 不从弹出窗口返回 3ds 支付数据

问题描述

我有一个移动应用,它在科尔多瓦的 inappbrowser 上使用结账付款。

当我按下付款时,它会向我显示带有按钮的付款页面,我按下按钮并打开一个模式,客户在其中输入他的卡付款信息,输入所有信息后,他按下继续按钮,然后出现一个用于 3ds(3d 安全)验证的弹出窗口,一旦我验证了交易并且它应该返回应用程序来验证订单,它就会卡在一个白页上,就好像返回付款信息时出错一样。

如果有人可以,请帮助我解决这个问题。

这是显示该过程的视频的链接https://drive.google.com/file/d/17Ujdz_-kfvAscM4H3ZjUvHvE2IJHqoHb/view?usp=sharing

我的 app.js 文件中与 appbrowser 中的付款相关的代码函数

payWebview = function(url){ 如果(!krms_config.debug){ inapp = cordova.InAppbrowser.open( url,'_blank','location=no,footer=yes,footercolor=#000000,closebuttoncaption=X,closebuttoncolor=#ffffff,EnableViewPortScale=no,hidden=no');

 inapp.addEventListener('loadstart',function() {
  showLoader(true);
 });
 
 inapp.addEventListener('loadstop',function(event){      
   inapp.show();
   showLoader(false);
   
         url = event.url;
         var res = url.match(/success/gi);
         if(!empty(res)){
           inapp.executeScript({
              code: "document.documentElement.innerText"
           },function(html) {                
              inapp.close();
              
              setTimeout(function(){
          $graphical = isTrackingGraphical();
                        
          if($graphical){
            showLoader(true,'modal_order_sent');
            setTimeout(function(){
              processAjax('getordergraphical','order_id=' + getStorage("global_receipt_order_id") );
            },2*1000);                 
          } else {
            var options = { 
              "order_id" : getStorage("global_receipt_order_id"),"total_amount" : getStorage("global_receipt_amount_pay"),'message': getStorage("global_receipt_message")
            };  
            onsenNavigator.pushPage('receipt.html',{
              animation : "slide",data : options
            });  
          }
                },1);                                
              
           });
         }
         
         var error = url.match(/error/gi);
         if(!empty(error)){
           inapp.executeScript({
              code: "document.documentElement.innerText"
           },function(html) {
              inapp.close();
              showAlert(html);
           });
         }
         
         var cancel = url.match(/cancel/gi);
         if(!empty(cancel)){
            inapp.close();
         }
         
     });
} else {
    //window.open(url);
  window.open( url,hidden=no');
}   

};

    case "init_webview":
      setStorage("global_receipt_order_id",data.details.order_id );   
      setStorage("global_receipt_amount_pay",data.details.total_amount );   
      setStorage("global_receipt_message",data.msg );   
              
      payWebview( data.details.redirect_url);   
    break;

当支付卡没有 3ds​​ 验证时,该过程成功完成。

提前感谢您的帮助

解决方法

弹出窗口在 Cordova inapp 浏览器插件中不起作用。 即,如果您在应用内浏览器中打开的页面调用 window.open(url,'_blank'),它将无法工作。

但如果您加载到 inappbrowser 的页面使用 Braintree JS SDK 作为其支付解决方案,那么有一个可能的解决方案:

Braintree 为 iOSAndroid 创建了一个“PopupBridge”扩展,它扩展了原生 web 视图,以在应用内浏览器的上下文中提供对弹出窗口的模拟支持。

cordova-plugin-inappbrowser-popup-bridge 插件扩展了官方 cordova-plugin-inappbrowser 插件以包装本机 Braintree PopupBridge 扩展,为适用于 Android 和 iOS 的 Cordova 应用程序提供解决方案。 我已在生产应用中广泛使用此方法,并确认该方法与 Braintree JS SDK 结合使用时适用于 PayPal 和 3d 安全弹出窗口。

但是,如果您的支付服务提供商不是 Braintree,我无法为您提供解决方案。

免责声明:我是cordova-plugin-inappbrowser-popup-bridge

的作者