Frage

Wenn ein Geschäft an Magento 1.5 vorbei wird, kann er die Fähigkeit von Online -Rückerstattungen verlieren, da die folgenden Änderung mage_adminhtml_block_sales_order_creditmemo_create_items ändert

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

vs. neu

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

Leider haben diese Änderung nicht viele Zahlungsmethoden vorliegt und daher nicht die Transaktion auf der Rechnung vorhanden.

Eine Zahlungsmethode hat nun die Einsparung des Transaction_ID durch Verwendung/Überschreiben implementiert

Mage_payment_model_method_abstract

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

einschließlich Magentos eigener Implementierung für Autorize.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;
}

Der Kommentar an der einzigen Place ProcessInvoice heißt jedoch mage_sales_model_order_payment

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

Ich denke, dies ist nicht der beste Ansatz.

  • Was ist der beste Weg, um die Einsparung der Transaktion auf der Rechnung in Ihrer Zahlungsmethode zu implementieren?
  • Was sind gute Optionen, um mit Legacy -Rechnungen umzugehen?
War es hilfreich?

Lösung

Richtige Transaktions -ID korrekt eingestellt

Wie für die Mapping -Rechnungen. Da Magento 1.4 Transaktionen eingeführt wird, wird die Transaktions -ID automatisch festgelegt, wenn die Rechnung von der Rechnung erstellt wird capture() oder registerCaptureNotification() Methoden der Auftragszahlung. Schauen Sie sich einfach an _addTransaction() von Mage_Sales_Model_Order_Payment Klasse. Sie sollten sich also nicht darum kümmern, diese Transaktions -IDs manuell festzulegen. Sie können auch verwirrt werden $this->getTransactionId() Methodenaufruf, aber es muss eigentlich nicht von Ihnen festgelegt werden, da Magento die Transaktions -ID intern durch Anruf generiert _generateTransactionId() bei der Erfassung oder Registrierung der Erfassungsbenachrichtigung.

Magento 1.4

Alle Upgrades seit Magento 1.4.x sind sicher, da diese Logik immer vorhanden war, da Einführung der Bestellzahlungstransaktion Entity. Alle Magento -Versionen vor 1.4 hatten diese riesigen Schmerzen in der Upgradabilität, sogar Core Authorize.net (überprüfen Sie meine Antwort auf SO: https://stackoverflow.com/questions/14207721/why-isnt-payment-method-information-available-in-orders-after-upgrading-from-ma/14270191#14270191). Wenn Sie diese Methode zum Einstellen der Transaktions -ID auf Rechnung verwenden, sollten Sie damit sicher sein, da diese Transaktions -ID bei Entfernen automatisch von Magento generiert wird processInvoice() Rufen Sie an und Ihr ursprünglicher Wert, den Sie festgelegt haben, wird auch für alte Transaktionen erhalten.

Fazit

Natürlich kann ich mich in diesem Fall irren, weil es nicht auf diese Weise getestet wurde. Es wäre also großartig, es einzurichten und zu testen, bevor ich mich auf meine Antwort verlassen würde. Zumindest nicht meiner Zahlungsweiterungen verwendete dies processInvoice() Methode und Rückerstattungen wurden von Magento mit meinen Kreditmemos korrekt verarbeitet.

AKTUALISIEREN

In Bezug auf Transaktionsinformationen für Ihre Zahlungsmethode müssen Sie erstellen $this->getInfoInstance()->setTransactionId('your_txn_id') Rufen Sie in Ihrem an authorize() oder wenn es sich um direkte Zahlung ohne Genehmigung handelt, capture() Methodentransaktion explizit, um Magento Transaktionsdatenersatz für Sie zu erstellen. Für alte Aufzeichnungen folgen meiner Antwort auf so.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top