web-dev-qa-db-ja.com

Paypalに変数を送信し、支払いが完了したときに変数をポストに戻すことができますか?

エクスプレスチェックアウトAPIを使用して、支払い後にサイトのユーザーのアカウントをプレミアムアカウントに変換しています。唯一の問題は、戻るためにボタンをクリックするまでユーザーをサイトに送り返さず、それが発生すると許可を更新することです。ユーザーの約40%はそうしないようです。..支払い後にアカウントにクレジットが入ることはありません。

Paypalは支払いが成功するとすぐにポストバックを行いますが、支払いを完了したユーザーを識別する何らかの情報を送り返すことができないため、ユーザーのアカウントをすぐに実際に更新することはできませんでした。トランザクションIDを送信するサイトに送り返されたときにのみ、ポストバックでログに記録できました。それを検索し、DB内で見つかった場合は許可を与えます。

Paypalに何らかの変数を送信する方法はありますか? &user_id = 123のようなもので、ユーザーの許可を更新するのが非常に便利です。

43
user15063

はい、送信する場合はitem_numberIPN通知 は、あなたにポストバックするときにそれを含みます。ユーザーが支払いプロセスを開始するときにデータベースに一意のIDを記録し、Paypalに送信するときにそれを含めます。 IPNが届くと、その一意のIDがデータベース内のレコードと一致し、必要なすべての情報が提供されます。

編集コメントを再入力してください:

上記のリンク先のサイトのどこかにコード例があると思いますが、基本的には私の場合、POST to https://www.Paypal.com/cgi-bin/webscr 。そのフォーム内には、IPNに記載されたさまざまな非表示フィールドがあります(実行するコマンドの場合はcmd、ビジネスIDを指定する場合はbusinessitem_name Paypal UIでの素敵な説明、item_number上記のアイテム番号など、など)。 IPNがIPNアドレスにポストバックするとき、さまざまなフィールド(payment_status —ちょっと重要! &mdashおよびitem_number投稿時にフィードインしました)。

27
T.J. Crowder

_Iten_number_隠し変数は私のアプリケーションでは機能しません。しかし、custom隠しフィールドは正常に機能することがわかりました。 Paypalによって生成されたフォームにこのフィールドを追加するだけです:_<input type="hidden" name="custom" value="YOUR VALUE FROM DB"/>_。その後、この値を読み取って、たとえば、購入された製品を特定できます。 (Javaコード):String custom = request.getParameter("custom");

34
dsplatonov

この古い質問に追加するだけです...

Paypalを介したカスタムデータ送信に一般的に使用されるオプションパラメータがあります。

これらのオプションタグは、on0on1、またはon2カスタムフィールド名およびos0os1 、およびos2カスタムフィールド値。

私はon0を送信し、「UserID」の値とos0実際のID。

これらの値は、IPNで次のように表されます。

os0option_selection1として表されます

os1option_selection2として表されます

os2option_selection3として表されます

on0option_name1として表されます

on1option_name2として表されます

on2option_name3として表されます

PaypalのHTMLパラメーターに関する情報です

18
jumpdart

Paypal Payments StandardのHTML変数 に従って、すべての「パススルー」変数を送信できます。

item_number購入した製品またはサービス、または行われた貢献を追跡するためのパススルー変数。指定した値は、支払いの完了時に返されます。 Paypalがボタンを販売するアイテムの在庫を追跡したり、損益を追跡したりする場合、この変数は必須です。

custom追跡目的のためのパススルー変数。バイヤーには表示されません。デフォルト-変数は返されません。

そして

invoiceこの購入の請求書番号を識別するために使用できるパススルー変数。デフォルト-変数は返されません。

これらすべてのパススルー変数は、支払い応答情報でIPNによって送り返されます。

HTMLテンプレートをサーバー側にレンダリングし、次のようにHTMLコードにフィールドを書き戻すだけです。

<input type="hidden" name="item_number" value="{{ productID }}">
<input type="hidden" name="invoice_id" value="{{ invoiceID }}">
<input type="hidden" name="custom" value="{{ jsonInfo }}">

技術的には、次のようなより多くのデータを処理する場合、フィールド「カスタム」はJSONエンコードされた文字列にすることができます

myItemObject = {
   "customerEmail" : "[email protected]
   "customerID: "AAFF324"
}
jsonInfo = json.dumps( myItemObject )
return render_template(tmpl_name, jsonInfo=jsonInfo, productID=productID, invoiceID=invoiceID)
7
loretoparisi

私は最終的にこの答えを得ました、私はあなたのすべての人と共有したいと思います:

hTMLフォームに次のコードを追加します(これはPaypalサンドボックスです)。

form action="https://www.sandbox.Paypal.com/cgi-bin/webscr?custom=YOUR_VAR" method="post"

PHP= Paypalがページ成功にリダイレクトした後:cm GET変数を使用します。

$example = $_GET["cm"];
6
lowpoly builder

このURL で問題が解決すると思います。それも私の解決したように。カスタム変数をフォームに追加し、成功支払いページで取得します。例:<input type='hidden' name='custom' value='<?php echo $email; ?>'/>

そしてそれを次のように取得します:

 $_POST['custom']
4
Nehal
<input type="hidden" name="on0" value="Ajay Gadhavana">
<input type="hidden" name="on1" value="my_phone_number">
<input type="hidden" name="on2" value="my_third_extra_field">

Paypalからの応答は

[option_name1] => Ajay Gadhavana [option_name1] => my_phone_number [option_name1] => my_third_extra_field

0
Ajay Gadhavana