Domanda

Quando un negozio viene aggiornato passato Magento 1.5 può perdere la capacità di on-line rimborsi dovuti al seguente modifica Mage_Adminhtml_Block_Sales_Order_Creditmemo_Create_Items

if ($this->getCreditmemo()->canRefund()) {
    if ($this->getCreditmemo()->getInvoice()) {

vs. nuova

if ($this->getCreditmemo()->canRefund()) {
    if ($this->getCreditmemo()->getInvoice() && $this->getCreditmemo()->getInvoice()->getTransactionId()) {

Purtroppo non sono molti metodi di pagamento visto questo cambiamento a venire e, pertanto, non hanno il transaction_id presente sulla fattura.

Alcuni metodo di pagamento hanno implementato il salvataggio del transaction_id utilizzando / prioritario

Mage_Payment_Model_Method_Abstract

public function processInvoice($invoice, $payment)
{
    $invoice->setTransactionId($payment->getLastTransId());
    return $this;
}

compreso propria implementazione di Magento per Authorize.net

/**
 * Mock capture transaction id in invoice
 *
 * @param Mage_Sales_Model_Order_Invoice $invoice
 * @param Mage_Sales_Model_Order_Payment $payment
 * @return Mage_Payment_Model_Method_Abstract
 */
public function processInvoice($invoice, $payment)
{
    $invoice->setTransactionId(1);
    return $this;
}

Tuttavia il commento nell'unico posto processInvoice si chiama Mage_Sales_Model_Order_Payment

$this->getMethodInstance()->processInvoice($invoice, $this); // should be deprecated

mi fa pensare questo non è l'approccio migliore.

  • Qual è il modo migliore per attuare la salvezza della transaction_id sulla fattura nel vostro metodo di pagamento?
  • Quali sono buone opzioni per affrontare le fatture legacy?
È stato utile?

Soluzione

La corretta impostazione ID transazione

Per quanto riguarda le fatture di mappatura. Dal momento che Magento 1.4 ottiene transazioni introdotte, imposta transazione id automaticamente quando la fattura viene creato da capture() o registerCaptureNotification() metodi di pagamento entità dell'ordine. Basta guardare in _addTransaction() di classe Mage_Sales_Model_Order_Payment. Quindi in realtà non dovrebbe preoccuparsi L'impostazione di questo ID di transazione manualmente. Inoltre è possibile ottenere confuso con il metodo $this->getTransactionId() chiamata, ma in realtà è non necessario essere impostato da voi, dal momento che Magento genera transazione id internamente chiamando _generateTransactionId() nella cattura o la registrazione della notifica di cattura.

Magento 1.4

Tutti gli aggiornamenti dal Magento 1.4.x sono sicuri, dal momento che questa logica era sempre lì, dal momento che le introduzioni di soggetti ordine transazione di pagamento. Tutte le versioni di Magento prima 1.4 stava avendo questo enorme dolore aggiornabilità, anche Authorize.Net nucleo (leggi la mia risposta su SO: https://stackoverflow.com/questions/14207721/why-isnt-payment-method-information-available-in-orders-after- aggiornamento-da-ma / 14270191 # 14270191 ). Se si sta utilizzando questo metodo di fissazione delle transazioni id sulla fattura, che si dovrebbe essere al sicuro con esso, dal momento che questa transazione id viene generato automaticamente dal Magento se si rimuove chiamata processInvoice() e il vostro valore originale che hai impostato viene viene conservato anche per vecchie transazioni.

Conclusione

Naturalmente posso sbagliarmi in questo caso, perché non è stato testato in questo modo, quindi sarebbe bello per configurarlo e prova prima di fare affidamento sulla mia risposta. Almeno non delle mie estensioni di pagamento è stato con questo metodo processInvoice() e rimborsi è stato elaborato correttamente da Magento con i miei creditmemos.

UPDATE

Per quanto riguarda le informazioni sulle transazioni per il metodo di pagamento, è necessario effettuare chiamate $this->getInfoInstance()->setTransactionId('your_txn_id') nel vostro authorize() o, se si tratta di un pagamento diretto senza autorizzazione, metodo capture() transazioni in modo esplicito, per far Magento creare record della transazione per voi. Per vecchi dischi seguono la mia risposta su SO.

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