C# 贝宝快捷结账:申请订单折扣

C# 贝宝快捷结账:申请订单折扣,c#,paypal,C#,Paypal,有一个运行ZNode的电子商务网站。我们发送税款、运费、订单总额等。在订单级别折扣(比如50%)生效之前,一切正常。我们收到PayPal的回复,回复如下: 购物车项目金额的总和与订单金额不匹配 我正在遍历API,找不到任何可以应用订单级别折扣的东西。FWIW,用户正在我们的网站上应用折扣代码,然后被转移到PayPal。我认为你的问题不是PayPal API。 在这个50%折扣的情况下,你检查过你的参数传递给paypal后一切都正常吗 在PayPal文档之后,您应该提供负值以反映订单的折扣。所以所

有一个运行ZNode的电子商务网站。我们发送税款、运费、订单总额等。在订单级别折扣(比如50%)生效之前,一切正常。我们收到PayPal的回复,回复如下:

购物车项目金额的总和与订单金额不匹配


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

我认为你的问题不是PayPal API。 在这个50%折扣的情况下,你检查过你的参数传递给paypal后一切都正常吗

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

资料来源:

用代码更新:(作者:Nick)

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

            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()
                                      }
                          });
        }
List items=paymentDetails.PaymentDetailsItem;
foreach(购物车中的ShoppingCartItem项目。ShoppingCartItems)
{
items.Add(新付款详细信息站点类型
{
名称=item.Book.Title,
数量=项目。数量,
编号=item.BookId.ToString(),
数量=
新基本计数类型
{currencyID=CurrencyCodeType.USD,
value=(item.Book.Price).To2Places()}
});
}
如果(cartTotals.折扣>0)
{
items.Add(新付款详细信息站点类型
{
Name=“促销代码折扣”,
数量=1,
Number=“PromoCode”,
数量=
新基本计数类型
{
currencyID=CurrencyCodeType.USD,
值=(cartotals.Discount*-1.To2Places()
}
});
}

通过PayPal API发送折扣的另一个选项使用
PAYMENTREQUEST\u n\u SHIPDISCAMT

这实际上是一个航运折扣,但工程刚刚好,是一个单线


但它确实说在帕尔帕尔端有运费折扣

我已经设置了TaxTotal、ShippingTotal、ItemTotal和OrderTotal。除非设置了折扣代码,否则所有这些都有效,因为项目+运输+税收不会加在OrderTotal中,因为OrderTotal中有一个金额。我找不到任何地方来设定折扣金额。有什么想法吗?你是说我需要创建一个项目并将值设置为负值?然后更新ItemTotal以反映所有项目以及我添加到折扣账户中的负面项目?PayPal“定制”文档提到“例如,您可以提供负面值以反映订单折扣。”在订单详细信息的
金额
字段的说明中,没有其他内容@Skomski–我可以阅读,但我错过了这些信息,因为我不认为包括折扣将被视为“定制”贝宝结账。另外,用于
SetExpressCheckout
DoExpressCheckoutPayment
操作的文档在同一字段的描述中不包含该信息。@therobyouknow我没有在折扣中使用表单字段,这将是危险的#1和#2它不需要在UI上,这都是服务器端处理的。我查询我的促销代码服务,确定折扣,然后向paypal发送另一个产品,但它的名称为促销代码,金额为负数。我会用代码更新..@TheRob你知道没问题。我建议不要使用基于表单的解决方案,因为您最初获得了折扣服务器端,将其发送给客户端,然后客户端将其发送给您。因为如果他们修改表单字段呢?还是跳过这些吧。我提供的代码是针对整个购物车的折扣,但同样的逻辑可以扩展为通过添加更多折扣项目来实现每个项目的折扣。