3

私がこの質問をしているとは信じられませんが、ここに行きます....

(Codeigniter 内で PHP を使用)

Barclays EPDQ を e コマース サイトに統合して、クレジット カードでの支払いを受け付けています。支払いが成功すると、EPDQ は URL にクエリ文字列パラメータを渡してサイトにリダイレクトします。EPDQ から返送された orderID を探しています。ある場合は、PHP セッションにいくつかの情報を保存し、支払い確認ページにリダイレクトします。支払いが失敗した場合、注文 ID は存在しないため、CI ビュー ファイルを表示する支払い失敗メソッドにリダイレクトします。

このチェックおよびセッション保存ルーチンの条件は次のとおりです。

$success = false;

if($_GET['orderID'])
{
    $_SESSION['payment']['order_id']  = $_GET['orderID'];
    $_SESSION['payment']['method']    = 'card';
    $_SESSION['payment']['ref']       = $_GET['PAYID'];
    $_SESSION['payment']['status']    = 'Completed';

    $success = true;
}

(セッションが初期化され、このコードが実行される前に支払い配列が作成されることに注意してください)

ここまではかなり単純です。ルート案内のコードは次のようになります。

if(!$success)
{
    redirect('payment/card/fail');
}
else
{
    redirect('payment/confirmation');
}

私が抱えている問題は、このリダイレクトが期待どおりに機能しないことです。EPDQ は支払いの成功を報告し、必要に応じて当社のサイトにリダイレクトします。ただし、スクリプトが送信する GET パラメーターを評価してリダイレクトを実行するときは、常に失敗したリダイレクトを使用します.........これが本当に私を困惑させているビットです。これ:

if(!$success)
{
    exit('Failed');
    redirect('payment/card/fail');
}
else
{
    redirect('payment/confirmation');
}

(追加された「出口」に注意してください)。

この exit を含めると、コードはすべてのテスト ケースで必要に応じて実行され、支払い成功ページが表示されるようになります。exit を削除すると、すぐに 100% テストの失敗に戻ります。

これまで見たことがないので、なぜこれが起こっているのか、誰にもわかりませんか?

4

3 に答える 3

1

これが発生した理由は、メインの支払い応答の前に応答を送信していた Barclays EPDQ 内の設定の結果でした (これは、着信の成功または失敗に基づいてサイトをカスタマイズできるようにする事前応答応答です)。これは、最初のヒットで GET パラメータなしで 1 回、パラメータを含む完全な支払い応答が返されたときに 1 回、関数が 2 回ヒットしたことを意味します。出口を入れることは、最初のヒットで失敗したリダイレクトが実行されなかったことを意味し、スクリプトは成功条件を表示できました。EPDQ からこの事前応答を削除/設定解除すると、必要に応じてすべての条件が実行されるようになりました。

最終的には実際には PHP の問題ではありませんが、誰かが EPDQ の統合に取り組んでいて、EPDQ の管理インターフェイス内でこの応答を誤って設定した場合に注意してください。

于 2013-04-10T09:12:19.623 に答える