我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?
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发送自定义数据。
这些选项标签是 on0、on1 或 on2 用于自定义字段名称和 os0、os1 和 os2 用于自定义字段值。
我会发送值为“UserID”的 on0 和 os0 实际 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 能解决您的问题。因为它也解决了我的问题。将自定义变量添加到您的表单,然后在您的成功付款页面上检索它。
例子 :
<input type='hidden' name='custom' value='<?php echo $email; ?>'/>
然后将其检索为:
$_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 生成的表单中:<input type="hidden" name="custom" value="YOUR VALUE FROM DB"/>
。之后,您可以读取此值以识别例如已购买的产品。 (Java代码):String custom = request.getParameter("custom");
【讨论】:
最佳答案!在 PHP 中,您可以使用 ipn 脚本中的$_POST['custom']
轻松读取此字段。
@dsplatonov 我们可以在哪个页面上阅读它?我的意思是返回 url 或 notify_url
@KaiNoack 我尝试使用除 custom
之外的另一个名称:<input type="hidden" name="my_id" value="YOUR VALUE FROM DB"/>
,但没有任何到达 IPN 的 $_POST['my_id']
:( 所以可能name="custom"
是唯一有效的名称。跨度>
只是说,虽然这是高度赞成的(我不理会它)“自定义”值实际上会以“cm=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。我正在考虑预先将它们全部压缩成一个数组。你的想法?以上是关于我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?的主要内容,如果未能解决你的问题,请参考以下文章