0

e コマース Web サイトの WorldPay からのコールバックの検証に問題があります。

ドキュメントによると、 WorldPay は、トランザクションが成功した場合、値が「Y」の「transStatus」という名前のパラメーターを POST する必要があります。

これは簡単に思えるので、この値を探す簡単な検証関数を作成しました。

private function validateRequest() {
    if ($_POST['transStatus'] == "Y"){
            return true;
        } else {
            throw new Exception("Transaction failed");
            die();
        }
    }
}

コールバック ページが実行されると、この関数は次のような try で呼び出されます。

 try {$this->validateRequest()}
    catch (Exception $e) {
        mail("email@address.com", $e->getMessage(), $e->getTraceAsString());
        throw new Exception("Could not validate payment.")
        die();
    }

残念ながら、この WorldPay をテストすると、支払いは正常に処理されますが、コードの残りの部分では注文が完了しません。ログ ファイルを確認しましたが、例外やエラーを確認できません。

ここから取るべき最善のアプローチは何ですか?この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

誰かが同様の問題に遭遇し、将来これに出くわした場合に備えて、これをどのように解決したかを次に示します。

$_POST の内容を確認したところ、単に "Y" ではなく "Y\n" を受け取っていることがわかりました。これが私がコードを置き換えたものです

if (strpos($_POST['transStatus'], 'Y') !== FALSE) { /* Order is verified */ } else { /* Order is not verified */ } 

できるように、コードは応答のどこかに 'Y' があるかどうかをチェックします。これは、worldpay が送信する可能性のある応答が 'Y'、'N'、'C' の 3 つしかないためです。

于 2014-03-10T11:32:08.290 に答える