【问题标题】:Passing custom variables to paypal IPN将自定义变量传递给贝宝 IPN
【发布时间】:2010-12-22 18:06:31
【问题描述】:

我正在尝试将自定义变量传递给 paypal IPN。我可以设法传递一个变量。但我不知道如何传递多个变量。

我的流程是这样的

  1. 用户填写表格
  2. 他们点击按钮,然后转到贝宝
  3. 他们付款,IPN 将信息发回给我,ipn.php 添加了传递给数据库的变量。

我的自定义变量是

  1. 总行数(无论他们写什么,我都会数行数)
  2. 消息(他们写的消息)
  3. 广告编号

但是现在,我只能像这样传递一个变量

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']. "');";

【问题讨论】:

  • 对我来说,您拥有的那个 ipn.php 脚本看起来像是一个巨大的 SQL 注入安全漏洞。请不要提交该代码。

标签: php paypal


【解决方案1】:

模糊的记忆告诉我有两种方法可以向 PayPal 发送数据。命令 x_click ,我认为有类似上传参数的东西。当上传参数设置为 1 时,您可以向 paypal 发送多行。

更新PayPal information about this

【讨论】:

    【解决方案2】:

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

    • 发送序列化的数据,并在返回时反序列化。
    • 在form.php中将数据写入数据库(状态为notpaid)并发送id。在 ipn.php 中捕获 id 并设置 status =paid / error / 数据库中发生的任何事情。

    【讨论】:

    • 感谢您的回复。目前我正在检查,自定义变量只能容纳 200 个字符,我的变量超过了那个值,所以我不能通过。我能做的只有一件事,就像你说的,首先,当他们提交表单时,我将所有需要存储的东西存储在数据库中,然后获取 IPN 结果,如果成功,更新状态,如果失败,删除条目。但是另一个问题是,如果他们关闭浏览器并且从不付款,我该如何删除该条目?我需要运行 cron 和 delete 吗? :( 这是很多过程和工作
    • @spotligthsnap:如果用户在 Paypal 网站上关闭浏览器,那么数据库条目会持续存在,正确。您可以通过 cronjob 删除它们,但也可以将它们留在数据库中以供稍后分析(付款/重定向到贝宝)。本着同样的精神,您可以在从 Paypal 返回后写入错误,而不仅仅是删除条目。
    • 谢谢。这很好用。此外,将一些值存储到 db 然后发送到 paypal 是一个更好的主意。
    • 感谢您的建议!我是通过谷歌来到这里的。序列化不起作用,字符串将比原始字符串长,但将信息存储在数据库中并在贝宝错误 ofc 时删除就可以了!
    【解决方案3】:

    如果只是传递一个与paypal无关但返回时与你更相关的变量,你可以使用值['custom']提交给paypal,paypal会简单地传回给yuo一旦事情在他们身边完成。

    【讨论】:

      【解决方案4】:

      您可以通过 notify_url 字段传递其他信息,例如 http://www.yoursite.com/notify?myvariable=value

      【讨论】:

        【解决方案5】:

        尚未测试,但根据文档,您可以在 paypal 表单中使用名称为 item_number_X (X=number) 的多个隐藏输入来存储变量:

        <INPUT TYPE="hidden" name="item_number_1" value="value1">
        <INPUT TYPE="hidden" name="item_number_2" value="value2">
        

        来自paypal docs

        使用传递变量进行记录

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

        以下是传递变量:

        • 自定义
        • item_number 或 item_number_x
        • 发票

        【讨论】:

          【解决方案6】:

          是的,你可以! 您可以使用“自定义”变量并添加到表单中

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

          在你的 IPN.php 中:

          $custom = $_POST['custom'];
          

          并从字符串中提取变量

          【讨论】:

            猜你喜欢
            • 2011-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-16
            • 1970-01-01
            • 2020-08-19
            • 2015-02-21
            • 2012-06-29
            相关资源
            最近更新 更多