1.9.2.1 Pagamento errato PayPal Pro quando è applicato lo sconto
-
13-12-2019 - |
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:
Ordina con le giuste quantità, ma PayPal addebita una quantità diversa 76.32 € VS 79.92 € e Magento segnala una sospetta frode
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?
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(),
);
.