我们的付款网关提供了一个嵌入式窗口小部件,我们可以在付款页面上使用。他们有一个javascript事件,当用户点击"现在付款"按钮,我们可以在卡提交到支付网关之前运行一些JavaScript代码。如果我们从此函数返回true,则将提交卡数据,但如果我们返回false,则不会提交卡数据。
当买家点击“#34;立即付款”时,我们希望对我们的服务器进行AJAX调用。并在继续将支付数据提交给支付网关之前更改有关购买的一些信息。但是,此调用是异步的,因此在成功调用后返回true不起作用。
这是我们使用的代码。支付网关支付脚本使用wpwlOptions。我们正在使用Angular。 onBeforeSubmitCard是问题的所在,我们没有办法改变支付网关如何处理它,它想要的只是真或假。
window.wpwlOptions = {
style: "plain",
onReady: function() {
$scope.checkouted=true;
$scope.$apply();
},
onBeforeSubmitCard: function () {
paymentService.extendCheckout(checkoutData).then(function (response) {
if (response.extendedUntil) {
console.log(response);
return true;
}
else {
tpBootstrapUtilities.showErrorPopup({ message: 'An error occurred, please contact support@ticketpony.co.za' });
return false;
}
}, function () {
$scope.failed = true;
tpBootstrapUtilities.showErrorPopup({ message: 'An error occurred, please contact support@ticketpony.co.za' });
return false;
});
}
};
然后来自paymentService的extendCheckout如下:
extendCheckout: function (data) {
var deferred = $q.defer();
$http({
url: ENVIRONMENT_CONSTANTS.SERVICES_URI + SYSTEM_CONSTANTS.SERVICES.PAYMENT + '/extend',
method: 'POST',
data: data
}).success(function (response) {
deferred.resolve(response);
}).error(function (response) {
deferred.reject(response);
});
return deferred.promise;
},
由于