Paypal Express Checkout:应用订单折扣

Posted

技术标签:

【中文标题】Paypal Express Checkout:应用订单折扣【英文标题】:Paypal Express Checkout: Apply order discount 【发布时间】:2011-10-23 14:19:20 【问题描述】:

拥有一个运行 ZNode 的电子商务网站。我们发送税金、运费、订单总额等。一切正常,直到应用订单级别的折扣(比如 50%)。我们收到 PayPal 的回复,内容如下:

购物车商品总金额与订单金额不符。

我正在遍历 API,但找不到任何可以应用订单级折扣的内容。 FWIW,用户在我们的网站上应用折扣代码,然后被转移到 PayPal。

【问题讨论】:

【参考方案1】:

通过 PayPal API 发送折扣的另一种方法是使用 PAYMENTREQUEST_n_SHIPDISCAMT

这实际上是一个运费折扣,但效果很好,而且是一条线。

但它确实在 PalPal 端显示了运费折扣。

【讨论】:

【参考方案2】:

我认为您的问题不在于 PayPal API。 在这个 50% 的折扣案例中,您检查过您传递给 paypal 的参数是否一切正常?

在 PayPal 文档之后,您应该提供一个负值来反映订单的折扣。所以所有的东西加起来就是总量。

来源:https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing

更新代码:(尼克)

我有一个可以做各种事情的贝宝服务,但下面的代码应该让您了解折扣是如何运作的。折扣不是特殊类型,它和其他产品一样,只是通过将其命名为折扣并将其价格设置为负数来伪装。

            List<PaymentDetailsItemType> items = paymentDetails.PaymentDetailsItem;

        foreach (ShoppingCartItem item in cart.ShoppingCartItems)
        
            items.Add(new PaymentDetailsItemType
                          
                              Name = item.Book.Title,
                              Quantity = item.Quantity,
                              Number = item.BookId.ToString(),
                              Amount =
                                  new BasicAmountType
                                      currencyID = CurrencyCodeType.USD, 
                                       value = (item.Book.Price).To2Places()
                          );
        
        if (cartTotals.Discount > 0)
        
            items.Add(new PaymentDetailsItemType
                          
                              Name = "Promo Code Discount",
                              Quantity = 1,
                              Number = "PromoCode",
                              Amount =
                                  new BasicAmountType
                                      
                                          currencyID = CurrencyCodeType.USD,
                                          value = (cartTotals.Discount*-1).To2Places()
                                      
                          );
        

【讨论】:

我设置了 TaxTotal、ShippingTotal、ItemTotal 和 OrderTotal。除非设置了折扣代码,否则这些都可以工作,因为商品 + 运费 + 税不会加到 OrderTotal 中,因为 OrderTotal 中扣除了金额。我找不到设置折扣金额的地方。有什么想法吗? 您是说我需要创建一个项目并将值设置为负数吗?然后更新 ItemTotal 以反映所有项目以及我添加的负项目以说明折扣? PayPal“定制”文档提到“例如,您可以提供负值来反映订单的折扣。”在Amount 字段的描述中查看订单详细信息,但没有其他地方。 @Skomski – 我可以阅读,但我错过了该信息,因为我认为包含折扣不会被视为“定制”PayPal 结账。此外,SetExpressCheckoutDoExpressCheckoutPayment 操作的文档均未在同一字段的描述中包含该信息。 @theroyouknow 我没有使用表单字段来打折,这会很危险#1,而#2 它不需要在 UI 上,这都是在服务器端处理的。我查询我的促销代码服务,确定折扣,然后向贝宝发送本质上是另一种产品,但它被命名为带有负数的促销代码。我会用代码更新.. @theroyouknow 没问题。我说不要使用基于表单的解决方案,因为您最初获得了折扣服务器端,将其发送给客户端,然后客户端将其发送给您。因为如果他们修改表单域怎么办?还不如跳过所有这些。我提供的代码是针对整个购物车的折扣,但同样的逻辑可以扩展到通过添加更多折扣商品来为每件商品提供折扣。

以上是关于Paypal Express Checkout:应用订单折扣的主要内容,如果未能解决你的问题,请参考以下文章

PayPal Express Checkout 通行证 transactionID

如何访问 Paypal Express Checkout 的响应?

如何为 PayPal Express Checkout 配置 IPN?

paypal express checkout - 400 错误请求

Paypal Express Checkout / React - 发送产品信息

paypal express checkout set paypal费用另加