• Resolved wpharvest

    (@wpharvest)


    Hello there,

    I’m using the WC’s Fees API to give the customers a discount based on their already available credit.

    https://woocommerce.com/document/add-a-surcharge-to-cart-and-checkout-uses-fees-api/

    The Paypal plugins recently stopped working and is giving me this error: “CANNOT_BE_NEGATIVE Must be greater than or equal to 0. If the currency supports decimals, only two decimal place precision is supported.”

    I did a bit of digging and as far as I got was that your plugin is sending to the Paypal API the discount amount which is a negative number, instead of the total. This is a breakdown of the API call from the file woocommerce-paypal-payments/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php:

    object(WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit)#3402 (11) {
      ["amount":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      object(WooCommerce\PayPalCommerce\ApiClient\Entity\Amount)#3351 (3) {
        ["money":"WooCommerce\PayPalCommerce\ApiClient\Entity\Amount":private]=>
        object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3153 (3) {
          ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
          string(3) "USD"
          ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
          float(0.03)
          ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
          array(3) {
            [0]=>
            string(3) "HUF"
            [1]=>
            string(3) "JPY"
            [2]=>
            string(3) "TWD"
          }
        }
        ["breakdown":"WooCommerce\PayPalCommerce\ApiClient\Entity\Amount":private]=>
        object(WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown)#3357 (7) {
          ["item_total":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3359 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(0.03)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["shipping":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3355 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(0)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["tax_total":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3356 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(0)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["handling":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          NULL
          ["insurance":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          NULL
          ["shipping_discount":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          NULL
          ["discount":"WooCommerce\PayPalCommerce\ApiClient\Entity\AmountBreakdown":private]=>
          NULL
        }
        ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Amount":private]=>
        array(3) {
          [0]=>
          string(3) "HUF"
          [1]=>
          string(3) "JPY"
          [2]=>
          string(3) "TWD"
        }
      }
      ["items":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      array(2) {
        [0]=>
        object(WooCommerce\PayPalCommerce\ApiClient\Entity\Item)#3387 (7) {
          ["name":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(4) "test"
          ["unit_amount":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3385 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(0.04)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["quantity":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          int(1)
          ["description":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(0) ""
          ["tax":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3226 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(0)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["sku":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(4) "test"
          ["category":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(14) "PHYSICAL_GOODS"
        }
        [1]=>
        object(WooCommerce\PayPalCommerce\ApiClient\Entity\Item)#3394 (7) {
          ["name":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(18) "Payment via Wallet"
          ["unit_amount":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3398 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(-0.01)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["quantity":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          int(1)
          ["description":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(0) ""
          ["tax":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          object(WooCommerce\PayPalCommerce\ApiClient\Entity\Money)#3400 (3) {
            ["currency_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            string(3) "USD"
            ["value":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            float(0)
            ["currencies_without_decimals":"WooCommerce\PayPalCommerce\ApiClient\Entity\Money":private]=>
            array(3) {
              [0]=>
              string(3) "HUF"
              [1]=>
              string(3) "JPY"
              [2]=>
              string(3) "TWD"
            }
          }
          ["sku":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(0) ""
          ["category":"WooCommerce\PayPalCommerce\ApiClient\Entity\Item":private]=>
          string(14) "PHYSICAL_GOODS"
        }
      }
      ["shipping":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      object(WooCommerce\PayPalCommerce\ApiClient\Entity\Shipping)#3393 (2) {
        ["name":"WooCommerce\PayPalCommerce\ApiClient\Entity\Shipping":private]=>
        string(11) "Dragos Micu"
        ["address":"WooCommerce\PayPalCommerce\ApiClient\Entity\Shipping":private]=>
        object(WooCommerce\PayPalCommerce\ApiClient\Entity\Address)#3225 (6) {
          ["country_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Address":private]=>
          string(2) "US"
          ["address_line_1":"WooCommerce\PayPalCommerce\ApiClient\Entity\Address":private]=>
          string(15) "95 Pearson Blvd"
          ["address_line_2":"WooCommerce\PayPalCommerce\ApiClient\Entity\Address":private]=>
          string(0) ""
          ["admin_area_1":"WooCommerce\PayPalCommerce\ApiClient\Entity\Address":private]=>
          string(2) "MA"
          ["admin_area_2":"WooCommerce\PayPalCommerce\ApiClient\Entity\Address":private]=>
          string(7) "Gardner"
          ["postal_code":"WooCommerce\PayPalCommerce\ApiClient\Entity\Address":private]=>
          string(5) "01440"
        }
      }
      ["reference_id":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      string(7) "default"
      ["description":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      string(0) ""
      ["payee":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      object(WooCommerce\PayPalCommerce\ApiClient\Entity\Payee)#3401 (2) {
        ["email":"WooCommerce\PayPalCommerce\ApiClient\Entity\Payee":private]=>
        string(19) "[email protected]"
        ["merchant_id":"WooCommerce\PayPalCommerce\ApiClient\Entity\Payee":private]=>
        string(13) "LL5EB36RQWL7E"
      }
      ["custom_id":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      string(0) ""
      ["invoice_id":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      string(0) ""
      ["soft_descriptor":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      string(0) ""
      ["payments":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      NULL
      ["contains_physical_goods":"WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit":private]=>
      bool(true)
    }

    Under the “items” object, you will see 2 items, one the normal priced at $0.04 but also a 2nd item which is the discount of $0.01. Under the initial “amount” > “money” object I can see the correct amount of $0.03.

    Hope you can help with this please! TIA!

    Thanks,
    Dragos Micu

    • This topic was modified 2 years, 10 months ago by wpharvest.
Viewing 3 replies - 1 through 3 (of 3 total)
  • Plugin Support Syde Niklas

    (@niklasinpsyde)

    Hi @wpharvest,

    The handling of negative fees will be improved in the upcoming 1.9.0 update to prevent this error.
    In the meantime, you could give it a try with this test package. Feedback about how it works for your application would be appreciated.
    Thanks!

    Kind regards,
    Niklas

    Thread Starter wpharvest

    (@wpharvest)

    Hi Niklas,

    Thanks for this, I will check it out and let you know if I’m having any issues.

    Thanks,
    Dragos

    Plugin Support Syde Joost

    (@joostvandevijver)

    Hello,

    since we did not receive any response or follow-up questions from you, we will assume you got this working to your requirements. If you still have any more questions for us, please open a new thread, because we will mark this one as resolved.

    Kind regards,
    Joost

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘CANNOT_BE_NEGATIVE Must be greater than or equal to 0. If the currency supports’ is closed to new replies.