inappbrowser在cordova不返回3ds支付数据从弹出



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

当我按支付,它向我展示了支付页面的按钮,我按下按钮,将打开一个模态的客户进入他的信用卡支付信息,一旦所有的信息输入,他按下继续按钮,弹出3 ds (3 d-secure)验证,一旦我验证事务和它应该回到应用程序来验证订单,它被困在一个白色的页面,如果有错误返回付款信息。

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

这里是一个视频链接,展示了这个过程:https://drive.google.com/file/d/17Ujdz_-kfvAscM4H3ZjUvHvE2IJHqoHb/view?usp=sharing

我的app.js文件中与inappbrowser支付相关的代码和函数。

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  , '_blank', 'location=no,footer=yes,footercolor=#000000,closebuttoncaption=X,closebuttoncolor=#ffffff,EnableViewPortScale=no,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创建了一个"popupbridge"为iOS和Android扩展了原生的webviews,在应用内浏览器的上下文中为弹出窗口提供模拟支持。

Cordova -plugin-inappbrowser-pop -bridge插件扩展了官方的Cordova -plugin-inappbrowser插件来包装原生的Braintree PopupBridge扩展,为Cordova应用提供了一个在Android &iOS。我已经在生产应用程序中广泛使用了这种方法,并确认当与Braintree JS SDK一起使用时,这种方法适用于PayPal和3d-secure弹出框。

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

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

最新更新