0

在我维护/开发的几个网站中,我们使用 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 上找到了它,认为我之前写的内容不适用于所有浏览器。但这都是一样的。

有人对我应该在这里做什么有任何提示吗?也许对记录这些数据的不同方法有什么想法?

4

1 回答 1

0

错误的最可能原因是有一个杀死脚本的 JavaScript 错误,因此您没有重定向和日志记录。当心 jQuery ajax 请求错误被吞并没有问题,并确保您检查您的代码在尽可能多的浏览器中工作。

您可以通过使用 window.onerror 注册事件处理程序来临时尝试记录页面上抛出的错误。并非所有浏览器都支持此事件或将触发所有错误,但如果您无法通过自己的测试自行识别这些错误,它会为您在客户端上探测 JavaScript 错误提供一个起点。

于 2012-08-20T13:43:00.177 回答