0

プロジェクトの1つに初めてIPNハンドラー(コードプロジェクトから貼り付けます)を実装しました。

ユーザーの問題は、いくつかの電子メールアドレスを使用して私のウェブサイトに登録し、支払い中に別の電子メールアドレスを使用できることです。

また、IPN ハンドラー要求変数は、支払いに使用する電子メール アドレスを提供します。どのユーザーが支払ったかを調べるにはどうすればよいですか。

if (strResponse == "VERIFIED")
        {
            //check the payment_status is Completed
            //check that txn_id has not been previously processed
            //check that receiver_email is your Primary PayPal email
            //check that payment_amount/payment_currency are correct
            //process payment

            string payerEmail = Request.Form["payer_email"];
            string paymentStatus = Request.Form["payment_status"];
            string receiverEmail = Request.Form["receiver_email"];
            string amount = Request.Form["mc_gross"];
         }

ソリューション:

支払い処理ページで追加のユーザー ID を渡し、IPN ハンドラーで返されると想定します。

または、支払う前にペイパルのメールアドレスを入力するようユーザーに依頼します。(気持ち悪い)

この点で何か助けていただければ幸いです

4

1 に答える 1

3

私は通常、カート情報内で、ローカル トランザクションまたはローカル カートを識別するカスタム フィールドを POST します。IPN はそのカスタム フィールドをあなたに送り返し、トランザクションをユーザーと照合できるようにします。または、USER_ID を渡すだけで、トランザクションに関係なくそれを取得できます。

このフィールドを使用して、フォームでカスタム データを PayPal に送信します。

<input type="hidden" name="custom" value="YOUR_CUSTOM_INFO_HERE">

コールバックで IPN を処理します。

if (strcmp ($res, "VERIFIED") == 0) {
  // This is the custom field i posted within the cart form.
  $cid = $_POST['custom'];
  $txn_id = $_POST['txn_id'];
  $cart = load_cart_by_cid($cid);
  if (!empty($cart)) {
    // Fetch your user from cart and do things with it,
    // along with your security checks.
    $user = $cart->getUser();
    // For example, store the transaction.
    TransactionManager::saveTransaction($user, $txn_id);
  }
}

ソースは php ですが、Java や C# などで簡単に翻訳できるほど詳細だと思います。

于 2012-10-26T08:22:27.950 に答える