首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cordova中的inappbrowser未从弹出窗口返回3ds支付数据

cordova中的inappbrowser未从弹出窗口返回3ds支付数据
EN

Stack Overflow用户
提问于 2021-03-01 20:08:11
回答 1查看 210关注 0票数 0

我有一个在cordova的inappbrowser上使用结账支付的移动应用程序。

当我按下支付,它显示我的支付页面与一个按钮,我按下按钮和模式打开,在那里客户输入他的卡支付信息,一旦所有的信息输入,他按下继续按钮和3ds (3D-安全)验证弹出出现,一旦我验证交易,它应该回到应用程序来验证订单,它卡住在一个白色页面,好像有一个错误返回付款信息。

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

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

我的app.js文件中的代码和函数与应用浏览器中的支付相关。

payWebview =函数( url ){ if ( !krms_config.debug ){ inapp = cordova.InAppBrowser.open( url,‘_payWebview’,'location=no,footer=yes,footercolor=#000000,closebuttoncaption=X,closebuttoncolor=#ffffff,EnableViewPortScale=no,hidden=no‘);

代码语言:javascript
复制
 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  , '_blank', 'location=no,footer=yes,footercolor=#000000,closebuttoncaption=X,closebuttoncolor=#ffffff,EnableViewPortScale=no,hidden=no');
}   

};

代码语言:javascript
复制
    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验证时,流程成功完成。

提前感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2021-03-01 22:21:29

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

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

Braintree为iOSAndroid创建了一个"PopupBridge“扩展,它扩展了原生webviews,以在应用内浏览器的上下文中提供对弹出窗口的仿真支持。

cordova-plugin-inappbrowser-popup-bridge插件扩展了官方的cordova-plugin-inappbrowser插件,包装了原生的Braintree PopupBridge扩展,为同时在安卓和iOS上工作的科尔多瓦应用程序提供了一个解决方案。我已经在生产应用程序中广泛使用了这种方法,并确认当与Braintree JS SDK结合使用时,该方法适用于PayPal和3d-secure弹出窗口。

然而,如果您的支付提供商不是Braintree,我没有为您提供解决方案。

作者:我是cordova-plugin-inappbrowser-popup-bridge的作者

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66421879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档