src/Controller/HookController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\StoreRepository;
  4. use App\Service\ShopifyService;
  5. use App\Service\CalculateService;
  6. use Doctrine\ORM\NonUniqueResultException;
  7. use Exception;
  8. use Maknz\Slack\Client;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. /**
  16.  * Class HookController
  17.  * @Route("hook")
  18.  */
  19. class HookController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/calculate", name="hook_calculate")
  23.      */
  24.     public function calculate(Request $requestLoggerInterface $shopifyLoggerCalculateService $calculateServiceStoreRepository $storeRepository)
  25.     {
  26.         $shopifyDomain $request->headers->get('X-Shopify-Shop-Domain');
  27.         $sender $request->headers->get('X-Sender');
  28.         
  29.         $shopifyLogger->debug('Checkout-Shipping Calculate :: $ourVar', [
  30.             'domain' => $shopifyDomain,
  31.             'our_var' => $request->getContent()
  32.         ]);
  33.         $store $storeRepository->findOneByDomain($shopifyDomain);
  34.         $shipment_request json_decode($request->getContent());
  35.         if ( $sender ) {
  36.             $this->sendSlack('Sender: ' $sender);
  37.         }
  38.         if ( is_object($store) && is_object($shipment_request) ) {
  39.             $this->sendSlack('Domain: ' $shopifyDomain);
  40.             $this->sendSlack('İstek İçerik: ');
  41.             $this->sendSlack($request->getContent());
  42.             try {
  43.                 $shipment_rates $calculateService->calculateShipment($shipment_request$store);
  44.                 $this->sendSlack('İstek içerik: ');
  45.                 $this->sendSlack($request->getContent());
  46.                 $this->sendSlack('Fiyatlar: ');
  47.                 $this->sendSlack(json_encode($shipment_rates));
  48.                 return new JsonResponse($shipment_rates['rates']);
  49.             } catch (NonUniqueResultException $e) {
  50.                 $this->sendSlack('#E >= ' $request->getContent() );
  51.                 $this->sendSlack($e->getMessage());
  52.                 $this->sendSlack($shipment_request);
  53.             }
  54.         } else if ( ! is_object($store) ) {
  55.             $this->sendSlack('Domain Bulunamadı!');
  56.         } else {
  57.             $this->sendSlack('Domain: ' $shopifyDomain);
  58.             $this->sendSlack('İstek İçerik Hata: ');
  59.             $this->sendSlack($request->getContent());
  60.         }
  61.         $this->sendSlack('İstek içerik: ');
  62.         $this->sendSlack($request->getContent());
  63.         
  64.         return new JsonResponse([
  65.             'error' => 'Here I am!'
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/", methods={"GET"})
  70.      */
  71.     public function index(Request $requestStoreRepository $storeRepository)
  72.     {
  73.         $webHooks = ['empty'];
  74.         $shopifyDomain $request->headers->get('X-Shopify-Shop-Domain');
  75.         $store $storeRepository->findOneByDomain($shopifyDomain);
  76.         if ( $store ) {
  77.             $shopifyService = new ShopifyService($store);
  78.             try {
  79.                 $webHooks $shopifyService->getWebHooks();
  80.             } catch (ApiException|CurlException $e) {
  81.             }
  82.         }
  83.         return new JsonResponse($webHooks);
  84.     }
  85.     /**
  86.      * @Route("/create", methods={"GET"})
  87.      */
  88.     public function createHook(Request $requestStoreRepository $storeRepository)
  89.     {
  90.         $shopifyDomain $request->headers->get('X-Shopify-Shop-Domain');
  91.         $store $storeRepository->findOneByDomain($shopifyDomain);
  92.         $hooks = [
  93.             [
  94.                 "topic" => "checkouts/update",
  95.                 "address" => 'https://parcelapp.rakitaapps.com' $this->generateUrl('hook_calculate', [], UrlGeneratorInterface::ABSOLUTE_PATH),
  96.                 "api_version" => '2023-01'
  97.             ]
  98.         ];
  99.         if ( $store ) {
  100.             $shopifyService = new ShopifyService($store);
  101.             foreach ( $hooks as $hook ) {
  102.                 $shopifyService->checkWebHook($hook['topic'], $hook['address']);
  103.                 $this->sendSlack("Info: Webhooks created, please check from shopify panel.");
  104.             }
  105.         }
  106.         return new JsonResponse([]);
  107.     }
  108.     /**
  109.      * @Route("/delete", methods={"GET"})
  110.      */
  111.     public function deleteHook(Request $requestStoreRepository $storeRepository)
  112.     {
  113.         $shopifyDomain $request->headers->get('X-Shopify-Shop-Domain');
  114.         $id = (int) $request->get('id');
  115.         $store $storeRepository->findOneByDomain($shopifyDomain);
  116.         $result = [
  117.             'status' => false
  118.         ];
  119.         if ( $store && $id ) {
  120.             $shopifyService = new ShopifyService($store);
  121.             $result $shopifyService->deleteWebHook($id);
  122.             return new JsonResponse($result);
  123.         }
  124.     }
  125.     private function sendSlack($message)
  126.     {
  127.         $client = new Client('https://hooks.slack.com/services/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', [
  128.             'username' => 'computer',
  129.             'channel' => '#cargo_request_log',
  130.             'link_names' => true
  131.         ]);
  132.         try {
  133.             $client->send($message);
  134.         } catch (Exception $e) {
  135.         }
  136.     }
  137. }