PHP 検証 - http POST 値をサードパーティのチェックアウトに転送します。

StackOverflow https://stackoverflow.com/questions/2187937

質問

これが可能かどうかはわかりません。他にヘルプガイドが見つからないようなので、不可能かもしれません...

サードパーティの支払いプロセッサ (WorldPay) に転送される変数のロードを POST するチェックアウト ページがあります。

検証のために 2 つのページの間に何らかの PHP スクリプトを挿入できるかどうかを知りたいです。

たとえば、フォームに記入している間にバスケット内の商品が売り切れた場合、お金が取られる前に顧客を捕まえることができます。または、フォームデータが改ざんされる場合に役立ちます。

自分のサイトでこれを行う場合、セッションを使用して POST データを転送できますが、外部 Web サイトであるため、たとえば非表示のフォームと更新を備えた別の HTML ページを作成せずにデータを送信する方法がわかりません。

これを「目に見えない」状態で、つまり実際には間に HTML ページを表示せずに行うことは可能ですか?

役に立ちましたか?

解決

はい、あなたは、フォームのonSubmit検証フックに引っ掛けると(jQueryのを使用して)このようなAjax呼び出しを送信することによってそれを行うことができます


$('#myform')[0].onsubmit = function() {
  if (form_check_elements(this.elements)) { /* ««« eg JS validator here */
    data = $('#myform').serialize();
    $.post('/ajax_validator.php', data, function(data, textStatus) {
      $('#myform')[0].submit();  /* ««« check the textStatus before here and
                                        eventually do not submit (wrap it in
                                        an if-clause) */
    });
    return false; /* make the form not post directly */
  } else {
    return false; /* do not post if JS validation fails */
  }
};

私たちは時にサードパーティのリターンのページが利用できる持っているように、我々はサードパーティに投稿する前に、セッションに格納し、フォームデータにこのスニペットを使用します。

編集:JSのサポートなしでフォームがまだ提出

のJSでこのする唯一の作品が有効になっていますが、それは、フォールバック・安全であることに注意してください

他のヒント

編集:

アシュリーはこう言いました。

さて、私はCurlマニュアルを見て、この非常に簡単なスクリプトを書き、投稿値をサードパーティのチェックアウトに転送しました。ただし、チェックアウトページの内容を表示するだけです。URLアドレスは、サードパーティのサイトに転送するのではなく、現在実行されているスクリプトを示しています。また、それらの比較的リンクされたすべてのグラフィックはすべて機能しません。Curlを使用して「True」転送を達成できますか?

短い答えは - いいえ.

支払いプロセスを説明した方法では、オフサイトプロセスの途中で何かを実行したい場合(HTML/メッセージのカスタマイズ、データの検証など)、cURLで実行できるプロセス全体を処理する必要があります。 。

cURL では、リクエストを「転送」するのではなく、リクエストを「プロキシ」するようなものです。したがって、ブラウザの URL が決して変更されず、相対的なグラフィックスが機能しないという事実は予期されています。cURL などを使用すると、外部ページに触れていることさえエンドユーザーに知らせることはできません。外部サーバーへのすべてのリクエストをサーバー上で処理し、外部サーバーからの応答をユーザーに表示するか、その応答を解析して、そこからのデータをカスタマイズした方法で使用できるようにします。

本質的にこれは次のことを意味します secure.wp3.rbsworldpay.com/wcc/purchase ユーザーからのさらなる対話を必要とするフォームを返している場合は、サーバー上でこのフォームを模倣し、代わりにそれを表示する必要があります。次に、ユーザーがフォームを送信するときに、cURL を再度使用して外部サーバーにリクエストを送信します。今回は、ユーザーが送信した次のラウンドのデータを投稿します。たとえば、次のように言ってみましょう。

  • secure.wp3.rbsworldpay.com/wcc/purchase カートを示します
  • secure.wp3.rbsworldpay.com/wcc/confirm 支払いの最終確認を示します
  • secure.wp3.rbsworldpay.com/wcc/success そして secure.wp3.rbsworldpay.com/wcc/error トランザクションが成功したか失敗したかをそれぞれ表示します。

次に、実際にはトランザクションプロセスの一部として外部から 2 つのリクエストを行う必要があります。これは次のように要約できます。

  1. ユーザーがサイトで買い物をし、商品をカートに追加します
  2. ユーザーがチェックアウトをクリックすると、カート/ユーザー データが検証されます。
  3. #2 からのデータが有効な場合は、データをパッケージ化して、 secure.wp3.rbsworldpay.com/wcc/purchase cURL経由
  4. #3 からの cURL 応答が成功した場合は、cURL 応答のデータを使用して独自の確認ページを作成し、それをユーザーに表示します。
  5. ユーザーは購入の確認をサーバーに送信します。
  6. #5 でサーバーに送信されたデータをパッケージ化して、 secure.wp3.rbsworldpay.com/wcc/confirm cURL経由。
  7. #6 からの cURL 応答が成功した場合は、外部サーバーから返される予想される「エラー」または「成功」メッセージを解析し、それらのメッセージまたは独自のカスタム エラー メッセージを表示します。
  8. エラーが発生した場合は、洗い流して繰り返します ;-)

一般的に、ほとんどの決済処理業者には、HTML ではなく XML、JSON、またはプレーン テキストとして解析しやすいデータを返すこの基本プロセスをサポートする処理オプションがあります。これについて調べてみるとよいでしょう。多くの場合、統合プロセスを容易にするために、さまざまなプログラミング言語用にライブラリが構築されています。


うん、確かにそうだね…私は通常、 curl このようなことを行うための拡張機能、またはそれを利用する http クライアント クラス curl. 。自分自身で少し簡単にして、これらのクラス ライブラリのいずれかを使用することもできます。たとえば、 Zend_Http_Client. 。サポートするだけでなく、 curl ソケットやプロキシも含まれます。

はい、できます。あなたが探していることはCURL関数です。

http://php.net/manual/en/book.curl.php

も参照してください。

http://php.dzone.com/news /実行-HTTP-ポスト - PHPを使用して、銅

Iむしろ基本的にカール及び/又はソケットをラップPEARから HTTP_Request2 のパッケージ、等いくつかの単純なオブジェクトインチ投稿は素晴らしい作品。その後、支払プロセッサへの上、ご確認チェッカーにPOSTリクエストをバウンスするためにそれを使用することができます。

私はこのように行くために、あなたをお勧めします:

フォームにユーザーを向ける前に、バスケット内のアイテムは完売しているかどうか(SQLクエリを通じて)確認してください。それが販売されている場合は、この項目が完売されたことを言っていくつかの他のページにユーザーをリダイレクトそう、彼は新しい購入のためのフォームに行かせます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top