Каковы мои варианты возврата онлайн -возврата после обновления?

magento.stackexchange https://magento.stackexchange.com/questions/332

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top