Повторяющиеся профили и способы оплаты


Я создаю реализацию повторяющихся профилей для способа оплаты. Я создал необходимые функции на основе класса Mage_Payment_Model_Recurring_Profile_MethodInterface. Моя главная борьба заключается в том, как физически создать новый порядок.

Во-первых, я попытался создать заказ из платежной информации, поскольку она содержит order_info, order_item_info, billing_address_info и shipping_address_info. У этого была проблема, когда платеж не удался, что он не работал обычным способом оформления заказа с точки зрения использование sales/service_quote и возможность отката.

Мой вопрос на самом деле таков. Как я должен работать с повторяющимся профилем, чтобы создать заказ "правильно", чтобы работали случаи ошибок?

Глядя на пример системы, кажется, что она просто создает заказ из профиля, используя Mage_Sales_Model_Recurring_Profile::createOrder, но тогда как в этом случае это будет работать, если платеж не удастся?

Author: David Manners, 2015-01-06

2 answers

Успешный платеж не создает заказ из предложения. Подтверждение клиента создает заказ. Оплата не связана с этим процессом. Подумайте о треске, отгрузке после получения оплаты, выставленных счетах-фактурах заказов в системе b2b. Все это примеры заказов, создаваемых до получения платежа.

Клиент создал этот повторяющийся профиль, и, таким образом, уже было выражено намерение получить товар и произвести оплату. Это действительный приказ. Оно должен быть создан со статусом "ожидает оплаты", если ваш метод не может подтвердить платеж немедленно и соответствующим образом обработан бэк-офисом.

 1
Author: Melvyn, 2015-01-06 18:11:54

Итак, в настоящее время эта работа продолжается, но то, к чему я стремлюсь с помощью повторяющихся профилей, - это следующий поток.

  1. Пользователь завершает проверку продукта с повторяющимся профилем - при необходимости создается пользователь, а также профиль. Он свяжет псевдоним платежа с профилем, чтобы мы могли оплатить позже.
  2. Cron получает все профили, которые необходимо создать, а затем создает все заказы.

Как это делается технически, так следует.

Нам нужен класс для типа оплаты с implements Mage_Payment_Model_Recurring_Profile_MethodInterface.

Процесс оформления заказа вызовет функцию submitRecurringProfile. Здесь мы сохраняем клиента и профиль с необходимой информацией.

public function submitRecurringProfile(
    Mage_Payment_Model_Recurring_Profile $profile,
    Mage_Payment_Model_Info $paymentInfo
)
{
    /** @var Mage_Sales_Model_Quote $oQuote */
    $quote = $paymentInfo->getQuote();

    /** @var Mage_Customer_Model_Customer $oCustomer */
    $customer = $quote->getCustomer();
    $customer->save();

    $profile->setCustomerId($customer->getId());
    $profile->setReferenceId($quote->getId());
    $profile->setAdditionalInfo($paymentInfo->getAdditionalInformation());
    $profile->setState(Mage_Sales_Model_Recurring_Profile::STATE_ACTIVE);
    $profile->save();
    return $this;
}

Cron загрузит нужный ему профиль, а затем вызовет chargeRecurringProfile(Mage_Payment_Model_Recurring_Profile $recurringProfile)

В этой функции мы затем создаем заказ на основе информации, хранящейся в профиле. Существует функция createOrder, которая находится в классе профиля Mage_Sales_Model_Recurring_Profile. Это включает в себя всю информацию о продукте, а затем создает заказ.

 0
Author: David Manners, 2015-01-07 09:30:27