Повторяющиеся профили и способы оплаты
Я создаю реализацию повторяющихся профилей для способа оплаты. Я создал необходимые функции на основе класса 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
, но тогда как в этом случае это будет работать, если платеж не удастся?
2 answers
Успешный платеж не создает заказ из предложения. Подтверждение клиента создает заказ. Оплата не связана с этим процессом. Подумайте о треске, отгрузке после получения оплаты, выставленных счетах-фактурах заказов в системе b2b. Все это примеры заказов, создаваемых до получения платежа.
Клиент создал этот повторяющийся профиль, и, таким образом, уже было выражено намерение получить товар и произвести оплату. Это действительный приказ. Оно должен быть создан со статусом "ожидает оплаты", если ваш метод не может подтвердить платеж немедленно и соответствующим образом обработан бэк-офисом.
Итак, в настоящее время эта работа продолжается, но то, к чему я стремлюсь с помощью повторяющихся профилей, - это следующий поток.
- Пользователь завершает проверку продукта с повторяющимся профилем - при необходимости создается пользователь, а также профиль. Он свяжет псевдоним платежа с профилем, чтобы мы могли оплатить позже.
- 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
. Это включает в себя всю информацию о продукте, а затем создает заказ.