Paypal Express Checkout: применить скидку на заказ

есть сайт электронной коммерции под управлением ZNode. Мы посылаем Тягло, перевозку груза, итог заказа, etc. Все работает нормально, пока не будет применена скидка уровня заказа (скажем, 50%). Мы получаем ответ от PayPal, в котором говорится следующее:

итоговые суммы номенклатуры корзины не соответствуют суммам заказа.

я пересекаю API, и я не могу найти ничего, чтобы применить скидку уровня заказа. Чистки рядов, пользователь применяет коды скидок на нашем сайте, а затем передается система paypal.

2 ответов


Я думаю, что ваша проблема не в API PayPal. Вы проверили, что все работает идеально с вашими параметрами, переданными paypal в этом случае скидки 50%?

после документации PayPal вы должны указать отрицательное значение, чтобы отразить скидку на заказ. Так что все складывается в общую сумму.

источник: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing

enter image description here

обновление с кодом: (ником)

У меня есть сервис 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()
                                      }
                          });
        }

другой вариант для отправки скидки через API PayPal используйте PAYMENTREQUEST_n_SHIPDISCAMT

что на самом деле является скидкой на доставку, но работает отлично и является одной строкой.

но он говорит, что скидка на доставку в конце PalPal.