0

PayPalでWebsitePaymentsStandardを使用しています。したがって、基本的にライセンスのリストであるカスタム購入ページがあります(データベースから取得)。

licence type A: $100
licence type B: $200
licence type C: $300

それらの1つ(ラジオボタン)を選択し、購入ボタンをクリックします。これにより、前のページから選択したlicence_idを取得する処理中のPHPページにページがPOSTされ、それを使用してデータベースから正しいライセンス情報(価格、ライセンス期間)などが選択されます。次に、ユーザーの新しいライセンスが保存されます(ただし、 Paypalの支払いがまだ行われていないので、未払いとしてマークします)。

次に、私のPHPコードは、次のコードを使用して支払いのためにPaypalサイトにリダイレクトします。

// Set the transaction details to be sent to PayPal
$urlParams = array(
    'cmd' => '_cart',
    'upload' => 1,
    'charset' => 'utf-8',
    'business' => my_business_email@domain.com,
    'return' => 'http://mysite.com/paymentprocessed.php',
    'currency_code' => 'NZD',
    'amount_1' => $licencePrice,
    'item_name_1' => $licenceName,
    'quantity_1' => 1
);

// Build the URL
$urlParams = http_build_query($urlParams, '', '&');
$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';

header('location:' .$url. '?' . $urlParams);
exit();

これは基本的にユーザーをリダイレクトし、GETを介してPayPalにパラメーターを送信します。驚くべきことに、それは機能します!ただし、明らかなセキュリティ上の問題は、ユーザーがアドレスバーの変数を編集し、価格を変更するだけで、安価で無料のライセンスを取得できることです。

では、代わりにPHPページで情報をPOSTし、ブラウザをそのページにリダイレクトして、ユーザーがペイパルトランザクションを完了できるようにすることは可能ですか?したがって、重要なデータは私のWebサーバーからPayPalに直接投稿されており、ユーザーは支払い情報を編集する方法がありません。

IPNを使用して、適切な金額が支払われていることを確認できると思いますが、それでも引き続き実行します。しかし、私はまだGETを介してすべてを送信したくないです。

ありがとう!

4

4 に答える 4

2

最適なソリューションは、エクスプレス チェックアウトを使用することです。これにより、標準のボタンよりもはるかに柔軟に対応できます。

IPN を検討している場合は、Express Checkout を統合するのに十分な能力があります。実際には、1 回の API 呼び出し、それに続く PayPal へのリダイレクト、および支払いを完了するための最低 1 回の API 呼び出しだけです。

一般的なフローは次
のようになります。 1. SetExpressCheckout API を呼び出します。これに慣れていない場合は、PayPal の NVP API インターフェイスを使用すると簡単に作成できます。データを GET NVP 文字列としてhttps://api-3t.paypal.com/nvpに送信するだけで、同じ形式で応答を取得できます。
2. 応答からトークンを取得し、 https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=XXXXXXX ( https://www.sandbox.paypal.com/cgi- bin/webscr?cmd=_express-checkout&token=XXXXXXX (サンドボックス テスト用)
3. 購入者が返品されるとすぐに、PayPal は RETURNURL に PAYERID を追加します。見つからない場合は、GetExpressCheckoutDetails API を呼び出し、トークンを指定して取得します。
4. PAYERID と TOKEN を使用して、DoExpressCheckoutPayment を呼び出して支払いを完了します。

これを開始するには、https: //www.x.com/community/ppx/sdks#NVP で提供されている PHP NVP SDK を参照することをお勧めします。

于 2011-05-13T16:30:18.497 に答える
1

リダイレクトと一緒に投稿データを送信するにはどうすればよいですか?簡単な答え:できません。

長い答え:POSTリクエストはクライアントとターゲットサーバーの間で発生します。データはヘッダーやURLに含まれていません(GETリクエストの場合のように)が、個別のペイロードとして含まれています。これは、クライアントベースの選択は、実際にはブラウザに送信される自動送信フォームのみであることを意味します。

もう1つの質問は、データをリダイレクトに圧縮することがなぜそれほど重要なのかということです。既存のプロトコルを設計されていないものに強制しようとする前に、設計を再評価することをお勧めします。少し前に戻って、より簡単な方法で一般的な目標を達成する方法を見つけてください。その結果、あなたとあなたの訪問者は、将来の多くの頭痛の種を救うでしょう。

考えられる代替案の1つは、ergophobeが示唆しているように、データサーバー側を保存することです。GETリクエストのCookieまたはプレーンCGI変数に基づいて再度取得できます。

CMIIW :)

于 2011-05-13T12:11:28.240 に答える
1

PayPal IPN を使用してコールバックを投稿し、ライセンスの価格が顧客が購入したライセンスと一致しているかどうかを確認できます。

PayPal IPN サンプル PHP

また、DB 内に注文を保存し、支払いが行われたときに注文の詳細を確認することもできます。順序が一致しない場合は、選択したメッセージが表示されます。

于 2011-05-13T12:30:55.937 に答える
0

ペイパルのリクエストを処理する方法がわかりませんが、GETをPOSTに変更するだけでは保護されません。上級ユーザーは引き続きPOST変数にアクセスして編集できます。あなたのデータの完全性を確保するpaypalによって提供されるメカニズムがあるはずです!

于 2011-05-13T12:09:21.867 に答える