Да, мне очень нравится WooCommerce для решения некоторого круга задач. Конечно, полноценный интернет-магазин не как часть контентного сайта, а как самодостаточный сайт делать на WooCommerce считаю не совсем правильным делом. Лучше использовать специализированные CMS. Но когда задача стоит наделить Ваш сайт на WordPress дополнительными возможностями в виде возможности продаж товаров, услуг или информации, то WooCommecrу отличное решение, несмотря на его громоздкость. Которая, кстати, полностью компенсируется скоростью развертывания магазина.
Была задача, чтобы каждый раз, когда совершалось какое-либо действие с заказом, срабатывал скрипт обработчик. Возможно, есть какой-то хук. Но мне его найти не удалось. И я нашел решение ни чуть не хуже — API WooCommerce.
Работает просто и удобно. При действии с товаром, заказом и т.д. (там много вариантов), движок «пуляет» через метод POST json-строкой по указанному адресу. Вам остается только поймать вошедший поток и проанализировать его. Далее можно спокойной работать с полученными данными. Все просто и удобно.
UPD 2017-01-03
Итак, поступил вопрос о том какие действия можно отслеживать и в чем тут польза. Отвечаю.
Во-первых нужно помнить, что речь идет именно о WooCommerce, поэтому действия можно отслеживать по тем процессам, которые происходят внутри этого плагина, а именно:
- Действия с купонами.
- Действия с товарами.
- Действия с заказами.
Со скриншота удален «Секрет» и заменен «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-запросом.
Добрый день!
А Вы не могли бы на примере (в действии) описать работу этого зацепа??? А то не совсем понятно, какие действия и как можно отслеживать и в чем тут польза? Хотя чувствую что ЕСТЬ!!!
Спасибо!!!
Добрый день!
Пример: генерация электронных ключей доступа по факту поступления оплаты. Подробнее см. «UPD 2017-01-03» в статье.
как я понял… я могу выводить статус оплаты в другую базу 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
? незнаю понятно ли
Спасибо, буду пробовать. Надеюсь поможет, сенкс =)
Спасибо огромное!
До этого читал про 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);
}