Какие у меня есть варианты возврата средств онлайн после обновления?
Когда магазин обновляется после версии 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()) {
К сожалению, не многие способы оплаты заметили это изменение, и поэтому в счете-фактуре нет идентификатора транзакции.
В некоторых способах оплаты теперь реализовано сохранение идентификатора транзакции с помощью использование/переопределение
mage_payment_model_метод_абстрат
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
Заставляет меня думать, что это не лучший подход.
- Каков наилучший способ реализовать сохранение идентификатора транзакции в счете-фактуре в вашем способе оплаты?
- Какие есть хорошие варианты решения проблемы наследия счета-фактуры?
1 answers
Правильная настройка Идентификатора Транзакции
Что касается картографических счетов-фактур. Поскольку 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 испытывали огромную проблему с возможностью обновления, даже при авторизации ядра.Сеть (проверьте мой ответ на SO: https://stackoverflow.com/questions/14207721/why-isnt-payment-method-information-available-in-orders-after-upgrading-from-ma/14270191#14270191). Если вы использовали этот метод для установки идентификатора транзакции в счете-фактуре, вы должны быть в безопасности с ним, так как этот идентификатор транзакции автоматически генерируется Magento, если вы удалите вызов processInvoice()
, и ваше исходное значение, которое вы установили, также сохраняется для старых транзакций.
Заключение
Конечно, я могу ошибаться в данном случае, поскольку он не был протестирован таким образом, было бы здорово настроить его и протестировать, прежде чем полагаться на мой ответ. По крайней мере, ни один из моих платежных расширений не использовал этот метод processInvoice()
, и возврат средств был правильно обработан Magento с помощью моих кредитных карт.
ОБНОВЛЕНИЕ
Что касается информации о транзакции для вашего способа оплаты, вам необходимо сделать $this->getInfoInstance()->setTransactionId('your_txn_id')
вызов вашего authorize()
или, если это прямой платеж без авторизации, capture()
транзакция метода явно, чтобы позволить Magento создать запись транзакции для вас. Для старых записей следуйте моему ответу на SO.