在我维护/开发的几个网站中,我们使用 worldpay 作为支付网关。我们有些人遇到了奇怪的问题。所以我尝试记录一些东西,但我实现的日志记录并不能很好地工作。
用户遇到的问题是他们应该被重定向到 worldpay 网站,因此 magento 插件会生成一个带有隐藏字段的简单表单。然后在页面加载事件中提交表单。表单操作 url 设置为 worldpay url。因此,它基本上是一个将订单信息发送到 worldpay 的发布请求。
现在对于某些人来说,这种情况每天都会发生,worldpay 网关永远不会加载。他们被困在一个带有隐藏表单的页面上,上面写着请等待我们重定向您。我们让人们在实际被重定向之前等待几分钟。
每当用户在表单上花费超过 3 秒时,我决定开始记录该表单中的各种内容。所以我转向 javascript 这就是我所做的:
<body onload="javascript:document.worldpay_checkout.submit()">
然后我有这些行
function timerFunction(){
var dataObj = {};
for (var i = document.worldpay_checkout.elements.length - 1; i >= 0; i--){
dataObj[document.worldpay_checkout.elements[i].name] = document.worldpay_checkout.elements[i].value;
}
dataObj["BrowserCodeName="] = navigator.appCodeName;
dataObj["BrowserName="] = navigator.appName;
dataObj["BrowserVersion="] = navigator.appVersion;
dataObj["CookiesEnabled="] = navigator.cookieEnabled;
dataObj["Platform="] = navigator.platform;
dataObj["UserAgentHeader="] = navigator.userAgent;
$.post("/worldpaylog/worldpaylog.php", dataObj, function(data) {
document.worldpay_checkout.submit();
intervalId = self.setInterval('timerFunction()',5000);
});
self.clearInterval(intervalId);
}
var intervalId = self.setInterval('timerFunction()',3000);
我尝试做的是获取表单元素和一些浏览器信息,并在超过 3 秒后通过发出 ajax 发布请求将其记录在服务器上。然后我重新提交表格。对我来说这看起来很简单,但仍然有很多人。没有进入 worldpay 并且没有被脚本记录的人。可能是在某些浏览器上,javascript 在提交表单后不可靠吗?在浏览器开始期待新的页面加载或其他任何事情之前。
此外,还有一个缩小的 jquery 框架,其中仅包含 ajax 函数在该页面上工作所需的组件。出于绝望,我在 github 上找到了它,认为我之前写的内容不适用于所有浏览器。但这都是一样的。
有人对我应该在这里做什么有任何提示吗?也许对记录这些数据的不同方法有什么想法?