2013-08-16 21 views
10

come nel titolo ... per qualche ragione, il sito web Magento non applica i codici coupon ... restituisce sempre un messaggio "Codice coupon non valido" non valido. Ma stranamente, questo accade quando il prezzo del carrello è maggiore della 120 mia valuta.

Esempio: se ho un prodotto nel carrello con il prezzo di 65, il codice coupon funziona ok ... se ho lo stesso prodotto nel carrello ma con qty 2 (che significa che il prezzo totale diventa 130) ottengo il messaggio di errore non valido di cui sopra

ho rintracciato giù il codice per "Mage_Sales_Model_Quote" di classe, che ha una funzione denominata: _validateCouponCode(), all'interno, dove il seguente: $ indirizzo-> hasCouponCode() restituisce sempre false. .. Cosa dovrei provare? ... Ho reindicizzato, cache aggiornata ... eccetera ... nulla è cambiato ... e non riesco a trovare nel modello di indirizzo la funzione hasCouponCode per vedere cosa succede lì dentro ... molte grazie in anticipo

+0

Hai trovato qualche soluzione per questo? – Taras

+0

Posso vedere le vostre condizioni delle regole del carrello per questo? –

+0

È necessario pubblicare la regola del codice coupon serializzato se si desidera aiutare a diagnosticare il motivo per cui il codice coupon non è valido alcune volte. –

risposta

0

Prima di tutto var_dump (indirizzo $) e controllare i dettagli.

Poi,

Controllare i seguenti:

  1. date corrette per inizio e di scadenza.
  2. Impostazione dei gruppi di clienti corretti per il coupon.
  3. Impostandolo active.

Se tutti sopra 1, 2, 3 requisiti veri quindi impostare Stop further rules processing a YES

  • Oltre a questi, per qualche motivo, la SKU richiedono caratteri alfanumerici per le condizioni. Quindi controlla se i tuoi valori SKU dei prodotti sono alfanumerici.
3

Per prima cosa è necessario capire come funziona $ address-> hasCouponCode().

Non esiste un metodo tale che venga chiamato utilizzando la funzione magica __call.

Non è possibile accedervi direttamente perché $ _data è protetto.

Ora, il modo migliore per eseguire il debug è verificare se si dispone di un coupon impostato nel proprio oggetto indirizzo.

$data = $address->getData(); 
$coupon = $data['coupon_code']; 

Ora verificare se il coupon è impostato o meno nel caso in cui si abbiano 2 articoli nel carrello.

Un altro modo è quello di cercare coupon aggiungere utilizzando setter come

$address->setCouponCode('Your Coupon Code'); 

o

$address->setData('coupon_code', 'Your Coupon Code'); 

e verificare se questo funziona o meno. Se non poi guardare in

_validateCouponCode in Mage_Sales_Model_Quote 

sarà un buon inizio per il debug.

7

Bene, senza le tue regole precise è difficile dare una risposta completa.

In primo luogo, il Mage_Sales_Model_Quote :: _ validateCouponCode() chiamata ha un unico lavoro di rimuovere il codice coupon dalla citazione se il codice coupon non è sull'indirizzo preventivo. Questo perché durante la chiamata collectTotal il modello di sconto totale copierà il codice del coupon all'indirizzo SE è stato valido e applicato. Quindi, il fatto che $ address-> hasCouponCode() restituisca null in questo caso è solo un indicatore del rifiuto del validatore di applicare il codice coupon fornito.

In secondo luogo, è necessario individuare due metodi per scoprire perché il coupon non viene applicato. Probabilmente è solo l'una o l'altra a seconda del tuo coupon, ma ti farò notare entrambi. Mage_SalesRule_Model_Validator :: process() e Mage_SalesRule_Model_Validator :: processShippingAmount() sono i due luoghi che controlleranno il codice del coupon e probabilmente lo applicheranno e copieranno il codice all'indirizzo.

Come nota a margine, Mage_SalesRule_Model_Validator :: _ maintainAddressCouponCode() è il metodo responsabile per copiare il codice coupon dal validatore (che ha ottenuto il codice la citazione) all'indirizzo. Se questo metodo non viene mai chiamato, il codice coupon verrà sempre rimosso dall'offerta.

tl; dr

Fase di debug Mage_SalesRule_Model_Validator :: processo() e Mage_SalesRule_Model_Validator :: processShippingAmount() per eseguire il debug il motivo per cui il codice coupon non è valido.