エクスプレスチェックアウトAPIを使用して、支払い後にサイトのユーザーのアカウントをプレミアムアカウントに変換しています。唯一の問題は、戻るためにボタンをクリックするまでユーザーをサイトに送り返さず、それが発生すると許可を更新することです。ユーザーの約40%はそうしないようです。..支払い後にアカウントにクレジットが入ることはありません。
Paypalは支払いが成功するとすぐにポストバックを行いますが、支払いを完了したユーザーを識別する何らかの情報を送り返すことができないため、ユーザーのアカウントをすぐに実際に更新することはできませんでした。トランザクションIDを送信するサイトに送り返されたときにのみ、ポストバックでログに記録できました。それを検索し、DB内で見つかった場合は許可を与えます。
Paypalに何らかの変数を送信する方法はありますか? &user_id = 123のようなもので、ユーザーの許可を更新するのが非常に便利です。
はい、送信する場合はitem_number
、 IPN通知 は、あなたにポストバックするときにそれを含みます。ユーザーが支払いプロセスを開始するときにデータベースに一意のIDを記録し、Paypalに送信するときにそれを含めます。 IPNが届くと、その一意のIDがデータベース内のレコードと一致し、必要なすべての情報が提供されます。
編集コメントを再入力してください:
上記のリンク先のサイトのどこかにコード例があると思いますが、基本的には私の場合、POST to https://www.Paypal.com/cgi-bin/webscr 。そのフォーム内には、IPNに記載されたさまざまな非表示フィールドがあります(実行するコマンドの場合はcmd
、ビジネスIDを指定する場合はbusiness
、item_name
Paypal UIでの素敵な説明、item_number
上記のアイテム番号など、など)。 IPNがIPNアドレスにポストバックするとき、さまざまなフィールド(payment_status
—ちょっと重要! &mdashおよびitem_number
投稿時にフィードインしました)。
_Iten_number
_隠し変数は私のアプリケーションでは機能しません。しかし、custom
隠しフィールドは正常に機能することがわかりました。 Paypalによって生成されたフォームにこのフィールドを追加するだけです:_<input type="hidden" name="custom" value="YOUR VALUE FROM DB"/>
_。その後、この値を読み取って、たとえば、購入された製品を特定できます。 (Javaコード):String custom = request.getParameter("custom");
この古い質問に追加するだけです...
Paypalを介したカスタムデータ送信に一般的に使用されるオプションパラメータがあります。
これらのオプションタグは、on0、on1、またはon2カスタムフィールド名およびos0、os1 、およびos2カスタムフィールド値。
私はon0を送信し、「UserID」の値とos0実際のID。
これらの値は、IPNで次のように表されます。
os0はoption_selection1として表されます
os1はoption_selection2として表されます
os2はoption_selection3として表されます
on0はoption_name1として表されます
on1はoption_name2として表されます
on2はoption_name3として表されます
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)
私は最終的にこの答えを得ました、私はあなたのすべての人と共有したいと思います:
hTMLフォームに次のコードを追加します(これはPaypalサンドボックスです)。
form action="https://www.sandbox.Paypal.com/cgi-bin/webscr?custom=YOUR_VAR" method="post"
PHP= Paypalがページ成功にリダイレクトした後:cm
GET変数を使用します。
$example = $_GET["cm"];
このURL で問題が解決すると思います。それも私の解決したように。カスタム変数をフォームに追加し、成功支払いページで取得します。例:<input type='hidden' name='custom' value='<?php echo $email; ?>'/>
そしてそれを次のように取得します:
$_POST['custom']
<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