1. ホーム
  2. php

[解決済み] POSTデータによるPHPリダイレクト

2022-04-02 14:06:03

質問

このテーマについて調べてみたところ、専門家の間では 可能 ということで、代替案をお願いしたいのですが。

私の状況

ページ A: [checkout.php] 顧客が請求書詳細を入力する。

ページB: [process.php] 請求書番号を生成し、顧客の詳細をデータベースに保存します。

ページC: [thirdparty.com] 第三の支払ゲートウェイ(ONLY ACCEPT POST DATA)。

顧客はページAで詳細を入力し、カートを設定した後、ページBにPOSTします。process.php内部で、POSTされたデータをデータベース内に保存し、請求書番号を生成します。その後、顧客データと請求書番号をthirdparty.comの支払いゲートウェイにPOSTします。問題は、ページBでPOSTを行うことです。cURLはページCにデータをPOSTすることができますが、問題はページがページCにリダイレクトされないことです。

サードパーティの決済ゲートウェイからAPIのサンプルをもらいましたが、そのサンプルは請求書番号と顧客の詳細情報をPOSTするものでした。 システムで不要な請求書番号を過剰に生成しないようにしたいのです。

何か解決策はあるのでしょうか? 私たちの現在の解決策は、顧客がページAで詳細を記入し、ページBで我々はそこにすべての顧客の詳細を示す別のページを作成し、ユーザーがページCにPOSTするためにCONFIRMボタンをクリックすることができますされています。

私たちの目標は、お客様が1回クリックするだけで済むようにすることです。

私の質問が明確であることを願っています :)

どのように解決するのですか?

ページBに必要なデータとページCへのアクションを設定したフォームを生成し、ページロード時にJavaScriptで送信します。ユーザーの手を煩わせることなく、データはページCに送信されます。

これしかないでしょう。リダイレクトとは、303 HTTPヘッダーのことで、これを読むと http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html が、その一部を引用します。

<ブロッククオート

リクエストに対するレスポンスは は別のURIで見つかり、そのURIを使用すべきです。 のGETメソッドで取得することができます。 そのリソースの このメソッドは の出力を可能にするためです。 POSTで起動されたスクリプトをリダイレクトするために ユーザーエージェントを選択したリソースに このとき 新しいURIは代替参照ではありません。 は、元々要求されたリソースのためのものである。 303応答はキャッシュされてはならない[MUST NOT]。 しかし、2番目の (リダイレクトされた) リクエストは キャッシュ可能です。

あなたがやっていることを実現する唯一の方法は、ユーザーをページCに送る中間ページを使うことです。以下は、それを実現するための小さな/簡単なスニペットです。

<form id="myForm" action="Page_C.php" method="post">
<?php
    foreach ($_POST as $a => $b) {
        echo '<input type="hidden" name="'.htmlentities($a).'" value="'.htmlentities($b).'">';
    }
?>
</form>
<script type="text/javascript">
    document.getElementById('myForm').submit();
</script>

また、Javascriptを使用しないユーザーでもサービスを利用できるように、noscriptタグ内に簡単な確認フォームを用意する必要があります。