PayPal按钮通过IPN发送自定义变量

17

我已经尝试了几天的时间去解决一个很简单的问题,但在“丛林”(真的,PayPal,为什么你不对其进行整理……)中找到解决方案。

我的网站拥有会员订阅功能。 客户在我的网站上使用电子邮件和密码注册。 然后他们转到PayPal支付他们的订阅费用。

我的问题是如何通过整个交易传递关键信息 - 他们的电子邮件 - 以便我知道付款是谁的? 这是因为可能出现的情况是,他们有时使用一个电子邮件地址注册,却使用另一个电子邮件地址进行付款。 并且如何使用(安全的)加密按钮完成所有操作。

我想到的方法是在 PayPal 的“创建 PayPal 支付按钮”页面上制作加密按钮。

第三步中,添加(被编辑掉的真实网址)高级变量:

notify_url=http://xxxxxxxxxx.com/xxxxx.php
test_ipn=1

获取代码:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="N6UMVCMXSWMYG">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

我需要将给定的代码复制并粘贴到我的php页面中,但需要添加一个名为"custom"的隐藏字段,并将其设置为手头的电子邮件地址,还需将表单操作更改为转到sandbox

类似于这样:

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="custom" value="<?=$signUpEmail ?>">

<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="N6UMVCMXSWMYG">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

这个自定义变量我可以在我的 ipn 页面上使用,以便知道会员是谁。

我想得对吗? 还是我应该使用“手写”代码来创建按钮? 或者有更好的方法吗?

2个回答

19

在Paypal表单中,有一个你可以用来填写任何内容的字段。

该字段的名称为“custom”。因此,您可以编写类似以下内容的东西:

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

建议对自定义值进行编码。例如,某种形式的base64_encode可能会有所帮助以阻止好奇的人。 然而,在手册中也有关于您可以如何使用Paypal的很好的解释。 这个链接和这个链接是摘录。

此外,正如评论中所建议的那样,在您的网站和Paypal之间的后端通信中,无法使用与前端相关的会话变量。


有没有办法添加第二个自定义字段? - Joao Alves Marrucho
你可以在单个字段中编写任何你想要的代码,然后在接收到它时解码它。例如,你可以在该字段中编写一个JSON字符串或URL编码参数。 - gdm

2
上述方法是可行的,尽管我在 PayPal 沙盒环境中使用“普通 PayPal” hosted_button_id 时遇到了一些问题 - 通过在沙盒中重新创建 hosted_button_id 来解决这个问题。
<input type="hidden" name="hosted_button_id" value="RECREATENEWINPAYPALSANDBOX">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接