HTML では、フォームを作成して入力データを入力し、それを POST として宛先に送信できます。これは、送信とリダイレクトを同時に行い、宛先が両方を同じものとして検出することを意味します。cURL を使用して同じことをしたいです。つまり、cURL を使用してデータを投稿すると、header() のようなものを使用してリダイレクトできるはずであり、HTML フォームでプロセスが定期的に行われたように宛先が動作します。
出来ますか ?!
はい、次のオプションを使用して、cURL にリダイレクトをたどらせることができます。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
マニュアルから:
CURLOPT_FOLLOWLOCATION
サーバーが HTTP ヘッダーの一部として送信する "Location: " ヘッダーに従う場合は TRUE (これは再帰的であることに注意してください。CURLOPT_MAXREDIRS が設定されていない限り、PHP は送信された "Location: " ヘッダーと同じ数に従います)。
あなたがやりたいことは、次のようなものだと思います。
Client --> Server A
Server A --> POST --> Server B
Client <------------------------ Server B
たとえば、クライアントは、サーバー A が知っているパスワードを知らなくてもサーバー B にログインできます。
もしそうなら、あなたは似たようなことをすることができますが、あなたが望むものとは正確には異なります(ただし、OpenIDのようなもので、OpenIDで解決できる可能性があります)。
サーバー A で POST を実行して応答を受信し、その応答をクライアントに送信できます。残念ながら、おそらく Cookie を設定することはできず (Cookie は A サブドメインに対して有効であり、サーバー B には送信されなくなります)、同様の理由でセッションが機能しない可能性があります。
サーバー A を完全なプロキシとして機能させることができる場合があります。この回答を参照してください。Cookieログインが必要な Web サイトから PHP で Web サイトのコンテンツをスクレイピングするにはどうすればよいですか? .
ほとんどの銀行には、まさにそれを行うための API があります (Paypal は、銀行でなくても、そうですし、WorldPayもそうです)。
考えられるワークフローの 1 つは、すべてのデータを銀行に送信することです。銀行は一意の ID で応答します。次に、特別な URLと一意の IDを使用して顧客をリダイレクトするときに、すべての情報を自分で表示するか、銀行が顧客に情報を表示します (銀行が好む) 。
顧客は自分のフォームのデータを変更できますが、トランザクションを中止するしかありません。2 つのデータ コピーが一致しなくなり、送信されたコピーに触れることはできません(もちろん、他の方法やワークフローも存在します)。 .
あなたのシステムがこのワークフロー (または同様のもの) に従って動作し、銀行独自の API と推奨されるプラクティスを使用している場合は、私の謝罪を無視して受け入れてください: あなたは正しいことをしています. でも念のため、そうでない場合は、よく考えてください。
cURL を使用してカスタム ワークフローを作成することはおそらく可能ですが (一部の銀行では確実に可能です)、独自の暗号化を導入することに疑いの余地があり、銀行によるサポートが少なくなる可能性が高く、銀行の一部です (例を挙げると、多くの支払いが同じ IP アドレスまたは範囲から行われているように見えます)。