我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?

Posted

技术标签:

【中文标题】我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?【英文标题】:Can I send a variable to paypal, and have it post it back to me when payment completes? 【发布时间】:2011-02-20 06:51:29 【问题描述】:

我一直在使用 express checkout API 将人们在我网站上的帐户在付款后转换为高级帐户。唯一的问题是,在用户单击返回按钮之前,它不会将用户发送回站点,并且在发生这种情况时会更新他们的权限。大约 40% 的用户似乎没有这样做......所以他们的账户在付款后永远不会被记入贷方。

虽然 paypal 在成功付款后会立即回发,但我无法让它立即真正更新用户的帐户,因为我无法让它发回某种可以识别用户的信息完成付款。只有当您被发送回发送交易 ID 的站点时,我才能这样做,我通过回发记录了该站点。它会搜索它,如果在 DB 中找到它就会授予权限。

有没有办法向贝宝提交某种变量,然后它会发回给我?像 &user_id=123 这样的东西,可以很方便地更新用户的权限。

【问题讨论】:

【参考方案1】:

2021 年对我有用的是在我的客户端应用程序中将“custom_id”(在“purchase_units”数组中)传递给 PayPal,并在我的后端检查“custom”。

是的,看起来 PayPal 出于某种原因重命名了参数。

【讨论】:

【参考方案2】:
<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">

来自贝宝的回应是

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

【讨论】:

【参考方案3】:

终于得到这个答案了,想和大家分享一下:

在您的 html 表单上输入此代码(这是 Paypal 沙箱):

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

Paypal 重定向到您的页面成功后在您的 php 上:使用 cm GET 变量:

$example = $_GET["cm"];

【讨论】:

我测试并确认了这项工作。 2016 年之前的其他答案说“自定义”值返回为“自定义”,但一段时间后,系统发生了变化,现在返回为“厘米”。【参考方案4】:

只是为了补充这个老问题......

有一些选项参数通常用于通过paypal发送自定义数据。

这些选项标签是 on0on1on2 用于自定义字段名称和 os0、os1 和 os2 用于自定义字段值。

我会发送值为“UserID”的 on0os0 实际 ID。

这些值将在 IPN 中表示如下:

os0 表示为 option_selection1

os1 表示为 option_selection2

os2 表示为 option_selection3

on0 表示为 option_name1

on1 表示为 option_name2

on2 表示为 option_name3

Here's the info on PayPal's HTML parameters

【讨论】:

【参考方案5】:

希望this URL 能解决您的问题。因为它也解决了我的问题。将自定义变量添加到您的表单,然后在您的成功付款页面上检索它。 例子 : &lt;input type='hidden' name='custom' value='&lt;?php echo $email; ?&gt;'/&gt;

然后将其检索为:

 $_POST['custom']

【讨论】:

【参考方案6】:

根据HTML Variables for PayPal Payments Standard,您可以发送所有“传递”变量:

item_number 用于跟踪产品或服务的传递变量 购买或作出的贡献。您指定的值被传递 付款完成后返回给您。如果您需要此变量 希望 PayPal 跟踪库存或跟踪商品的损益 按钮卖出。

自定义传递变量,用于您自己的跟踪目的,买家看不到。默认 - 没有变量传回给您。

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" : "john@doe.com
   "customerID: "AAFF324"

jsonInfo = json.dumps( myItemObject )
return render_template(tmpl_name, jsonInfo=jsonInfo, productID=productID, invoiceID=invoiceID)

【讨论】:

【参考方案7】:

Iten_number 隐藏变量在我的应用程序中不起作用。但我发现 custom 隐藏字段工作正常。只需将此字段添加到由 paypal 生成的表单中:&lt;input type="hidden" name="custom" value="YOUR VALUE FROM DB"/&gt;。之后,您可以读取此值以识别例如已购买的产品。 (Java代码):String custom = request.getParameter("custom");

【讨论】:

最佳答案!在 PHP 中,您可以使用 ipn 脚本中的 $_POST['custom'] 轻松读取此字段。 @dsplatonov 我们可以在哪个页面上阅读它?我的意思是返回 url 或 notify_url @KaiNoack 我尝试使用除 custom 之外的另一个名称:&lt;input type="hidden" name="my_id" value="YOUR VALUE FROM DB"/&gt;,但没有任何到达 IPN 的 $_POST['my_id'] :( 所以可能name="custom" 是唯一有效的名称。跨度> 只是说,虽然这是高度赞成的(我不理会它)“自定义”值实际上会以“cm=”的形式返回。 2016 年可能发生了变化,因此之前的所有答案都说它以“自定义”的形式返回,但之后的所有答案都说它以“cm”的形式返回。 @Colin custom 变量工作正常,它没有返回为 cm【参考方案8】:

是的,如果您发送 item_number,IPN notification 将在回复给您时包含该信息。当用户开始付款过程时,我在数据库中记录了一个唯一 ID,并在将其发送到 PayPal 时将其包含在内。当 IPN 进入时,该唯一 ID 会与数据库中的记录相匹配,从而为我提供所需的所有信息。

编辑回复您的评论:

我希望上面链接的网站上的某处有一个代码示例,但基本上就我而言,我使用的是我发布到https://www.paypal.com/cgi-bin/webscr 的表单。在该表单中是 IPN 内容中记录的各种隐藏字段(cmd 用于执行什么命令,business 用于指定您的业务 ID,item_name 用于 PayPal UI 中的一个很好的描述,item_number 用于项目编号我在上面提到过,等等等等)。当 IPN 回帖到您的 IPN 地址时,它会包含各种字段(例如 payment_status - 有点重要!&mdash 以及您在向他们发帖时输入的 item_number)。

【讨论】:

有这样的代码示例吗?如何将项目 # 传递给它? @Yegor:更新了更多信息。从任何的角度来看,我都不是 PayPal 集成专家,但希望这很有用。 我认为 item_number 不适合这种用途。 item_number 必须是您的产品数据库的内部 id,您不应修改。要传回值,您可以使用可选字段 on0、on1... 并在 IPN 回传中获取它们的值。 这是一个架构设计问题。您可以为此目的使用 item_number,但我认为这是不正确的。 item_number 值应该是您唯一的产品 ID,始终相同。在此链接中,您可以看到“传递”变量。 developer.paypal.com/docs/classic/paypal-payments-standard/… 。我认为最好使用自定义或发票变量或可选字段来解决这个问题。 @T.J.Crowder 我目前必须在结账时将 8 个变量传递给 PayPal。我正在考虑预先将它们全部压缩成一个数组。你的想法?

以上是关于我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 将付款发送到贝宝帐户 [关闭]

WHMCS - 如何获取到贝宝的付款链接

将输入数据从表单传输到贝宝付款,如果付款成功则保存

在提交时发生了两件事

转移到贝宝以在返回 url mvc4 上使用时存储变量

贝宝定期付款重定向到贝宝的主页