Вебзацепы Woocommerce или как добавить функционала Вашему интернет-магазину на базе WordPress

Да, мне очень нравится WooCommerce для решения некоторого круга задач. Конечно, полноценный интернет-магазин не как часть контентного сайта, а как самодостаточный сайт делать на WooCommerce считаю не совсем правильным делом. Лучше использовать специализированные CMS. Но когда задача стоит наделить Ваш сайт на WordPress дополнительными возможностями в виде возможности продаж товаров, услуг или информации, то WooCommecrу отличное решение, несмотря на его громоздкость. Которая, кстати, полностью компенсируется скоростью развертывания магазина.

Была задача, чтобы каждый раз, когда совершалось какое-либо действие с заказом, срабатывал скрипт обработчик. Возможно, есть какой-то хук. Но мне его найти не удалось. И я нашел решение ни чуть не хуже — API WooCommerce.

Работает просто и удобно. При действии с товаром, заказом и т.д. (там много вариантов), движок «пуляет» через метод POST json-строкой по указанному адресу. Вам остается только поймать вошедший поток и проанализировать его. Далее можно спокойной работать с полученными данными. Все просто и удобно.

UPD 2017-01-03

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

Во-первых нужно помнить, что речь идет именно о WooCommerce, поэтому действия можно отслеживать по тем процессам, которые происходят внутри этого плагина, а именно:

  1. Действия с купонами.
  2. Действия с товарами.
  3. Действия с заказами.

2017-01-03_14-54-57

Со скриншота удален «Секрет» и заменен «URL доставки», но суть сохранена. Данный вебзацеп служит для выписки электронных ключей по факту поступления оплаты. Т.е. когда заказ обновляется (происходит любое действия, например, смена статуса с «ожидание оплаты» на «выполнен») на адрес URL доставки приходит POST-запрос. Скрипт, на который приходит этот запрос должен начинаться примерно так:

if($_SERVER[‘REQUEST_METHOD’] == ‘POST’) {
$data = file_get_contents(«php://input»);
$json = json_decode($data, true);
if($json[‘order’][‘status’] == ‘completed’){

Проверяем наличие чего либо в POST и декодируем JSON. Нас интересует факт поступления оплаты, поэтому проверяем статус на «выполнен». Далее идет код по генерации электронного ключа и отправки его в личный кабинет пользователю. Таким образом срабатывает событие в WooCommerce и на это событие повешен обработчик, получающий все данные через JSON.

Преимуществом является то, что такие запросы WooCommerce может отправлять на совершенно другой сайт, который, скажем, не имеет доступа в Вашей БД и не может проверять статус заказа SQL-запросом.

 

10 комментариев к “Вебзацепы Woocommerce или как добавить функционала Вашему интернет-магазину на базе WordPress”

  1. Добрый день!

    А Вы не могли бы на примере (в действии) описать работу этого зацепа??? А то не совсем понятно, какие действия и как можно отслеживать и в чем тут польза? Хотя чувствую что ЕСТЬ!!!

    Спасибо!!!

    Ответить
    • Добрый день!
      Пример: генерация электронных ключей доступа по факту поступления оплаты. Подробнее см. «UPD 2017-01-03» в статье.

      Ответить
  2. как я понял… я могу выводить статус оплаты в другую базу sql а могу ли я послать все данные типо количество товара который заказали и его ID ? очень полезная штука. можно интегрировать свои программы с сайтом на wooc

    Ответить
    • Эта штука «пуляет» через метод POST json-строкой по указанному адресу. В строке содержится вся информация по данному конкретному заказу. В том числе количество.

      Ответить
      • zapier делает такую же систему только он обновляет редко заказы по ходу.. да и платный.. если разбераетесь не подскажете как из wooмагазина слать данные в поля программы которая на другом sql сервере?

        Ответить
        • Нужно:
          1) В woocommerce создать вебзацеп с адресом скрипта на удаленном сервере.
          2) На удаленном сервере создать скрипт, который будет принимать через POST данные по заказу, обрабатывать и отправлять себе в базу.
          Это всё, что нужно!

          Еще можно написать небольшой плагин, который может будет брать данные из магазина, поднимать соединение с удаленной базой и отправлять данные туда.

          Ответить
          • а можно да так сделать чтобы при заказе зацеп брал данные допустим по новому заказу и при этом отправлял данные в другую таблицу . я прост не очень лажу с Sql, допустим так в woocommerce —
            product_name «Товар 1»
            order_name «Вася»

            а sql на стороне принимал так из
            product_name> в name_product
            Order_name> в orde_r
            ? незнаю понятно ли

  3. Спасибо огромное!
    До этого читал про WebHook и никак не мог разобраться. Ваш пост очень сильно помог.
    Что касается лога я использовал следующий вариант
    if($_SERVER[‘REQUEST_METHOD’] == ‘POST’) {
    $data = file_get_contents(‘php://input’);
    $json = json_decode($data, true);
    $filename = ‘somefile.txt’;
    ob_flush();
    ob_start();
    var_dump($json);
    //записываем текст в файл
    //file_put_contents($filename, $json, FILE_APPEND);
    file_put_contents($filename, ob_get_flush(), FILE_APPEND);
    }

    Ответить

Оставьте комментарий