SourceDistillery.com - код двойной очистки от багов

Интеграция с Яндекс DBS и FBS
для OpenCart

Модули для OpenCart

Для Joomla + Virtuemart

Яндекс запустил партнерский API для моделей продаж DBS и FBS. Существует множество сервисов, которые приводят покупателей на сайт, отслеживают покупки покупателей, взимают комиссию. Однако, у Яндекс.Маркета все иначе. Товары участников "Покупки на маркете" можно будет заказать прямо на сайте Яндекс.Маркета. Яндекс всех загоняет в свой маркетплейс.

На сайте Яндекс.Маркета появилась корзина покупок и форма оформления заказа. Покупателю не обязательно переходить на сайт Интернет-магазина, а значит Интернет-магазину уже не обязательно иметь супердизайн. Достаточно экспортировать товары на Яндекс.Маркет, обеспечить интеграцию с "Покупкой на Маркете". Кроме того, возможность заказа на Яндекс.Маркете - это показатель доверия к магазину.

Раз Яндекс запустил сервис, значит надо делать модуль для интеграции Интернет-магазина с этим сервисом. Рады представить Вам модуль для Интернет-магазина на платформе OpenCart: Yandex CPA "Покупка на маркете".

Купить

Технические требования

Основные требования к Интернет-магазину выдвинуты Яндексом. Укажу то, что необходимо для работы модуля.

Установка и настройка модуля

Прежде чем устанавливать модуль, убедитесь, что ваш сайт работает по https-протоколу. Если этого нет, обратитесь к вашему хостеру. Хостер может потребовать от вас файлы SSL-сертификатов. Бесплатно можно сгенерировать самоподписанные сертификаты. Подробнее читайте здесь.

