Select Git revision
OrderUpdateWebhook.php
OrderUpdateWebhook.php 2.07 KiB
<?php
namespace BobGroup\BobGo\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\HTTP\Client\Curl;
use Magento\Store\Model\StoreManagerInterface;
use BobGroup\BobGo\Model\Carrier\UData;
use Psr\Log\LoggerInterface;
class OrderUpdateWebhook implements ObserverInterface
{
protected Curl $curl;
protected LoggerInterface $logger;
protected StoreManagerInterface $storeManager;
public function __construct(LoggerInterface $logger, Curl $curl, StoreManagerInterface $storeManager)
{
$this->logger = $logger;
$this->curl = $curl;
$this->storeManager = $storeManager;
}
public function execute(Observer $observer)
{
$order = $observer->getEvent()->getOrder();
if (!$order) {
return;
}
$this->sendWebhook($order, 'order_updated');
}
private function sendWebhook($order, $eventType)
{
$url = $this->getWebhookUrl();
// Get Store UUID and add to query parameters
$storeUuid = $this->getStoreUuid();
$url .= '?channel=' . urlencode($storeUuid);
$data = [
'event' => $eventType,
'order_id' => $order->getId(),
'order_data' => $order->getData()
];
$this->makeHttpPostRequest($url, $data);
}
private function makeHttpPostRequest($url, $data)
{
$payloadJson = json_encode($data);
if ($payloadJson === false) {
throw new \RuntimeException('Failed to encode payload to JSON.');
}
$this->curl->addHeader('Content-Type', 'application/json');
$this->curl->post($url, $payloadJson);
$statusCode = $this->curl->getStatus();
$responseBody = $this->curl->getBody();
$response = json_decode($responseBody, true);
}
private function getWebhookUrl(): string
{
return UData::WEBHOOK_URL;
}