Автор Тема: Модуль оплаты с колбеком  (Прочитано 377 раз)

09 Ноябрь 2019, 22:39:40
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый вечер. Хочу узнать как правильно принимать оплату и создавать заказ (order).
На данный момент я использую external payment option (через post форму). После оплаты на сайте платежной системы клиент возращается на главную страницу.
ValidateOrder() вызывается в контроллере колбека. Проблема заключается в том платежная система вызывает колбек с задержкой около минуты и в течении этого времени клиент видит свою корзину.
Правильно ли будет вызвать ValidateOrder() во время перенаправления клиента на главную страницу без проверки ответа от платежной системы ? И как при этой схеме можно будет обеспечить проверку оплаты?
Думаю можно временно указывать любой статус заказа и в колбеке менять на корректный, но не знаю как получить заказ в коде колбека. Платежная система возращает только id корзины и суммы оплаты.
10 Ноябрь 2019, 12:24:15
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
А ошибку оплаты она не возвращает?
Если оплата не прошла, что возвоащает?
10 Ноябрь 2019, 12:53:27
Ответ #2
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А ошибку оплаты она не возвращает?
Если оплата не прошла, что возвоащает?
Ошибку можно получать на другой колбек.
Правильно ли будет сразу создать заказ через validateOrder() и на потом в колбеках менять статус заказа? И как можно изменить статус заказа имея только cart_id?
10 Ноябрь 2019, 13:36:01
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Правильно, создаете заказ методом
public function validateOrder(
        $id_cart,
        $id_order_state,
        $amount_paid,
        $payment_method = 'Unknown',
        $message = null,
        $extra_vars = array(),
        $currency_special = null,
        $dont_touch_amount = false,
        $secure_key = false,
        Shop $shop = null
    )
Статус может быть "В ожидании оплаты".
После подтверждения оплыты меняете статус на "Оплаченный".
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
10 Ноябрь 2019, 13:58:36
Ответ #4
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Правильно, создаете заказ методом
public function validateOrder(
        $id_cart,
        $id_order_state,
        $amount_paid,
        $payment_method = 'Unknown',
        $message = null,
        $extra_vars = array(),
        $currency_special = null,
        $dont_touch_amount = false,
        $secure_key = false,
        Shop $shop = null
    )
Статус может быть "В ожидании оплаты".
После подтверждения оплыты меняете статус на "Оплаченный".
ValidateOrder() можно использовать повторно с тем же $id_cart? Если нет, то как корректно изменить статус заказа? Я исходник метода смотрел, но не понял что именно происходит, слишком сложная логика в нем.
10 Ноябрь 2019, 14:08:03
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Для смены статуса ValidateOrder не используют, для этого class OrderHistory метод
/**
     * Sets the new state of the given order.
     *
     * @param int $new_order_state
     * @param int/object $id_order
     * @param bool $use_existing_payment
     */
public function changeIdOrderState($new_order_state, $id_order, $use_existing_payment = false)
{
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!