Wie können ich nach dem Upgrade Online -Rückerstattungen wiederherstellen?
-
16-10-2019 - |
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?
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.