2

これが可能かどうかはわかりません。他のヘルプガイドが見つからないため、これが不可能な場合があります...

大量の変数をサードパーティの支払い処理業者(WorldPay)にPOSTするチェックアウトページがあります。

検証のために、2つのページの間にある種のPHPスクリプトを配置できるかどうかを知りたいです。

たとえば、バスケットのアイテムがフォームへの入力中に売り切れた場合、お金がかかる前に顧客を捕まえる可能性があります。または、フォームデータを改ざんする場合に役立ちます。

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

これを「目に見えないように」行うことは可能ですか?実際には間にHTMLページを表示していませんか?

4

5 に答える 5

2

編集

アシュリーは言った:

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

簡単な答え-いいえ

オフサイトプロセスの途中で何かを行う(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/successsecure.wp3.rbsworldpay.com/wcc/errorトランザクションが成功したか失敗したかをそれぞれ示します。

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

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

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


はい、確かに...私は通常、curlこのようなことを行うために拡張機能を使用するか、を利用するhttpクライアントクラスを使用しcurlます。自分で少し簡単にして、これらのクラスライブラリの1つを使用することをお勧めします-たとえばZend_Http_Clientcurlソケットとプロキシだけでなく、サポートします。

于 2010-02-02T21:48:57.097 に答える
2

はい、フォームのonsubmitフックにフックして、次のようにAjax呼び出しを送信することでそれを行うことができます(jQueryを使用):


$('#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サポートなしで送信されます。

于 2010-02-04T14:52:33.843 に答える
0

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

ユーザーをフォームに誘導する前に、バスケット内のアイテムが売り切れているかどうかを(SQLクエリを介して)確認します。販売されている場合は、このアイテムが売り切れていることを示す別のページにユーザーをリダイレクトします。それ以外の場合は、新規購入のフォームに移動します。

于 2010-02-02T21:48:36.160 に答える
0

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

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

以下も参照してください。

http://php.dzone.com/news/execute-http-post-using-php-cu

于 2010-02-02T21:48:57.770 に答える
0

私はPEARのHTTP_Request2パッケージが好きです。これは、基本的にcURLやソケットをいくつかの単純なオブジェクトにラップします。POSTはうまく機能します。これを使用して、POSTリクエストを検証チェッカーにバウンスし、次に支払いプロセッサにバウンスすることができます。

于 2010-02-02T22:04:14.003 に答える