【发布时间】:2011-01-14 11:37:44
【问题描述】:
我的网站上有一个表单中的 paypal 按钮。该表单有一个称为 ID 的附加输入,用户必须在其中输入特定值。
销售完成后,Paypal 将用户返回到 domain.com/credits?done
如何接收用户在 /credits?done 中输入的原始 ID 值?需要它来自动修改他的数据库记录。
谢谢。
【问题讨论】:
我的网站上有一个表单中的 paypal 按钮。该表单有一个称为 ID 的附加输入,用户必须在其中输入特定值。
销售完成后,Paypal 将用户返回到 domain.com/credits?done
如何接收用户在 /credits?done 中输入的原始 ID 值?需要它来自动修改他的数据库记录。
谢谢。
【问题讨论】:
请参阅 PayPal 集成中心网站上的 PayPal Instant Payment Notification 和 IPN PHP code sample 文档。
【讨论】:
如果您引用的 ID 是您使用的唯一引用,请使用 item_number 元素在 Paypal 和您的网站之间来回传递。
在您向客户显示的 HTML 表单中设置 ID,并注意您还可以指定 3 个 URL:
<input type="hidden" name="item_name" value="Box of stuff"></input>
<input type="hidden" name="item_number" value="12345"></input>
<input type="hidden" name="return" value="http://www.blah.com/paypal_thanks.asp"></input>
<input type="hidden" name="notify_url" value="http://www.blah.com/paypal_callback.asp"></input>
<input type="hidden" name="cancel_return" value="http://www.blah.com/paypal_cancel.asp"></input>
我在上面使用了“paypal_callback.asp”,这会覆盖您在登录 Paypal 并编辑设置时可以设置的 IPN 链接。所以这个值是可选的。
scrpt paypal_callback.asp(假设是用 ASP 写的)可以这样说:
iAdvertId = Request.Form("item_number")
请注意,此页面不是向用户显示的页面!它在幕后受到 Paypals 服务器的攻击。烦人的是 paypal_callback.asp 不会立即被 Paypal 调用。可能是 3 天后...或者他们可能会在一个月后取消付款。
在我的示例中,客户将被重定向到 paypal_thanks.asp 或 paypal_cancel.asp。这些页面不会传递表单或查询字符串,因此获取您在item_number 中放置的号码的唯一方法是在用户提交购买表单之前将其存储在 cookie 中。
当您收到来自 Paypal 的电子邮件时,item_number 将在主题行中提及,在邮件正文中也会提及(在描述行的末尾)。
还可以在自定义字段中设置附加信息。 Paypal documentation 详细说明了如何执行此操作,您可以在 sandbox 中使用他们的 IPN 模拟器对其进行测试。
【讨论】:
您可以创建一个简单的购物车系统,该系统将有一张独特的发票来区分每笔交易。将付款数据发送到贝宝时,将此发票作为参数传递。任何其他数据都可以只存储在您的数据库中,无需将其发送到贝宝,因为您可以使用发票作为唯一标识符来确定每笔交易。
您还需要创建一个ipn 处理程序页面,以便在用户在那里付款时从贝宝接收数据,以便您可以更新数据库中的付款状态。这样,用户在付款后不必点击返回您的站点链接,但您仍然可以更新相关数据。
为了使集成更容易,您可以考虑使用Micah Carrick's Paypal IPN Class。基本上它和paypal提供的代码是一样的,但是它被封装在一个类中,所以你可以在你的页面中使用它。
【讨论】: