通过 Paypal IPN 传递客户信息

Pass customer info via Paypal IPN

我有 2 份客户表格(年龄、兴趣)。客户填写 2 份表格并单击 Paypal 立即购买按钮后,我想通过 Paypal IPN 传递该信息并获取它们。这是我的代码

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
  <fieldset>
    Age
    <input type="text" name="custom" value="" />
    <br />
    Interest
    <input type="text" name="custom" value="" />
    <br />
    <input type="hidden" name="cmd" value="_xclick" />
    <input type="hidden" name="business" value="LLM3N8YXZNXJU" />
    <input type="hidden" name="item_name" value="abc" />
    <input type="hidden" name="item_number" value="P1" />
    <input type="hidden" name="notify_url" value="http://24151198.ngrok.com/paypal_ipn.php" />
    <input type="hidden" name="button_subtype" value="services" />
    <input type="hidden" name="rm" value="1" />
    <input type="hidden" name="bn" value="abcd-BuyNowBF:btn_paynowCC_LG.gif:NonHostedGuest" />
    <input style="position:relative; left:-10px; background:#ffffff; border:0;" type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" name="submit" alt="PayPal . The safer, easier way to pay online." />
    <img alt="" style="border:0;" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" />
  </fieldset>
</form>

我用日志记录IPN消息。如果我使用 1 "custom" 表单,我可以获得该自定义信息。但是如果我使用 2 "custom" 表单,我只会得到最后的自定义信息。如何获取所有自定义表单信息?谢谢

实际上,您在一个 表单 中有两个 字段 。 :)

表单输入使用 name 传递信息,因此当您包含第二个 <input name="custom"...> 时,您实际上是在告诉它 "Custom = this value. No wait, sorry, Custom = that value. Ignore what I told you first."

由于 PayPal 只接受一个 custom 变量,您需要:

  • 将两个字段合并为一个 ,然后 发布到 PayPal(这可能意味着首先在本地发布——例如,您可以将它们连接成一个逗号分隔的字段),或者
  • 将信息存储在数据库中,根据您传递给 PayPal 的密钥进行提取。这还有一个额外的好处,即您不受 PayPal 强加的 256 个字符的限制。

但是,您可能会决定将年龄字段重命名为 item_number——这对我来说似乎有点狡猾,但它可能会让您在您的情况下勉强通过。

有关 IPN 的更多信息,请参见 PayPal's Development Docs

您可以在实际执行提交之前更改表单字段,研究这个概念证明。将两个或多个单独的字段连接成一个隐藏的自定义字段值。第二个示例修改可见的自定义字段。哪个更适合 Paypal 表单处理程序。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script>
function beforeSubmit1(sender) {
    sender.custom.value = sender.field1.value+"|"+sender.field2.value;
}
function beforeSubmit2(sender) {
    var c1 = document.getElementById("custom1");
    var c2 = document.getElementById("custom2");
    c1.value = c1.value+"|"+c2.value;
    c2.value = "";
}
</script>
</head>
<body>

<FORM id="frm1" action="http://server.com/doit.php" method="post" onsubmit="beforeSubmit1(this)">
    <input id="custom" name="custom" type="hidden" value=""/>
    <input id="field1" name="field1" type="text" value="Value 1"/>
    <input id="field2" name="field2" type="text" value="Value 2"/>  
    <input type="submit" name="submit" />
</FORM>

<FORM id="frm2" action=http://server.com/doit.php" method="post" onsubmit="beforeSubmit2(this)">
    <input id="custom1" name="custom" type="text" value="Value 1"/>
    <input id="custom2" name="custom" type="text" value="Value 2"/> 
    <input type="submit" name="submit" />
</FORM>

</body>
</html>