Ошибка при использовании в качестве способа оплаты - интернет эквайринг Тинькофф Принято

1

Здравствуйте.
Сначала пробовал вот с этим модулем
https://www.webasyst.ru/store/plugin/payment/tinko...

Затем Тинькофф выпустил свой модуль
https://oplata.tinkoff.ru/documentation/?section=c... (в списке можно найти Webasyst)

Без разницы, всё время одна и та-же ошибка.
При проведении тестового кейса №2 (оплата не проходит, так как недостаточно средств на карте) происходит следующее.
Если используем штатную страницу банка для неуспешного платежа, то после попытки оплаты получаем стандартную информацию

При этом происходит следующее.
1. Покупатель получает письмо от банка, что платёж не прошел - ошибка (Ошибка при оплате заказа № ... без указания причины отказа)
2. Покупатель получает письмо от магазина, что заказ поставлен в обработку.
3. Менеджер магазина получает письмо о новом заказе.
4. В магазине товар ставится в резерв и заказ встаёт в очередь.

В итоге - как видно из цепочки, покупатель товар не оплатил, но магазин ничего про это не знает.
Сначала думал, что банк что-то не отдаёт.
Захожу в логи:

2017-02-06 ХХ:ХХ:ХХ ХХ.ХХ.ХХ.ХХ
#ХХХХХХХХХХХХХХХ
data:
array (
  'method' => 'waPayment::callbackInit',
  'app_id' => 'shop',
  'merchant_id' => 'Х',
)


2017-02-06 ХХ:ХХ:ХХ ХХ.ХХ.ХХ.ХХ
#ХХХХХХХХХХХХХХХ
data:
array (
  'method' => 'waPayment::execAppCallback',
  'app_id' => 'shop',
  'callback_method' => 'decline',
  'transaction_data' => 
  array (
    'plugin' => 'tinkoff',
    'merchant_id' => 'номер магазина в системе',
    'date_time' => '2017-02-06 ХХ:ХХ:ХХ',
    'update_datetime' => '2017-02-06 ХХ:ХХ:ХХ',
    'result' => 0,
    'native_id' => 'номер транзакции',
    'state' => 'DECLINED',
    'parent_id' => NULL,
    'type' => 'AUTH_ONLY',
    'view_data' => 'Card: 500000******0009',
    'amount' => цена,
    'currency_id' => 'RUB',
    'order_id' => 'номер заказа',
    'error' => 'Недостаточно средств на карте.',
    'recurrent_id' => '',
    'app_id' => 'shop',
    'id' => ХХ,
  ),
  'result' => 
  array (
    'customer_id' => '1',
  ),
)

В логах модуля есть вся информация.
Но в магазин она не передаётся.

Меняю страницу неуспешного платежа с банковской на свою.
Получаю просто ошибку при оплате, которая живёт по адресу https://mysite/checkout/error/?order_id=номер заказа

Теперь даже покупатель не знает, почему не прошёл платёж.
И снова пошли письма.
1. Покупатель получает письмо от банка, что платёж не прошел - ошибка (Ошибка при оплате заказа № ... без указания причины отказа)
2. Покупатель получает письмо от магазина, что заказ поставлен в обработку.
3. Менеджер магазина получает письмо о новом заказе.
4. В магазине товар ставится в резерв и заказ встаёт в очередь.

Кто нибудь сталкивался с таким?
Что это вообще может быть?
Сайт закрыт Локсайтом - открывал.
Пробовал подключать - отключать разные платёжные модули - не решает проблемы.
Не понятно, с чем именно связана эта проблема.












