Установити статус замовлення для повного платежу на веб-сайті 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. :-)
Маттіас Зейс

0

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

PayPal не встановлює статус замовлення. Він просто фіксує платіж. Magento встановлює стан замовлення на Processing (див. Mage_Sales_Model_Order_Payment::registerCaptureNotification()) І встановлює статус за замовчуванням у межах цього стану.

Все, що мені потрібно було зробити, це змінити стан за замовчуванням у стані Processing на стан, який мені потрібен через інтерфейс адміністратора ( Система » Статуси замовлення ).

Сподіваюся, це комусь допоможе!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.