3

サイトの支払いにペイパルを使用しようとしています。

当サイトでは、オンラインゲームの「ダイヤモンド」などの仮想通貨のみを販売しています。

読んだ後、私はデジタル商品のエクスプレスチェックアウトを使い始めました。そうですか? または、他の支払い方法が必要ですか?

次に、私の質問は、デジタル商品にエクスプレス チェックアウトを使用する場合、カスタム変数を渡す方法です。

user_id、diamond_id、およびデータベースからのその他の変数をpaypal APIに支払いたいとしましょう。Paypal は、API 呼び出しを渡すためのカスタム変数をサポートしていないようです。ユーザーが支払いを完了した後、Paypal は、支払いが完了したことをサーバーに通知する必要があります。

検索した後、私はいくつかの解決策を見つけました、

  1. 最初の解決策は、「TOKEN」(「SetExpressCheckout」メソッドから生成) と、TOKEN に属するカスタム変数をデータベースに保存することです。支払いが完了すると、paypal は以前に保存した同じ TOKEN をサーバーに通知します。したがって、TOKEN に基づいてクエリを実行します。
  2. 2 番目の解決策は、RETURNURL 変数http://www.mysite.com/successpayment.php?user_id=13&diamond_id=88で get スタイルを使用しているため、GET 変数を簡単に取得できます。

正しい解決策はどれですか? 解決策はありますか?支払い確認を確保する方法、つまり、誰かが私の returnurl を知っていてハッキングした場合。

ありがとう

4

4 に答える 4

7

PAYPAL EXPRESS CHECKOUT NVP APIとクラスSetExpressCheckOut()を使用している場合

参照決済認証

$paypal = new SetExpressCheckout($totalPrice);

このクラスの呼び出し元は、顧客を Paypal にリダイレクトして戻すために必要なパラメーターを設定するために使用するメソッドをインスタンス化します。このクラスの開始を完了するには、合計金額の変数を設定する必要があります。

    $paypal->setNVP("RETURNURL", "http://yourURL.com/confirm.php");
    $paypal->setNVP("HDRIMG", "http://yourURL.com/image.jpg");
    $paypal->setNVP("EMAIL", "$userEmail"); // customer's email
    $paypal->setNVP("AMT", $totalPrice);
    $paypal->setNVP("SHIPPINGAMT", "32");
    $paypal->setNVP("CUSTOM", "Anything you want to put");  // user_id, diamond_id
    $paypal->setNVP("INVNUM", $uniqueID); // your Order number this include the id of your order  (order table  will also have user_id, diamond_id related to the order so you will automaticaly get them once you send the orderid  )
    $paypal->getResponse();

setNVP()Paypal への送金を送信する前に、支払いプロセスをカスタマイズするために、関数で送信できるオプションの値があることを知っておいてください。デフォルトでは、etc/NVP/SetExpressCheckout.ini file. getResponse()信用情報の認証のためにユーザーのブラウザをPaypalに送信します。具体的には、etc/NVP/PayPalNVP.ini という名前のファイルで、テスト モード (サンドボックス) とライブの間で可変に設定する必要がある URL です。

販売の完了

$paypal  = new GetExpressCheckoutDetails;
$details = $paypal->getResponse();

DoExpressCheckoutPayment()

$payment  = new DoExpressCheckoutPayment($totalPrice);
$response = $payment->getResponse();

ステータスを確認

if ($response['PAYMENTSTATUS'] == 'Completed') {
    # process information
}

getResponse からの結果の表示

echo '<pre>';
print_r($details);
echo '<pre>';
print_r($response);

この詳細説明

于 2012-10-08T10:55:21.517 に答える
1

PayPal API を使用すると、カスタム データを送信できます。いいえ、ユーザーが支払った対価をユーザーに提供するために、決してリターン URL を使用しないでください。誰でもその URL にアクセスできます。

PayPal API の仕組みは、(通常) フォームを PayPal に送信することです。隠しフィールドがたくさんあります。設定できるフィールドの 1 つは「カスタム」のようなもので、好きなものを保存できます。したがって、ユーザー テーブルからのユーザー ID のようなものと、ユーザーに与えたい仮想通貨の金額を保存し、これをカンマで区切って保存することで、次の場合に変数で expand() を使用できます。データを分離するために返されます。

エクスプレス チェックアウトを使用している場合は、PayPal の支払いが完了すると、PayPal から IPN (即時支払い通知) が送信されます。この IPN リクエストは指定したページに送信されるため、たとえばhttp://yourwebsite.ca/ipn.phpを作成する必要があります。次に、この通知を検証する必要があります。その後、カスタム フィールドを抽出し、ユーザー ID と仮想通貨の金額などを取得できます。既存のPHP PayPal クラスを使用することをお勧めします。

于 2012-10-05T16:07:31.987 に答える
0

これがPayPal即時支払い通知で機能する方法-PayPalから応答を受け取ったら、メッセージをPayPalに返送し、それが検証済みまたは無効であることを確認します。

この投稿はHTTPS経由でPayPalに送信するため、「中間者攻撃」は問題になりません(上記のフォローアップの質問だったと思います)。ここでIPNの完全なコードサンプルを参照してください。

于 2012-10-08T04:35:57.953 に答える
0

このようなシステムはどうですか:

  1. ユーザーがバスケットに何かを追加するか、購入リンクをクリックすると、必要なすべてのカスタム フィールドを含む行が独自のデータベースに追加され、行の ID が取得されます (mysql_insert_id())。

  2. 次に、PayPal フォームに非表示のフィールドを作成します。これには名前が付けられ、データベースの行 ID の場所notify_urlなどへのリンクが含まれます。paypal_ipn.php?id={ID}{ID}

  3. 支払いが正常に完了すると、PayPal はカートの詳細をスクリプトに投稿し、すべての注文の詳細を取得できるだけでなく、 を使用し$_GET['id']てデータベースに設定されたカスタム変数を取得できます。

もちろん、paypal_ipn.php スクリプトを使用して、投稿されたデータが有効であることを確認し、それが PayPal 自体から送信されたものであり、なりすましではないことを確認する必要があります。これは、paypal_ipn.php ファイルの適切なリソースです: http://net.tutsplus.com/tutorials/php/using-paypals-instant-payment-notification-with-php/

于 2012-10-08T10:03:56.713 に答える