Каковы мои варианты возврата онлайн -возврата после обновления?
-
16-10-2019 - |
Вопрос
Когда магазин обновляется в прошлом Magento 1.5, он может потерять возможность для онлайн -возвратов из -за следующего изменения mage_adminhtml_block_sales_order_creditmemo_create_items
if ($this->getCreditmemo()->canRefund()) {
if ($this->getCreditmemo()->getInvoice()) {
против нового
if ($this->getCreditmemo()->canRefund()) {
if ($this->getCreditmemo()->getInvoice() && $this->getCreditmemo()->getInvoice()->getTransactionId()) {
К сожалению, не так много способов оплаты видели, что это изменение наступило и поэтому не имело Transaction_id на счете.
Некоторый метод оплаты в настоящее время реализовал сохранение Transaction_ID, используя/переоценить
Mage_payment_model_method_abstract
public function processInvoice($invoice, $payment)
{
$invoice->setTransactionId($payment->getLastTransId());
return $this;
}
включая собственную реализацию Magento для 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;
}
Однако комментарий в единственном месте ProcessInvoice называется MAGE_SALES_MODEL_ORDER_PAYMENT
$this->getMethodInstance()->processInvoice($invoice, $this); // should be deprecated
Заставляет меня думать, что это не лучший подход.
- Как лучше всего реализовать сохранение Transaction_ID на счете в вашем методе?
- Какие хорошие варианты имеют дело с устаревшими счетами?
Решение
Правильная установка идентификатора транзакции
Что касается картирования счетов. Поскольку Magento 1.4 получает внедренные транзакции, он автоматически устанавливает идентификатор транзакции при создании счета -фактуры capture()
или же registerCaptureNotification()
Методы заказа платежного объекта. Просто посмотрите _addTransaction()
из Mage_Sales_Model_Order_Payment
учебный класс. Таким образом, вам на самом деле не следует заботиться о установке этих идентификаторов транзакции вручную. Также вы можете быть смущены $this->getTransactionId()
Метод вызов, но на самом деле это не нужно было установлено вами, поскольку Magento генерирует идентификатор транзакции внутри, позвонив, звоня _generateTransactionId()
в захвате или регистрации уведомления о захвате.
Magento 1.4
Все обновления с момента Magento 1.4.x безопасны, так как эта логика всегда была там, поскольку внедрение организации платежей заказа. Все версии Magento до 1.4 имели эту огромную боль в обновлении, даже Core Authorize.net (проверьте мой ответ на SO: https://stackoverflow.com/questions/14207721/why-isnt-payment-method-information-available-in-orders-fter-uprading-from-ma/14270191#14270191) Если вы использовали этот метод для установки идентификатора транзакции на счете, то вы должны быть в безопасности, поскольку этот идентификатор транзакции автоматически генерируется Magento, если вы удалите processInvoice()
Звоните и ваше исходное значение, которое вы устанавливаете, также сохраняется для старых транзакций.
Вывод
Конечно, я могу ошибаться в этом случае, потому что он не был проверен таким образом, поэтому было бы здорово настроить его и проверить, прежде чем полагаться на мой ответ. По крайней мере, не использовали эти расширения платежей processInvoice()
Метод и возмещение были правильно обработаны Magento с моими кредитами.
ОБНОВИТЬ
Что касается информации о транзакциях для вашего способа оплаты, вам необходимо сделать $this->getInfoInstance()->setTransactionId('your_txn_id')
позвоните в ваш authorize()
или, если это прямой оплата без разрешения, capture()
Метод транзакции явно, чтобы Magento создавал запись транзакции для вас. Для старых записей следуйте за моим ответом на SO.