Установить статус пользовательского заказа для полной оплаты через веб-сайт PayPal Стандартный платеж?

9

Мы используем Magento EE 1.13.0.2 со стандартным способом оплаты через веб-сайт PayPal . К сожалению, невозможно установить статус заказа для оплаченных заказов PayPal в серверной части.

Нам нужно установить индивидуальный статус заказа, когда заказ был оплачен успешно (а не частично). Учебники по изменению статуса заказа PayPal кажутся устаревшими, неправильными или безобразными.

Из того, что я собрал:

  • обновления платежей будут обрабатываться PayPal IPN.
  • Существует метод, Mage_Paypal_Model_Ipn::_registerPaymentCapture()отвечающий за «Обработать завершенный платеж (полный или частичный)».
  • В Mage_Paypal_Model_Ipn::_registerTransaction()запросе от PayPal анализируется и сравнивается статус платежа Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED.

Если честно, я не уверен, что делать с этой информацией. Я могу переписать Mage_Paypal_Model_Ipn::_registerTransaction()и просто добавить свой код:

// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
    $this->_registerPaymentCapture(true);
    // my code here
    break;

Конечно, наблюдатель события (например, для одного из событий заказа или состояния заказа) был бы намного приятнее, но я не уверен, существует ли 100% надежный способ отловить одноразовое событие, когда заказ полностью оплачен через PayPal. ,

Любые идеи?

Обновить

Мы решили изменить поток статуса нашего заказа, и нам больше не нужно изменять статус. Я оставлю вопрос открытым на некоторое время, если кто-то захочет ответить на него.

Матиас Цейс
источник

Ответы:

2

Большая проблема в том, что во всем рабочем процессе PayPal нет ни одного события.

Итак, есть два варианта:

Перепишите любую из этих моделей Paypal

Как вы сказали, просто перепишите модель, измените поведение, и все будет работать как положено - надеюсь или ...

Крюк в sales_order_save_before

Затем вы проверяете тип оплаты, который должен быть \Mage_Paypal_Model_Standard::$_codeс:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

И затем, когда статус меняется на тот, который вам не нужен, измените его на тот, который вы хотите.

Фабиан Блехшмидт
источник
Спасибо Фабиан, я думаю, мы не получим лучшего решения в Magento 1.x. :-)
Matthias Zeis
0

Я закончил с другим решением. Поработав с этой проблемой в течение нескольких часов, я понял, что в моем конкретном случае не имело значения, имеют ли только заказы PayPal определенный статус (это для соединения ERP, которое ищет заказы в определенном статусе).

PayPal не устанавливает статус заказа. Он просто фиксирует платеж. Magento устанавливает состояние заказа на Обработка (см. Mage_Sales_Model_Order_Payment::registerCaptureNotification()) И устанавливает статус на статус по умолчанию в этом состоянии.

Все, что мне нужно было сделать, это изменить статус по умолчанию в состоянии « Обработка» на необходимый мне статус через интерфейс администратора (« Система » Статусы заказов ).

Надеюсь, это поможет кому-то!

Марк ван дер Санден
источник