除了我们的常规处理,我们还为我们网站的客户整合了选项,通过PayPal与他们的购物车结账,使用PayPal IPN&amp; amp; PDT记录交易。我们已经完成了近一年的代码,并且它可靠地运行并且符合预期。但是,由于这个原因,我们一直非常犹豫要实施它:我们无法确定从PayPal返回或检索项目选项值后结帐的任何合理方式。 < / p>
我们 拥有这些项目选项。例如,我们有一个稍微复杂的系统,当用户添加一个项目时,假设一件T恤,有两个项目选项ID表示T恤的颜色和大小。这些都是在退回给我们之前从PayPal中删除的,这意味着我们只获得一般项目,而不是客户订购的具体项目。
这是我们的困境:
1)While the documentation clearly states that you can send PayPal on0_ and os0_变量带有项目选项信息,我们无法确定将它们返回给您的任何方式。下面是项目返回值的精简样本。
发送到PayPal:
<input type="hidden" name="item_number_1" value="10272">
<input type="hidden" name="amount_1" value="19.95">
<input type="hidden" name="shipping_1" value="3.55">
<input type="hidden" name="quantity_1" value="1">
<input type="hidden" name="on0_1" value="15001">
<input type="hidden" name="on1_1" value="14000">
这是从PayPal返回的(剥离后只有相关的项目信息):
Post Vars: Array
(
[item_number1] => 10272
[num_cart_items] => 1
[mc_handling1] => 3.55
[mc_shipping1] => 3.55
[item_name1] => [Complete Item Description...]
[mc_gross_1] => 25.00
[transaction_subject] => Shopping Cart[complete item description]
[payment_gross] => 25.00
[ipn_track_id] => 4f3054cc843ba
)
2)据我所知,有一个自定义字段。一个自定义字段。但是,我们的客户可以在购物车中拥有10个或更多商品,大多数商品都有一到三个商品选项。因此,我们必须创建一个可解析的项目ID,选项和数字的伪数组作为要放置在自定义字段中的文本字符串,以便将我们的项目选项返回给我们。这个hacky解决方案似乎是我们获得的“最佳机会”选项,但是它也不可行,因为有256个字符的限制,所以我们不能依赖返回的信息。
3)因此,如果我是正确的,我们无法接收或检索项目选项变量的返回。但是,如果PayPal在退房后只是将客户返回我们的网站,那么我们仍然可以检索会话变量,其中包含完整的购物车信息。因此,当PayPal重定向用户时,我们可以获取信息。除非用户退房时,它们不会自动重定向到PayPal,而是选择重定向是可选并且在一个小的,容易错过的链接结账后 - 意味着技术上不可靠任何方式。
最终,我们开始接受PayPal,不得不手动为PayPal.com上的每个客户检索项目选项,只需在重定向页面中有代码正确填充DID选择重定向的用户的订单,填充哪些我们合理的订单。我们有大约一百个订单,其中很少有人真正重定向回我们的网站。
4)我们尝试在隐藏的输入字段中传递自定义变量,但是,根据PayPal的文档,这些似乎在返回之前被删除了。
5)如果IPN回来,点击“PayPal”存储信息以便检索的每个用户都创建一个自定义数据库记录是不现实或不可行的。这不是解决方案。
更新 6)根据用户建议,我们尝试通过对某些GetTransactionDetails()的无益使用来调用PayPal的documentation here。这没有返回项目选项,而是返回一个类似于PDT中返回的数组格式:
[40] => L_NUMBER0=10100
如果我们找不到可接受的解决方法,我们可能必须再次关闭PayPal选项。我们根本无法确定任何返回项目选项值的实际方法,但是使用PayPal的购物车系统,我们绝对要让用户离开我们的网站完成结账,并且完整的购物车数据不会退还给我们,所以看来我们无法记录除非我们想要存储点击“PayPal”按钮的每个人的交易数据,否则完成客户交易。它是否正确?
是否有任何方式来实现这一目标,我们错过了?如果PayPal的购物车解决方案是最好的结账方式,为什么PayPal不会退回购物车的数据?
答案 0 :(得分:0)
这就是我的所作所为。
1)创建订单标识符并将用户购买的所有商品存储到表中。在一个理想的系统中,您将拥有一个SKU(库存单位),用于您销售的每种可能的项目组合,例如:
因此,根据订单ID,您可以存储这些SKU ID,数量,任何其他信息,即是否可以应用折扣。
2)将发票ID传递给PayPal,然后您可以在IPN上调用它。
3)对于没有完成整个付款流程的用户,您可以创建一个cron作业来清除不需要的数据。如果订单时间超过设定的时间(因为PayPal可能会延迟),请在订单初始化时经常运行,然后将其从表中删除。
答案 1 :(得分:0)
尽管如此,还有许多其他方法可以给这只猫留下光泽。其他几个:
GetTransactionDetails文档说它返回项目选项信息;当您获得IPN消息以获取未在原始IPN中获得的特定PayPal字段时调用此方法
使用一些javascript将您的选项选择信息复制/删除到您的项目描述中(然后在处理IPN时将其解析出来)
切换到使用快速结账,以便始终重定向客户(预付款),并且您可以使用会话变量创建订单,就像您在致电DoEC后使用其他付款方式一样
但正如diggersworld所说,一般要求您的支付提供商处理(甚至通过)任意复杂的实体并不是最佳途径。 Visa不关心你的T恤尺码和颜色,PayPal也不应该。如果您的履行流程需要,那么您就没有最坚定的基础。