Сам процесс установки модуля требует некоторых навыков работы с файлами сайта (FTP-клиент).

  1. Распакуйте архив, содержимое папки uplod через FTP-клиент скопируйте поверх файлов вашего сайта.
  2. Зайдите на страницу и зарегистрируйте oAuth-приложение с правами Яндекс.Маркет - API Яндекс.Маркета для партнеров, Callback URL = https://адрес_вашего_сайта/yaorder/token.php. Зарегистрировав приложение, вы получите его ID и пароль.
  3. Откройте в текстовом редакторе файл yaorder/config.php, что вы только что закачали на ваш сайт и укажите там ID и пароль приложения.
  4. Зайдите в систему администрирования, на странице "Установка дополнений" загрузите OCMOD-файл из архива модуля (например yabuy_1.2-oc2.3.x.ocmod.xml для OpenCart 2.3).
  5. Перейдите в раздел "Дополнения - Модули", должен появиться модуль Яндекс CPA «Заказ на Маркете», нажмите кнопку "+" - "Установить".
  6. В корне сайт откройте файл .htaccess, сразу после директивы RewriteBase добавьте строки-правила:
    RewriteRule ^yandexbuy/([^?]*)$ index.php?route=yandexbuy/$1 [L,QSA]
    RewriteRule ^yandexbuy2/([^?]*)$ index.php?route=yandexbuy2/$1 [L,QSA]
    Если у вас нет файла .htaccess, то добавьте в корень сайта файл со следующим содержимым:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^yandexbuy2/([^?]*)$ index.php?route=yandexbuy2/$1 [L,QSA]
    RewriteRule ^yandexbuy/([^?]*)$ index.php?route=yandexbuy/$1 [L,QSA] Обратите внимание, что строка-правило следует сразу за RewriteBase, перед ней нет других правил. Если вы все правильно настроили, то у вас должен открываться URL: https://shop-site.ru/yandexbuy/cart с содержимым: 'Wrong or empty Yandex Authorization token'. Обратите внимание, что строка-правило должна быть первой среди подобных директив - сразу после 'RewriteBase /'.

  7. Если у вас вебсервер Nginx, то эта директива не работает. Вам надо обратиться к хостёру, чтобы он помог настроить преобразование URL в Nginx. Вот така директива может сработать:
    server {     location / {
        try_files $uri @opencart; 
        } 
        location @opencart {
        rewrite ^/yandexbuy2/([^?]*)$ /index.php?route=yandexbuy2/$1 last;
        }
    }
    
    Если вы настроили все правильно, то при заходе на страницу https://shop-site.ru/yandexbuy2/cart вы должны увидеть "Wrong or empty Yandex Authorization token" и НЕ должно быть редиректа на страницу https://shop-site.ru/index.php?route=yandexbuy2/cart. Если редирект проиходит, значит не полностью сработал OCMOD, который должен внести изменения в файл seo_pro.php. В этом случае, внесите изменения вручную: после строки
    function validate() {
    
    нужно добавить:
    if (isset($this->request->get['route']) && substr($this->request->get['route'], 0, 9) == 'yandexbuy') {
        return;
    }
    
  8. Откройте партнерский интерфейс магазином на сайте Яндекс.Маркета. Перейдите в пункт меню 'Настройки' - 'Настройки API заказа':

    Сформируйте авторизационный токен (2); укажите URL API - https://shop-site.ru/yandexbuy для FBS или https://shop-site.ru/yandexbuy2 для DBS (3); тип авторизации - URL (5), формат данных - JSON (6). SHA1 fingerprint - это слепок (хэш) вашего SSL-сертификата. Чтобы его узнать - зайдите на свой сайт через https, кликните правой кнопкой мыши, в контекстном меню выбирите "Информация о странице", в появившемся окошке перейдите во вкладку "Безопасность" и нажмите кнопку "Посмотреть сертификат". В новом окошке вы сможете увидеть свой SHA1 Fingerprint.

  9. Перейдите в систему администрирования Интернет-магазина. Меню 'Дополнения' - 'Модули' - 'Yandex CPA "Покупка на Маркете"':

    ID магазина в Яндекс.Маркете (1) - это цифровой код вашего магазина он же номер кампании в Яндекс.Маркете (обратите внимание, что "11-" не входят в ID магазина) ; Яндекс-логин администратора магазина - это ваш логин на Яндексе; авторизационный токен - это тот токен, котороый вы сформировали в настройках API покупки (2). Получите и сохрание токен oAuth - он потребуется для уведомления Маркета об изменении заказов.
    Непростой момент - стоимость и срок доставки, которую будет выдавать модуль покупателю. Яндекс различает 3 типа доставки: Курьерская, Почтовая, Самовывоз. Самовывоз задается точками продаж в партнерском Интерфейсе Маркета. Их же необходимо указать в настройках модуля. Идентификаторы пунктов самовывоза можно узнать в настройках Яндекс.Маркета: перейдите в пункт меню 'Настройки' - 'Точки продаж'.
    Чтобы указать стоимость доставки для конкретного региона, нужно в поле "Яндекс-код региона" указывать коды согласно классификации Яндекса.
    Я узнаю коды следующим образом: в партнерском интерфейсе на странице работы с тестовыми заказами указываю нужный город, актуализирую корзину. В логе запросов к API появляется запрос /cart с примерно следующим содержимым:
    { "cart": 
        { "currency": "RUR",
          "items": [ { "feedId": 1006651, "offerId": "533", "feedCategoryId": "9", "offerName": "Кофеварка рожковая Redmond RCM-1512", "subsidy": 0, "count": 1, "params": "Цвет товара: черный/серебристый", "fulfilmentShopId": 1086235, "sku": "100439579907" } ],
          "delivery": { "region": 
              { "id": 213, "name": "Москва", "type": "CITY", "parent": 
                  { "id": 1, "name": "Москва и Московская область", "type": "SUBJECT_FEDERATION", "parent": 
                      { "id": 3, "name": "Центральный федеральный округ", "type": "COUNTRY_DISTRICT", "parent": 
                          { "id": 225, "name": "Россия", "type": "COUNTRY" } } } },
              "address": { "country": "Россия", "postcode": "117519", "city": "Москва", "street": "Варшавское шоссе", "house": "1к1", "floor": "6", "lon": 37.994592, "lat": 55.775419 } 
          } 
        }
    }
    
    Т.е. приходит цепочка регионов с их id: 213 - Москва, 1 - Москва и область, 3 - ЦФО, 255 - Россия.
  10. Теперь можно делать тестовые запросы от Яндекс.Маркета Интернет-магазину. В настройках Яндекс.Маркета перейдите в пункт меню 'Настройки' - 'Отладка API покупки'.

    Товары и цены берутся из вашего YML-экспорта товаров в Яндекс.Маркет. Стоимость и способы доставки рассчитывается в зависимости от того, что вы указали в настройках модуля, с учетом адреса. Способы оплаты вы указали в настройках модуля. Не забудьте выбрать хотя бы один способ оплаты для каждого способа доставки. После нажатия на кнопку "Оформить заказ", Яндекс.Маркет отправляет магазину запрос /order/accept, и заказ создается в OpenCart. Но заказ пока невидим, он незавершен. Через некоторое время Яндекс отправляет запрос /order/status, и заказ появляется в OpenCart.

    Если в процессы работы возникают ошибки - смотрите "Лог API", по нему можно понять, что не так.
  11. Если вы правильно установили vQmod, входящий в состав модуля, то на странице заказа, пришедшего с Маркета во вкладке "История" будет дополнительная форма для уведомления Яндекс.Маркета об изменении заказа.

    С ее помощью можно поменять статус заказа на Яндекс.Маркете. Это необходимо делать, ведь если Яндекс не видит, что вы работаете с заказами, он понижает рейтинг вашего магазина. При помощи этой же формы вам нужно будет поменять статус заказов в рамках контрольного заказа Яндекс.Маркета.

Как работать с настоящими заказами?

После того как взаимодействие Яндекс.Маркета и Интернет-магазина отлажено, можно проходить контрольный заказ. Яндекс создаст несколько тестовых заказов, у нескольких из них вам надо будет поменять статус. В ответ на этап самопроверки "Отмена заказа по инициативе покупателя" никаких действий производить не требуется.
Весьма странный этап самопроверки "Отмена из-за отсутствия товаров на складе". Маркет делает тестовый заказ на 99999 товаров, модуль как и положено отвечает: 99999 нет, есть столько, сколько есть. И эта его правильная работа модуля, по документации. Но именно самопроверка считает такой ответ ошибкой. Для прохождения самопроверки, одного этого шага, временно переименуйте файл /catalog/controller/yandexbuy/cart.php или /catalog/controller/yandexbuy2/cart.php (если DBS) например в cart.php_ и пройдите этот шаг самопроверки. Как пройдете, верните файлу его прежнее имя.
Когда проверка пройдена, Яндекс подключает ваш магазин уже в "боевом" режиме.

Купить