0

現在、2Checkout に直接送信するカスタム ショッピング カートがあり、異なる支払い方法で同じフォームを使用する必要があります。

これを行うには、最初に自分のサーバーに送信するフォームを取得し、次にサーバーを選択した支払いゲートウェイまたは他の支払いオプションを詳述するサイトのページにリダイレクトする必要があります.

PHP (javascript ではなく) の post メソッドとして変数を使用してユーザーをリダイレクトするにはどうすればよいですか?

ユーザーがページを離れず、必要があるため、現在のコードは機能しません...

//$url = 'https://www.2checkout.com/checkout/spurchase';
$url = 'getpost.php';

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($ch, CURLOPT_HEADER      ,0);  // DO NOT RETURN HTTP HEADERS
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);  // RETURN THE CONTENTS OF THE CALL
//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
4

2 に答える 2

1

一般に、自分自身に POST し、次に PHP から新しい場所に POST する必要がある場合は、戻ってアプリケーションの構造を確認する必要があることを示しています。

よりスムーズな解決策は、支払いフローを段階的に分割することです。

ステップ 1 - 情報
現在持っているフォームを用意し、現在と同じように投稿します。

ステップ 2 - ゲートウェイの選択
すべての $_POST 変数をページの隠しフィールドに格納し、ユーザーが選択できるゲートウェイのリストを用意します。これらのいずれかをクリックすると、ユーザーを確認ページに送ることができます。

ステップ 3 - 確認ページ
このページの主な目的は、ユーザーが入力したデータを確認し、アイテムの購入を希望していることを確認することです。

このページの第 2 の目的は、持っているすべてのデータを取得し、それらを非表示の入力 (再度) に入れることですが、今回はデータの送信先がわかっているため、フィールドにどのような形式/名前を付ける必要があるかがわかります。


そうは言っても、データ フォーム php を実際に投稿することを妨げるものは何もありませんが、前述したように、アプリケーションの構造がもはや意味をなさないということは良い指標です。

于 2013-02-11T13:09:44.220 に答える
0
curl_setopt($ch,CURLOPT_POST, count($fields));

ブール値を受け入れて、このように使用します

curl_setopt($ch,CURLOPT_POST, TRUE);

これは、すべての投稿、http httpsログインの取得、およびすべてで機能するcurlの完璧な機能です。

curl_grab_page($url,$data)url url と data thats itのように使用します

function curl_grab_page($url,$data,$secure="false",$ref_url="",$login = "false",$proxy = "null",$proxystatus = "false")

            {
                if($login == 'true') {
                    $fp = fopen("cookie.txt", "w");
                    fclose($fp);
                }
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
                curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");

                curl_setopt($ch, CURLOPT_TIMEOUT, 60);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                if ($proxystatus == 'true') {
                    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
                    curl_setopt($ch, CURLOPT_PROXY, $proxy);
                }
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

                if($secure=='true')
                {
                    curl_setopt($ch, CURLOPT_SSLVERSION,3);
                }

                curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );


                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_REFERER, $ref_url);
                curl_setopt($ch, CURLOPT_HEADER, TRUE);
                curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
                curl_setopt($ch, CURLOPT_POST, TRUE);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                ob_start();

                return curl_exec ($ch); // execute the curl command

                curl_getinfo($ch);
                ob_end_clean();
                curl_close ($ch);
                unset($ch);
            }
于 2013-02-11T12:45:33.423 に答える