<?php namespace BobGroup\BobGo\Observer; use BobGroup\BobGo\Model\Carrier\UData; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\HTTP\Client\Curl; use Magento\Store\Model\StoreManagerInterface; use Psr\Log\LoggerInterface; use BobGroup\BobGo\Model\Carrier\BobGo; abstract class OrderWebhookBase implements ObserverInterface { protected Curl $curl; protected LoggerInterface $logger; protected StoreManagerInterface $storeManager; protected ScopeConfigInterface $scopeConfig; protected $bobGo; public function __construct(LoggerInterface $logger, Curl $curl, StoreManagerInterface $storeManager, ScopeConfigInterface $scopeConfig, BobGo $bobGo) { $this->logger = $logger; $this->curl = $curl; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; $this->bobGo = $bobGo; } protected function sendWebhook($order) { // Return early if not enabled if (!$this->bobGo->isWebhookEnabled()) { return; } // Webhook URL $url = $this->getWebhookUrl(); $storeId = $this->getStoreId(); $orderId = $order->getId(); // Prepare payload $data = [ 'event' => 'order_updated', 'order_id' => $orderId, 'channel_identifier' => $this->bobGo->getBaseUrl(), 'store_id' => $storeId, 'webhooks_enabled' => true, // If we get to this point webhooks are enabled ]; // Generate the signature using the webhook key saved in config $webhookKey = $this->scopeConfig->getValue('carriers/bobgo/webhook_key', \Magento\Store\Model\ScopeInterface::SCOPE_STORE); // Send the webhook $this->bobGo->encodeWebhookAndPostRequest($url, $data, $storeId, $webhookKey); } private function getWebhookUrl(): string { return UData::WEBHOOK_URL; } private function getStoreId(): string { $storeId = $this->storeManager->getStore()->getId(); return $storeId; } }