Skip to content
Snippets Groups Projects
Select Git revision
  • dd64a2deed069c49760268cafb9150cac8bb00a1
  • dev default protected
  • prod protected
  • 1.0.58
  • 1.0.57
  • 1.0.52
  • 1.0.56
  • 1.0.51
  • 1.0.50
  • 1.0.33
  • 1.0.32
  • 1.0.31
  • 1.0.30
  • 1.0.29
  • 1.0.28
  • 1.0.27
  • 1.0.26
  • 1.0.25
  • 1.0.24
  • 1.0.23
  • 1.0.22
  • 1.0.21
  • 1.0.20
23 results

OrderUpdateWebhook.php

Blame
  • 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;
        }