Magento – Risoluzione bug paypal e sconti

Magento è un CMS per ecommerce tanto potente, quanto a volte tanto fragile.

Se utilizzate una delle ultimi versioni di Magento, e Paypal Hosted Solution, al momento dell’applicazione di un buono sconto al totale del carrello, si crea una discrepanza nei calcoli.

In pratica paypal in automatico calcola due volte lo sconto applicato, e quindi la cifra finale risulta errata al momento del pagamento (Magento calcola lo sconto, e poi Paypal lo ricalcola).

Risolvere questo Bug è abbastanza semplice se sapete muovervi tra i file del core di Magento, infatti bisogna applicare qualche modifica al file che effettua i calcoli inoltrati a paypal.

Prima di tutto, effettuate una copia nel local dei file che si andrà a modificare. Mai, e ripeto MAI toccare quelli originali del core.

Il nostro amico incriminato si troverà al seguente percorso:
App/code/core/Mage/Paypal/Hostedpro/Request.php

Effettuata la copia nella cartella local di ciò che ci serve apriamo il file con un editor adatto a PHP.

Ora, rechiamoci intorna alla riga 156, e cerchiamo la funzione _getOrderData() .

All’interno di essa aggiungiamo le seguenti righe di codice:

$origDiscount=$order->getBaseGiftCardsAmount()
                + abs($order->getBaseDiscountAmount())
                + $order->getBaseCustomerBalanceAmount();
$RealDiscount = $origDiscount ;
if($origDiscount>0){
                    $gt=$order->getGrandTotal();//grandtotal
                    $st=$order->getBaseSubtotal();//subwithouttax
                    $tx=$order->getBaseTaxAmount();//tax
                    $sp=$order->getBaseShippingAmount();//shipping
                    //Figure out Discount using Grand Total
                    $RealDiscount=$st+$tx+$sp-$gt;
                 }

Successivamente, non tanto lontano, ma qualche riga di codice dopo, cercare l’array $request , e modificate il seguente valore, da:

'discount'      => $this->_formatPrice(
                $order->getBaseGiftCardsAmount()
                + abs($order->getBaseDiscountAmount())
                + $order->getBaseCustomerBalanceAmount()

A:

'discount'      => $this->_formatPrice($RealDiscount)

In questo modo verrà ricalcolato lo sconto inoltrato a paypal (o meglio, verrà calcolato solo una volta), e non vi saranno errori di calcolo finali!

 

Seguiteci anche su Facebook, Google Plus, Tumblr e Twitter, per restare sempre in contatto con noi e con le nostre guide.



Cerca

Seguici

Live da Facebook
Live da Twitter
Seguici su Telegram
Canale InsiDevCode Telegram