传递自定义变量到PayPal IPN

22

我正在尝试将自定义变量传递给PayPal IPN。我可以成功地传递一个变量,但我不知道如何传递多个变量。

我的流程大致是这样的

  1. 用户填写表单
  2. 他们点击按钮进入PayPal
  3. 他们支付后,IPN将信息发送回来,并且ipn.php添加了传递到数据库的变量。

我的自定义变量有:

  1. 总行数(每当他们输入一行,我就计算一次)
  2. 消息(他们编写的消息)
  3. 广告ID

但目前,我只能像这样传递一个变量

form.php

<input name="custom" type="hidden" id="custom" value="{$line_count}">

$_SESSION['line_count'] = $_POST['lines_txt'];

ipn.php

$sql="INSERT INTO `form`(`totalline`) VALUES ('" .$_POST['custom']. "');";

10
你所拥有的 ipn.php 脚本在我看来似乎存在巨大的 SQL 注入安全漏洞。请勿提交该代码。 - Jon Winstanley
6个回答

22

我不确定,是否可以使用Paypal发送和接收多个变量。如果由于Paypal的限制无法实现,您可以使用以下方法之一:

  • 将数据序列化后发送,并在返回时反序列化。
  • 在form.php中以未支付状态将数据写入数据库并发送id。在ipn.php中捕获id并设置状态为已支付/错误/数据库中发生的任何事情。

1
感谢您的回复。目前我正在检查和自定义变量只能容纳200个字符,我的变量超过了这个值,所以我无法传递。我唯一能做的就是像您说的那样,在他们提交表单时,将我需要存储的所有内容存储在数据库中,然后获取IPN结果,如果成功,则更新状态,如果失败,则删除条目。但另一个问题是,如果他们关闭浏览器并且从未付款,我该如何删除该条目?我需要运行cron并删除吗?:( 这是很多流程和工作。 - spotlightsnap
如果用户在Paypal网站上关闭浏览器,则数据库条目仍然存在,是吗?您可以通过cronjob删除它们,但也可以将它们留在数据库中以供稍后分析(付款/重定向到Paypal)。同样的精神,您可以在从Paypal返回后编写错误,而不仅仅是删除该条目。 - Residuum
谢谢。这个很好用。而且,将一些值存储到数据库中,然后发送到PayPal是一个更好的想法。 - codingbbq
谢谢您的建议!我是通过谷歌搜索到这里的。序列化不起作用,字符串会比原始字符串更长,但是将信息存储在数据库中并在PayPal错误时进行删除就解决了问题! - Kristian Rafteseth

12

2

如果只是想传递一个与PayPal无关但对您更有意义的变量,可以使用值['custom']提交到PayPal,PayPal会在完成其工作后将其简单地传回给您。


1
一个模糊的记忆告诉我,发送数据到PayPal有两个选项。命令x_click和我认为还有一个类似上传参数的东西。当上传参数设置为1时,您可以向PayPal发送多行数据。 < p > < em >更新关于此事的PayPal信息


0
尚未测试,但根据文档,您可以在 PayPal 表单中使用多个名称为 item_number_X(X=数字)的隐藏输入来存储变量:
<INPUT TYPE="hidden" name="item_number_1" value="value1">
<INPUT TYPE="hidden" name="item_number_2" value="value2">

来自PayPal文档

使用透传变量进行记录

有些变量仅供您自己使用,例如订单管理。PayPal会将您通过即时付款通知发送的值完全返回,因此它们被称为透传变量。它们的值不会被PayPal记录或使用。

以下是透传变量:

  • custom
  • item_number或item_number_x
  • invoice

0

可以的! 您可以使用“自定义”变量并将其添加到您的表单中。

<INPUT TYPE="hidden" name="custom" value="user_id=1&uname=jj">

在你的IPN.php文件中:

$custom = $_POST['custom'];

从字符串中提取变量


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