13 комментариев

  • +1
    Михаил Ушенин Михаил Ушенин Webasyst 7 февраля 2017 10:05 #

    Что именно из описанного вы считаете ошибкой? Поясните, пожалуйста.

    • +1
      Юрий Юрий 7 февраля 2017 10:38 #

      Ошибка в том, что плагин получает информацию об отказе но не передаёт её магазину.
      В итоге, клиент получает письмо с информацией о заказе, который он не оплатил (но магазину это не известно и он отправляет информационное письмо), со ссылкой на заказ и пин-кодом доступа.
      А в магазине заказ имеет статус к исполнению.

      В случае отказа в оплате, заказ не должен попадать в админку в статусе к исполнению, под него не должен резервироваться товар, клиент не должен получать письмо с информацией о заказе, ссылке на заказ и пин-коде.

      Заказа то ведь нет.
      А сейчас получается, что заказ есть.

      И на странице ошибки оплаты нужно выводить информацию из лога плагина.

      'error' => 'Недостаточно средств на карте.',


      Вот что мы видим в админке, в заказе:

      3 февраля 2017 13:41
       Уведомление Заказ удален (Покупатель) отправлено покупателю.
      
      3 февраля 2017 13:41
       ИмяПокупатель Заказ удален
      3 февраля 2017 13:37
       Банк Тинькофф Ответ платежной системы (callback)
      DECLINED (Card: 500000******0009 - цена RUB)
      
      3 февраля 2017 13:36
       Уведомление Заказ оформлен (Администратор магазина) отправлено администратору магазина.
      
      3 февраля 2017 13:36
       Уведомление Заказ оформлен (Покупатель) отправлено покупателю.
      
      3 февраля 2017 13:36
       ИмяПокупатель Заказ оформлен

      До получения ответа от банка, судя по времени, магазин уже отправил уведомления о заказе - покупателю и администратору.

      И ответ банка DECLINED никак не влияет на статус заказа в админке.

      По идее, сначала ответ от банка - потом отправка писем.
      DECLINED - неудачный заказ (письмо только администратору, в админке заказ сразу появляется в статусе отклонён)
      AUTH - уведомление покупателя и администратора о заказе, в админке заказ к исполнению.

      • +1

        У вас немного неверное представление о процессе

        1. клиент создает заказ, заказу присваивается статус "Новый", (в соответствии с настройками вашего магазина) резервируется товар, клиенту отправляется уведомление
        2. клиент преходит на сайт банка для оплаты. оплата не удается.
        3. банк сообщает магазину, что оплата не удалась

        На самом деле у клиента есть возможность попробовать повторить оплату, например с другой карты. Для этого ему надо перейти на страницу просмотра заказа, ссылка на которую и PIN-код присылаются ему в письме, и нажать кнопку "оплатить". Это работает даже для нерегистрированных покупателей

        Вот так у вас появляется новый неоплаченный заказ.

        Если бы оплата удалась, банк передал магазину данные о том, что оплата успешна и заказу присвоился бы признак "Оплачен" и заказ сменил бы статус на "В обработке".

        Что можно сделать с этим:

        Можно резервировать товар не по факту оформления заказа, а по факту принятия в обработку. Правда, у Shop-Script есть (был?) на этот случай неприятный баг: при отмене "Нового" заказа, хотя товары в резерв не ставились, магазин все равно возвращает товар на склад. Возможно, уже исправили, давно не проверял.

        Можно сделать статус "Ожидание оплаты", переводить в него заказ и отсылать уведомление о том, что ждете оплаты и перейдя по ссылке можно оплатить. Если оплата в течение какого-то срока не поступила -- отменять заказ. Тогда новые заказы не будут вам мешаться в общем списке, а у клиента будет время повторить попытку оплаты. Все это проделывать нужно, увы, вручную, хотя сделать маленький плагин, который автоматизирует этот процесс, довольно просто.

        • +1
          Юрий Юрий 8 февраля 2017 11:01 #

          Давайте не будем про то, у кого неверное представление о процессе?

          Итак.
          У вас высокая проходимость, либо товары в ограниченном количестве.
          При неудачной оплате и резервировании товара, с последующим ожиданием - оплатит, не оплатит ...
          Вы теряете 100% следующего покупателя, который хотел купить данный товар и имел возможность оплатить.
          В данном случае, вы будете сидеть и заниматься ручной отменой таких заказов.
          Так как покупатель тоже не в курсе - почему оплата не удалась? И не знает, что нужно взять другую карту.
          Да и есть ли на ней деньги? Да и есть ли другая карта?

          +при отказе в оплате покупатель получает ошибку без объяснения причин.
          Одновременно с этим его корзина сбрасывается.
          А письмо приходит только через некоторое время. В письме не указано, что заказ не оплачен и его нужно оплатить.
          Буквально, по умолчанию, текст уведомления выглядит так:
          "Плательщик — Банк Тинькофф
          Имя покупателя"

          Слишком много неопределённости.

          Процесс строится именно так, как я описал.
          А вот всякие допники типа - резервирования с отсрочкой оплаты, ожидание повторной оплаты и т.д.
          Это уже на усмотрение продавца.
          Товар с высоким спросом+хорошая проходимость - резерв только после оплаты.
          Много товара и спрос на него низкий/средний+можно ждать - ваши схемы будут работать безболезненно.



          • +2

            Резерв после оплаты: "Настройки"→"Склады" пункт "обновление склада" выбрать "заказ подтвержден и принят в обработку"

            • +1
              Юрий Юрий 8 февраля 2017 12:04 #

              В данном случае возникнет следующая проблема.
              Ночные заказы. Либо заказы в то время, когда оператор не может руками подтвердить факт оплаты по пластику.
              Что может привести к нескольким заказам на одну единицу товара, с последующими извинениями перед покупателями.

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

              • +1

                при онлайн оплате заказы автоматически принимаются в обработку, поэтому оператору нет нужды подтверждать, чтобы товар попал в резерв, это произойдет автоматически.

                при оплате при получении оператор может принимать заказ в обработку после звонка с подтверждением. ни у кого не будет шансов заказать весь имеющийся в наличии товар и отказаться от него при подтверждении заказа ;)

                • +1
                  Юрий Юрий 8 февраля 2017 20:33 #

                  Я не спорю, это верное решение.
                  Но всегда есть исключение из правил.
                  Если спрос превышает предложение, лучше использовать автоматический резерв в момент заказа. Даже если это касается заказов с оплатой по факту доставки.
                  Всё что было нужно, это иметь подтверждение оплаты. Которое было скрыто в логах.

                • +2
                  Михаил Ушенин Михаил Ушенин Webasyst 8 февраля 2017 10:46 #
                  Ошибка в том, что плагин получает информацию об отказе но не передаёт её магазину.

                  В следующем обновлении плагина он будет добавлять информацию о причине отклонённого платежа в историю обработки заказа.

                  • +1
                    Юрий Юрий 8 февраля 2017 11:21 #

                    А информация о причине отказа банка будет выводиться на странице с ошибкой, если используется страница неуспешной оплаты магазина?
                    + хотелось бы чтобы письмо, отправляемое покупателю с данными о заказе, содержало информацию о том что оплата не прошла.


                    • +1
                      Михаил Ушенин Михаил Ушенин Webasyst 8 февраля 2017 15:05 #

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

                      • +1
                        Юрий Юрий 8 февраля 2017 15:36 #

                        Эм ...

                        В стартовом сообщении пример двух страниц - страница отказа банка и страница ошибки магазина.
                        На первой содержится информация о причине отказа. На второй написано только, что это ошибка (чья, почему, из-за чего ... - неизвестно).

                        Идём в любой крупный магазин, делаем заказ, пытаемся оплатить пустой картой

                        Магазин проинформирует нас о том, почему оплата не прошла.
                        Это стандартная процедура.

                        Или разработчики считают, что в одном из крупнейших Российских онлайн магазинов проблемы с безопасностью?
                        Так ведь можно дойти и до того, что карты вообще принимать не нужно.
                        А вдруг это предполагаемый злоумышленник вводит данные?

                        На странице платежа ведь можно проинформировать покупателя о причине отказа?
                        А в письме, в разделе Комментарий о заказе, добавить информацию - Заказ не оплачен.
                        Никакой информации злоумышленникам это не даст.
                        Зато обратит внимание покупателя на то, что нужно пройти по ссылке заказа и там попробовать оплатить снова (возможно другой картой)

                      • +1
                        Юрий Юрий 8 февраля 2017 20:12 #

                        Спасибо за добавление информации.

                        Сегодня 18:34
                         Банк Тинькофф Ответ платежной системы (callback)
                        DECLINED (Card: 500000******0009; Недостаточно средств на карте. - сумма RUB)

                        Ещё такой вариант есть.
                        При получении магазином ответа от ПС, он может отправлять информационное письмо администратору.
                        Можно в этом письме передавать информацию от ПС администратору.
                        Ожидалось письмо с ответом ПС - Оплачено или Отказ

                        Но приходит вот это

                        Здравствуйте, АдминистраторИмя!
                        
                        Статус вашего заказа #ХХХХХХХ был обновлен на Новый
                        
                        Спасибо за покупку в магазине «НАЗВАНИЕ»!

                        Причём обновлён он был с Новый, на Новый

                        Решение пришло от Банка Тинькофф
                        В настройках подключения Тип нотификации - HTTP+электронная почта
                        Указываем нужные адрес и получаем от банка подтверждение оплаты заказа сразу при блокировке денег на счёте покупателя.
                        Номер заказа
                        Номер транзакции
                        Сумма оплаты

                        Пока разработчики не выведут информацию о причине отказа на страницу Ошибки оплаты, лучше использовать страницу неуспешного платежа банка. Она даёт покупателю точную информацию о причине отказа и он понимает что не так.
















                        Добавить комментарий

                        Чтобы добавить комментарий, зарегистрируйтесь или войдите