PayPal IPN 返回购物车或订单 ID 以进行后处理

Posted

技术标签:

【中文标题】PayPal IPN 返回购物车或订单 ID 以进行后处理【英文标题】:PayPal IPN returning a shopping cart or order ID for post-processing 【发布时间】:2011-03-21 22:04:38 【问题描述】:

我已成功将我的自定义购物车发布到 PayPal ——它完美地处理了订单,当收到付款时,它会将数据发送回我在配置中指定的 URL。代码基于此处找到的库:http://www.phpfour.com/blog/2009/02/php-payment-gateway-library-for-paypal-authorizenet-and-2checkout/

所以我通过将数据发回 PayPal 成功验证了 IPN——这一切都很好。这是我的两难选择——我如何知道 IPN 确认的订单是什么?

我没有使用 PayPal 的购物车,我有自己的。它在我的数据库中有自己的购物车 ID,当我收到该购物车的 IPN 时,我想“关闭”购物车并将其保存为订单以供日后查找。

我尝试传递一个额外的自定义字段以及重定向到填充购物车的 PayPal,但该值没有在 IPN 中返回给我。 x.com 上的文档完全缺乏,所以我没有找到任何帮助。

有人有使用 PayPal 和 IPN 的经验吗?不一定要使用 PHP——我可以解释代码——但如果你有办法通过订单向 PayPal 发送一个值,然后用 IPN 返回该值,那就太棒了!

如果 PayPal 的 API 无法做到这一点(我很难相信)——关于如何处理这个问题的任何其他建议?

【问题讨论】:

【参考方案1】:

我不知道这是否是个好主意,但这里有几个不同的选择:

A:使用第一组 on1 / os1 为项目 1 并添加订单 ID。

B:在自定义字段中,我不确定您在其中有什么,但是您可以在此处将其设置为 orderidhere41|otheritems 之类的内容,然后通过在 | 处爆炸来解析它。让他们分开。

Paypal 确实限制了这一点,我不知道为什么,但这两种方法都应该有效。将其作为 on / os 将其放在用户的贝宝收据上,所以这是我的首选方法。

如果其他人有更好的解决方案,我也会对此感兴趣!

编辑:

澄清on1 os1。这些是通常用于大小/颜色等的“选项”。有关它们的更多信息,请参阅 option_name1 option_selection(sp) 下的IPN PDT Paypal variables。名称当然是标题,即“订单 ID”,操作系统将是实际 ID。

编辑:

查看该文档 $my2CO->addField('cart_order_id', rand(1, 100)); 是我放置自己的购物车订单 ID 的地方。那应该是正确的字段。很抱歉造成混乱:)

编辑:

最后有一个用于paypal IPN的自定义字段,称为“自定义”,向此添加数据将通过,这将为您往返传输orderid。它必须被称为双方的习惯。

【讨论】:

“on1 / os1”是什么意思? 我不认为使用我正在使用的“购物车上传”命令可以使用这些选项——至少在 x.com 上糟糕的文档中没有。我会在沙盒中试一试,看看会发生什么。 $my2CO 的东西是用于 2CheckOut,而不是用于 PayPal——我尝试传递一个自定义的“myorderid”字段,但它没有在 IPN 回发中返回——除非我这样做了错了。 "custom" 应该是自定义字段的名称。您不能将其命名为您自己的名字,它必须是自定义的,并且只能有一个。如果您没有使用过该字段,我建议您使用该字段。 @premiso -- 可能就是这样!我会尝试只使用“自定义”这个词,看看会发生什么。【参考方案2】:

(这可能与其他 API 不同)。

我的经验是通过 C# 进行快速结帐,但即使在 PHP 中,该过程也应该是相同的。如果您在将用户重定向到 PayPal 之前正在使用名称-值对 (NVP) 接口,则您点击 PayPal 站点以检索重定向 URL。作为他们响应的一部分,他们将令牌传回给您。您将此令牌与您的订单一起保存。当 IPN 回发发生时,您将获得相同的令牌,以便您查找原始订单。

流程如下所示(“您”是您的站点):

用户填写购物车,点击按钮/链接结帐 请求已发送到您的站点 您的网站收到请求,将数据发送到 PayPal 您会收到来自 PayPal 的初始响应,其中包含一个令牌 您将此令牌与该用户的购物车一起保存。 您将用户重定向到 PayPal 返回的链接 用户被重定向到 PayPal 并输入付款信息 付款信息由 PayPal 验证 用户被重定向回您的网站 PayPal 将 IPN 响应发送回您的网站 您获取响应中包含的令牌 您查找之前保存的令牌以找到购物车(它们的值相同) 您关闭了初始订单/购物车。

您可能想试试PHP SDK - 向下滚动到名称-值对界面。

【讨论】:

但是当他们返回确认页面时,我怎么知道我正在保存什么订单?这就是我的全部困境! 我修改了我的回复以包含流程。也许这将有助于更好地解释它。 嗯,这不是我的网站所采用的流程。基本上,购物车会变成一个 html 表单,其中包含与变量名称匹配的隐藏字段,然后表单会自动提交给 PayPal,后者会将用户直接带到 PayPal。据我了解,SDK 设置不适用于“购物车上传”命令,但我现在正在阅读文档以查看是否遗漏了什么。【参考方案3】:

我非常怀疑这会对原始发帖人有所帮助,但 PayPal 已经添加或最终记录了“发票”选项,该选项允许您发布 OrderID,并通过 IPN 将其发回。 我目前正在使用它,它似乎按预期工作。

有关详细信息,请参阅Website Payments Standard Integration Guide (PDF):附录 A,表 A.4

【讨论】:

【参考方案4】:

您可以创建并发布一个长度为 255 个字符的 自定义 传递变量,该变量可以保存任何数据。更多信息请参阅官方 Paypal IPN 指南第 44 页。

【讨论】:

以上是关于PayPal IPN 返回购物车或订单 ID 以进行后处理的主要内容,如果未能解决你的问题,请参考以下文章

Paypal IPN 处理来自购物车上传的篡改订单

PayPal 购物车上传 - 如果用户点击离开 PayPal,则链接返回以稍后付款

Paypal IPN POST 变量随机返回 item_number 或 item_number1

Paypal IPN,在哪里将我的订单 ID 放在 paypal sdk (android) 中以通过我的服务器验证付款?

网站支付标准:如何连接发送的订单和接收订单的 IPN?

解决Opencart paypal ipn 返回 INVALID