Domanda

Ho appena eseguito l'upgrade da 1.8, dove questo è stato usato per funzionare. Ora quando uno sconto del carrello viene applicato a un ordine, Magento 1.9.2.1 mostra i giusti prezzi, le tasse e lo sconto nell'ordine, ma passa valori diversi a PayPal che si traduce in un pagamento diverso e un IPN di frode sospetta. Questo è un negozio con IVA= 22%.

La configurazione fiscale:

 Configurazione fiscale

Ordina con le giuste quantità, ma PayPal addebita una quantità diversa 76.32 € VS 79.92 € e Magento segnala una sospetta frode

 Inserire l'immagine Descrizione qui

E questo sono i valori che sono stati passati da Magento (omettendo i non rilevanti):

[url] => https://api-3t.paypal.com/nvp
[BMCreateButton] => Array
    (
        [METHOD] => BMCreateButton
        [BUTTONCODE] => TOKEN
        [BUTTONTYPE] => PAYMENT
        [L_BUTTONVAR0] => subtotal=81.89
        [L_BUTTONVAR1] => tax=14.41
        [L_BUTTONVAR2] => shipping=0.00

        [L_BUTTONVAR7] => discount=19.98

        [VERSION] => 72.0

        [BUTTONSOURCE] => Magento_Cart_Community
    )
.

puoi aiutarti a risolvere questo?

È stato utile?

Soluzione

PayPal che fa la seguente matematica: subtotale + tasse - sconto e ricevere un totale in base a questo calcolo.Mentre tutte le figure dell'ordine di vendita Magento sono corrette non vi è alcun modo per inviare correttamente queste combinazioni di importo poiché PayPal si aspettano calcoli effettuati in base ai prezzi che escludono le tasse, escluso (nello sconto di esempio è applicato su un importo compresa la tassa, questo è il punto in cui la differenzava da!).L'unico modo per ricevere un importo appropriato in questo caso è passare solo il campo subtotale con grande valore totale, altrimenti avremo bisogno di cambiare sconto per escludere le tasse che confonderà il cliente.

Quindi, per riassumere questa parte:

   protected function _getOrderData(Mage_Sales_Model_Order $order)
        {
            $request = array(
                'subtotal'      => $this->_formatPrice($order->getBaseSubtotal()),
                'tax'           => $this->_formatPrice($order->getBaseTaxAmount()),
                'shipping'      => $this->_formatPrice($order->getBaseShippingAmount()),
                'invoice'       => $order->getIncrementId(),
                'address_override' => 'true',
                'currency_code'    => $order->getBaseCurrencyCode(),
                'buyer_email'      => $order->getCustomerEmail(),
                'discount'         => $this->_formatPrice(
                    $order->getBaseGiftCardsAmount()
                    + abs($order->getBaseDiscountAmount())
                    + $order->getBaseCustomerBalanceAmount()
                ),
            );
.

deve essere sostituito con (non è stato testato):

protected function _getOrderData(Mage_Sales_Model_Order $order)
    {
        $request = array(
            'subtotal'      => $this->_formatPrice($order->getBaseGrandTotal()),
            'invoice'       => $order->getIncrementId(),
            'address_override' => 'true',
            'currency_code'    => $order->getBaseCurrencyCode(),
            'buyer_email'      => $order->getCustomerEmail(),
            ),
        );
.

Altri suggerimenti

Solo un piccolo commento, c'è un errore di battitura sulla soluzione.C'è una parentesi di chiusura indesiderata

protected function _getOrderData(Mage_Sales_Model_Order $order)
{
    $request = array(
        'subtotal'      => $this->_formatPrice($order->getBaseGrandTotal()),
        'invoice'       => $order->getIncrementId(),
        'address_override' => 'true',
        'currency_code'    => $order->getBaseCurrencyCode(),
        'buyer_email'      => $order->getCustomerEmail(),
    );
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top