0

私が維持/開発しているいくつかのウェブサイトでは、支払いゲートウェイとしてworldpayを使用しています。奇妙な問題を経験している人がいます。だから私はいくつかのものをログに記録しようとしましたが、実装したログは完全には機能しません。

ユーザーが経験する問題は、worldpay Webサイトにリダイレクトされることになっているため、magentoプラグインは非表示のフィールドを持つ単純なフォームを生成することです。次に、ページ読み込みイベントでフォームを送信します。フォームアクションのURLはworldpayのURLに設定されています。つまり、基本的には、注文情報がworldpayに送信されるPOSTリクエストです。

現在、一部の人々にとって、これは日常的に発生し、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秒以上経過した場合にajaxpostリクエストを作成してサーバーに記録することです。次に、フォームを再送信します。それは私にはかなり簡単に見えますが、まだたくさんのpplがあります。worldpayにアクセスせず、スクリプトによってログに記録されない人。一部のブラウザでは、フォームを送信した後、JavaScriptが信頼できない可能性がありますか?ブラウザが新しいページの読み込みなどを期待し始める前に。

また、ajax関数がそのページで機能するために必要なコンポーネントだけを備えた縮小されたjqueryフレームワークがあります。以前に書いたものがすべてのブラウザで機能するとは限らないと思って、必死になってgithubで見つけました。しかし、それはすべて同じです。

誰かが私がここで何をすべきかについて何かヒントがありますか?たぶん、このデータまたは何かをログに記録するための別のアプローチに関するアイデアですか?

4

1 に答える 1

0

このエラーの原因として最も可能性が高いのは、スクリプトを強制終了する JavaScript のバグがあるため、リダイレクトもログも記録されないことです。jQuery ajax リクエスト エラーが問題なく飲み込まれてしまうことに注意し、できるだけ多くのブラウザーでコードが動作することを確認してください。

window.onerror でイベント ハンドラーを登録することにより、ページでスローされたエラーのログを一時的に試すことができます。すべてのブラウザーがこのイベントをサポートしているわけではなく、すべてのエラーでトリガーされるわけではありませんが、独自のテストでこれらを自分で特定できない場合に、クライアントの JavaScript エラーをプローブするための開始点を提供します。

于 2012-08-20T13:43:00.177 に答える