2012-04-30 5 views
7

Utilizziamo un'estensione di verifica personalizzata da Templates Master denominata "Firecheckout". Non sono sicuro che sia pertinente, ma ho pensato di doverlo menzionare. Occasionalmente vedo una e-mail non riuscita della transazione con il motivo "Specificare un metodo di spedizione". Ho passato molto tempo a cercare di capire come ciò possa accadere e sono perso. Ho provato tutto quello che posso pensare per duplicare il problema. A seconda della combinazione di cose che faccio (aggiunta/rimozione di articoli dal carrello, aggiunta/rimozione di un codice coupon che modifica le opzioni di spedizione, passaggio tra siti mobili e desktop, ecc.) Sono stato in grado di farlo in modo che la pagina di checkout non 't avere un'opzione selezionata per il metodo di spedizione. Tuttavia, se provo a inviare l'ordine, ricevo un messaggio rosso immediato nella sezione del metodo di spedizione che dice "Si prega di specificare il metodo di spedizione" (notare la differenza tra ciò che dice nell'e-mail e ciò che dice nell'errore visualizzato sulla pagina ... manca "a"). Ciò non risulta in una email di errore.Errore di transazione Magento "Specificare un metodo di spedizione"

La ricerca attraverso il codice trovo che l'e-mail errore si attiva nel TM_FireCheckout_Model_Service_Quote (si estende Mage_Sales_Model_Service_Quote) classe nel _validate metodo

$method= $address->getShippingMethod(); 
$rate = $address->getShippingRateByCode($method); 
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) { 
    Mage::throwException($helper->__('Please specify a shipping method.')); 
} 

In questo caso, credo che sia $ metodo o $ tasso è nullo o falso, ma perché/come potrebbe essere? C'è qualcosa che potrei fare per assicurarmi che ciò non accada mai? L'unica differenza tra il metodo _validate di FireCheckout e il metodo _validate della classe madre è in cui i campi sono considerati obbligatori. Non modifica in alcun modo l'oggetto indirizzo, quindi le chiamate successive a getShippingMethod e getShippingRateByCode devono essere uguali a un'installazione predefinita.

Posso fornire ulteriori dettagli se necessario. Fondamentalmente sto cercando di capire cosa può scatenare quell'errore e come posso riprodurlo in modo da poter finalmente riparare il buco che lo sta causando.

Grazie!

+2

perché non aggiungere una riga di registro in _validate() 'Mage :: log (" Firecheckout: ". Var_dump ($ method)." | ". Var_dump ($ rate), null, 'mydebug.log', true) ; 'a una copia locale di Mage_Sales_Model_Service_Quote e coda questo file di log personalizzato, forse aggiungi anche l'ordine e l'ID cliente per vedere se quei valori persistono? – B00MER

+1

Ho esattamente lo stesso errore, ma sto usando l'estensione Onestepcheckout da Apptha. Qualsiasi aiuto sarebbe apprezzato. – Lennon

risposta

0

Ho incontrato qualcosa di simile prima, ma non era con Firecheckout. Ma era anche l'estensione Onestepcheckout di Apptha come @Lennon. Per farla breve, era una disparità nella gestione dei javascript che trashed i dati. Non ho una risposta definitiva per te, ma ti consiglio di esaminare cosa succede tra convalida dei moduli e salvataggio dei dati nel modulo di pagamento.

Quello che puoi fare per iniziare a investigare è quello di accendere Firebug su FF, guardare la console e vedere se i tuoi dati vengono ancora trasmessi. È inoltre possibile creare un semplice modulo di osservatore a fare quanto segue all'evento controler_action_predispatch:

$request = $observer->getControllerAction()->getRequest(); 
Mage::log(var_export($request->getParams(),true)); 

..o solo modificare direttamente i file del controller all'interno dei percorsi di checkout. qualsiasi cosa faccia galleggiare la tua barca.

Abilita i registri e tail -f var/logs/system.log. Dovresti assicurarti che le richieste corrispondano al log. È così che ho iniziato a risolvere il mio problema.

Ancora una volta, questa non è una correzione "copypasta" o un tutorial diretto alla radice del problema, ma piuttosto condividere la mia esperienza su come ho diagnosticato il mio problema dalla mia esperienza di prima mano.

È possibile creare un modulo molto rapidamente a http://www.silksoftware.com/magento-module-creator

0

è necessario definire il metodo di spedizione dopo i cambiamenti. Ad esempio, in "indexController" del Firecheckout creare una funzione come "saveShippingAction". Questa funzione è possibile chiamare tramite Ajax ogni volta per modificare i dati del cliente o come preferisci.

posto Interno:

$customer = Mage::getSingleton('customer/session')->getCustomer(); 
    $shippingData = $this->getRequest()->getParam('shipping'); 
    $shippingData['street'] = implode("\n", $shippingData['street']); 
    $customerAddress = $customer->getAddresses(); 
    $customerAddress = end($customerAddress); 
    $customerAddress->setIsDefaultShipping(true)->setSaveInAddressBook(true); 
    $customerAddress->addData($shippingData)->save(); 

In questo esempio registrare i dati di consegna di nuovo all'ultimo indirizzo del cliente, se nel tuo caso è necessario salvare per un nuovo cliente, basta creare un indirizzo per lui e salva come indirizzo di consegna.

Spero di aver aiutato, buona fortuna.