src\Web\MpesaHomeController.php line 515

Open in your IDE?
  1. <?php
  2. namespace App\Web;
  3. use App\Entity\Branch;
  4. use App\Entity\MpesaAuth;
  5. use App\Entity\MpesaManual;
  6. use App\Entity\MpesaTransaction;
  7. use App\Entity\MpesaTransactionVerification;
  8. use App\Entity\User;
  9. use App\Entity\UserBranch;
  10. use App\Form\MpesaManualIDType;
  11. use App\Form\MpesaManualTransactionType;
  12. use App\Form\MpesaManualType;
  13. use App\Service\MpesaVerifyService;
  14. use DateTime;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use Doctrine\Persistence\ObjectManager;
  17. use JMS\Serializer\SerializationContext;
  18. use JMS\Serializer\SerializerBuilder;
  19. use Psr\Log\LoggerInterface;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\Form\FormError;
  22. use Symfony\Component\HttpClient\Exception\ClientException;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
  28. use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
  29. use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
  30. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  31. use Symfony\Contracts\HttpClient\HttpClientInterface;
  32. class MpesaHomeController extends AbstractController
  33. {
  34.     private ObjectManager $em;
  35.     private MpesaVerifyService $verifyService;
  36.     private LoggerInterface $logger;
  37.     private HttpClientInterface $client;
  38.     public function __construct(ManagerRegistry $managerRegistryMpesaVerifyService $verifyServiceLoggerInterface $loggerHttpClientInterface $client)
  39.     {
  40.         $this->em $managerRegistry->getManager();
  41.         $this->verifyService $verifyService;
  42.         $this->logger $logger;
  43.         $this->client $client;
  44.     }
  45.     /**
  46.      * @Route("/mpesa",  name="mpesaHomeRoute")
  47.      * @param Request $request
  48.      * @return Response
  49.      */
  50.     public function mpesaHomeAction(Request $request)
  51.     {
  52.         return $this->render('mpesa/mpesa_home.html.twig', [
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/mpesa/testing",  name="mpesaHomeRoute0")
  57.      * @param Request $request
  58.      */
  59.     public function mpesaTestingAction(Request $request): Response
  60.     {
  61.        /* $jsonData = $request->getContent();
  62.         $result = $jsonData['Result'];
  63.         $resultCode = $result['ResultCode'];
  64.         if ($resultCode == '0') {
  65.             $resultParameters = $result['ResultParameters']['ResultParameter'];
  66.             $firstName = null;
  67.             $middleName = null;
  68.             $lastName = null;
  69.             $mpesaTransaction = new MpesaTransaction();
  70.             foreach ($resultParameters as $index => $resultParameter) {
  71.                 if ($index == 0) {
  72.                     $phoneName = $resultParameter['Value'];
  73.                     if ($phoneName) {
  74.                         $phoneNameArray = explode('-', $phoneName);
  75.                         $phoneNumber = trim($phoneNameArray[0]);
  76.                         $name = $phoneNameArray[1];
  77.                         $namesArray = explode(" ", trim($name));
  78.                         foreach ($namesArray as $index => $item) {
  79.                             if ($index == 0) {
  80.                                 $firstName = trim($item);
  81.                             } elseif ($index == 1) {
  82.                                 $middleName = trim($item);
  83.                             } elseif ($index >= 2) {
  84.                                 $lastName .= trim($item);
  85.                             }
  86.                         }
  87.                         $mpesaTransaction->setMsisdn($phoneNumber);
  88.                         $mpesaTransaction->setFirstName($firstName);
  89.                         $mpesaTransaction->setMiddleName($middleName ? $middleName : '-');
  90.                         $mpesaTransaction->setLastName($lastName ? $lastName : '-');
  91.                     }
  92.                 } else if ($index == 1) {
  93.                     $values = explode('-', $resultParameter['Value']);
  94.                     $mpesaTransaction->setShortCode($values[0]);
  95.                 } else if ($index == 3) {
  96.                     $transactionTime = explode('-', $resultParameter['Value']);
  97.                     $from = \DateTime::createFromFormat('YmdHis', $transactionTime[0]);
  98.                     $mpesaTransaction->setTransactionTime($from);
  99.                 } else if ($index == 10) {
  100.                     $amount = $resultParameter['Value'];
  101.                     $mpesaTransaction->setTransactionAmount($amount);
  102.                 } else if ($index == 12) {
  103.                     $transactionID = $resultParameter['Value'];
  104.                     $mpesaTransaction->setTransactionId($transactionID);
  105.                 }
  106.             }
  107. //
  108.             $mpesaTransaction->setTransactionType("Paybill");
  109.             $mpesaTransaction->setIsUsed(false);
  110.             $mpesaTransaction->setIsValidated(false);
  111.             $mpesaTransaction->setCreatedAt(new DateTime());
  112.             $mpesaTransaction->setIsUsed(false);
  113.         }*/
  114.         $j $this->verifyService->encryptPassword(base64_encode('Id@23098240'));
  115.         return new Response($jResponse::HTTP_OK);
  116.     }
  117.     /**
  118.      * @Route("/mpesa/manual",  name="mpesaManualRoute")
  119.      * @param Request $request
  120.      * @return Response
  121.      */
  122.     public function mpesaManualAction(Request $request)
  123.     {
  124.         return $this->render('mpesa/manual_mpesa.html.twig', []);
  125.     }
  126.     /**
  127.      * @Route("/mpesa/update/{id}",  name="mpesaUpdateDateRoute")
  128.      * @param Request $request
  129.      * @param $id
  130.      * @return Response
  131.      */
  132.     public function mpesaUpdateCreatedAtDate(Request $request$id)
  133.     {
  134.         $em $this->em;
  135.         $mpesaTransaction $em->getRepository(MpesaTransaction::class)->findOneBy([
  136.             'id' => $id
  137.         ]);
  138.         if ($mpesaTransaction) {
  139.             $mpesaTransaction->setCreatedAt(new \DateTime());
  140.         }
  141.         $em->flush();
  142.         return new JsonResponse('success');
  143.     }
  144.     /**
  145.      * @Route("/mpesa/manual/new/transaction",  name="mpesaManualNewTransactionRoute")
  146.      * @param Request $request
  147.      * @return Response
  148.      */
  149.     public function mpesaManualNewAction(Request $request): Response
  150.     {
  151.         $em $this->em;
  152.         if (!in_array('ROLE_MPESA_ADMIN'$this->getUser()->getRoles())) {
  153.             $this->addFlash('warning''You ARE NOT AUTHORIZED TO DO THIS - Contact ADMIN');
  154.             $route $request->headers->get('referer');
  155.             return $this->redirect($route);
  156.         }
  157.         $mpesaTransaction = new MpesaTransaction();
  158.         // $mpesaTransaction->setCreatedAt(new \DateTime());
  159.         $mpesaTransaction->setTransactionType('NA');
  160.         $mpesaTransaction->setIsComplete(true);
  161.         $mpesaTransaction->setBillReferenceNumber('');
  162.         $mpesaTransaction->setAccountBalance(0);
  163.         $mpesaTransaction->setIsUsed(false);
  164.         $mpesaTransaction->setIsSeen(false);
  165.         $mpesaTransaction->setIsValidated(false);
  166.         $mpesaTransaction->setTransactionTime(new \DateTime());
  167.         $mpesaManual = new MpesaManual();
  168.         $mpesaManual->setMpesaTransaction($mpesaTransaction);
  169.         $mpesaManual->setCreatedAt(new \DateTime());
  170.         $form $this->createForm(MpesaManualIDType::class, $mpesaManual, [
  171.             'validation_groups' => [
  172.                 'Default'
  173.             ]
  174.         ]);
  175.         $form->handleRequest($request);
  176.         if ($form->isSubmitted()) {
  177.             $mpesaT $em->getRepository(MpesaTransaction::class)->findOneBy([
  178.                 'transactionId' => $mpesaTransaction->getTransactionId()
  179.             ]);
  180.             if ($mpesaT) {
  181.                 $form->get('MpesaTransaction')->get('transactionId')->addError(new FormError('Transaction Available ...'));
  182.             }
  183.             if ($form->isValid()) {
  184.                 $mpesaTransactionVerification $em->getRepository(MpesaTransactionVerification::class)->findOneBy([
  185.                     'transactionId' => $mpesaTransaction->getTransactionId()
  186.                 ]);
  187.                /* $mpesaAuth = $this->em->getRepository(MpesaAuth::class)->findOneBy([
  188.                     'branch' => $mpesaManual->getBranch()
  189.                 ]);*/
  190.                 if ($mpesaTransactionVerification) {
  191.                     $mpesaAuth $this->em->getRepository(MpesaAuth::class)->findOneBy([
  192.                         'tillNumber' => $mpesaTransactionVerification->getShortCode()
  193.                     ]);
  194.                     $mpesa = new MpesaTransaction();
  195.                     $mpesa->setTransactionId($mpesaTransactionVerification->getTransactionId());
  196.                     $mpesa->setTransactionType($mpesaTransactionVerification->getTransactionType());
  197.                     $mpesa->setTransactionTime($mpesaTransactionVerification->getTransactionTime());
  198.                     $mpesa->setTransactionAmount($mpesaTransactionVerification->getTransactionAmount());
  199.                     $mpesa->setShortCode($mpesaTransactionVerification->getShortCode());
  200.                     $mpesa->setBillReferenceNumber($mpesaTransactionVerification->getBillReferenceNumber());
  201.                     $mpesa->setAccountBalance($mpesaTransactionVerification->getAccountBalance());
  202.                     $mpesa->setThirdPartyTransactionId($mpesaTransactionVerification->getThirdPartyTransactionId());
  203.                     $mpesa->setMsisdn($mpesaTransactionVerification->getMsisdn());
  204.                     $mpesa->setFirstName($mpesaTransactionVerification->getFirstName());
  205.                     $mpesa->setMiddleName($mpesaTransactionVerification->getMiddleName());
  206.                     $mpesa->setLastName($mpesaTransactionVerification->getLastName());
  207.                     $mpesa->setIsComplete(true);
  208.                     $mpesa->setCreatedAt(new DateTime());
  209.                     $mpesa->setIsValidated(true);
  210.                     $mpesa->setIsSeen(false);
  211.                     $mpesa->setIsUsed(false);
  212.                     $mpesa->setCompletedMpesaFromIp($request->getClientIp());
  213.                     $mpesaManual = new MpesaManual();
  214.                     $mpesaManual->setMpesaTransaction($mpesa);
  215.                     $mpesaManual->setCreatedAt(new \DateTime());
  216.                     $mpesaManual->setCreatedBy($this->getUser());
  217.                     $mpesaManual->setBranch($mpesaAuth->getBranch());
  218.                     $this->em->persist($mpesaManual);
  219.                     try {
  220.                         $em->persist($mpesa);
  221.                         $em->flush();
  222.                         return $this->redirectToRoute('mpesaManualNewTransactionRoute');
  223.                     } catch (\PDOException $exception) {
  224.                         return $this->render('mpesa/manual_new_mpesa_transaction.html.twig', [
  225.                             'form' => $form->createView()
  226.                         ]);
  227.                     }
  228.                 } /*else {
  229.                     $transactionId = $mpesaTransaction->getTransactionId();
  230.                     try {
  231.                         $this->getMpesaTransaction($transactionId, $mpesaManual->getBranch());
  232.                         $this->addFlash("info", "Gotten from mpesa verify");
  233.                         return $this->redirectToRoute('mpesaManualNewTransactionRoute');
  234.                     } catch (\Exception $e) {
  235.                         if ($e->getCode() == 404) {
  236.                             try {
  237.                                 $this->getMpesaAuthentication($mpesaAuth);
  238.                                 $this->getMpesaTransaction($mpesaTransaction->getTransactionId(), $mpesaManual->getBranch());
  239.                             } catch (TransportExceptionInterface|ClientExceptionInterface|RedirectionExceptionInterface|ServerExceptionInterface $e) {
  240.                                 $this->addFlash("error", "Exception occurred during mpesa verify 2 - {$e->getCode()} -" . $e->getMessage());
  241.                             }
  242.                         }
  243. //                        $this->addFlash("error", "Exception occurred during mpesa verify - {$e->getCode()} -" . $e->getMessage());
  244.                         return $this->render('mpesa/manual_new_mpesa_transaction.html.twig', [
  245.                             'form' => $form->createView()
  246.                         ]);
  247.                     }
  248.                 }*/
  249.             }
  250.         }
  251.         return $this->render('mpesa/manual_new_mpesa_transaction.html.twig', [
  252.             'form' => $form->createView()
  253.         ]);
  254.     }
  255.     /**
  256.      * @throws TransportExceptionInterface
  257.      * @throws ServerExceptionInterface
  258.      * @throws RedirectionExceptionInterface
  259.      * @throws ClientExceptionInterface
  260.      */
  261.     function getMpesaTransaction($transactionIdBranch $branch){
  262.         $response $this->verifyService->getTransaction(
  263.             $transactionId,
  264.             $branch);
  265.     }
  266.     /**
  267.      * @Route("/mpesa/manual/new",  name="mpesaManualNewRoute")
  268.      * @param Request $request
  269.      * @return Response
  270.      */
  271.     public function mpesaManualNewActionk(Request $request)
  272.     {
  273.         $em $this->em;
  274.         if (!in_array('ROLE_ADMIN_WEB'$this->getUser()->getRoles())) {
  275.             $this->addFlash('warning''You ARE NOT AUTHORIZED TO DO THIS - Contact ADMIN');
  276.             $route $request->headers->get('referer');
  277.             return $this->redirect($route);
  278.         }
  279.         $mpesaTransaction = new MpesaTransaction();
  280.         // $mpesaTransaction->setCreatedAt(new \DateTime());
  281.         $mpesaTransaction->setTransactionType('NA');
  282.         $mpesaTransaction->setIsComplete(true);
  283.         $mpesaTransaction->setBillReferenceNumber('');
  284.         $mpesaTransaction->setAccountBalance(0);
  285.         $mpesaTransaction->setIsUsed(false);
  286.         $mpesaTransaction->setIsSeen(false);
  287.         $mpesaTransaction->setIsValidated(false);
  288.         $mpesaTransaction->setTransactionTime(new \DateTime());
  289.         $mpesaManual = new MpesaManual();
  290.         $mpesaManual->setMpesaTransaction($mpesaTransaction);
  291.         $mpesaManual->setCreatedAt(new \DateTime());
  292.         $form $this->createForm(MpesaManualType::class, $mpesaManual, [
  293.             'validation_groups' => [
  294.                 'Default'
  295.             ]
  296.         ]);
  297.         $form->handleRequest($request);
  298.         if ($form->isSubmitted() && $form->isValid()) {
  299.             $mpesaAuth $em->getRepository(MpesaAuth::class)->findOneBy([
  300.                 'branch' => $mpesaManual->getBranch()
  301.             ]);
  302.             $user $em->getRepository(User::class)->findOneBy([
  303.                 'id' => 1
  304.             ]);
  305.             if ($mpesaAuth) {
  306.                 try {
  307.                     $mpesaTransaction->setShortCode($mpesaAuth->getTillNumber());
  308.                     $mpesaManual->setCreatedBy($user);
  309.                     $em->persist($mpesaTransaction);
  310.                     $em->persist($mpesaManual);
  311.                     $em->flush();
  312.                     return $this->redirectToRoute('mpesaManualNewRoute');
  313.                 } catch (\Exception $e) {
  314.                     dump($e);
  315.                 }
  316.             }
  317.         }
  318.         return $this->render('mpesa/manual_new_mpesa.html.twig', [
  319.             'form' => $form->createView()
  320.         ]);
  321.     }
  322.     /**
  323.      * @Route("/mpesa/manual/edit/{id}",  name="mpesaManualEditRoute")
  324.      * @param Request $request
  325.      * @param $id
  326.      * @return Response
  327.      */
  328.     public function mpesaManualNewEditActionk(Request $request$id)
  329.     {
  330.         $em $this->em;
  331.         if (!in_array('ROLE_ADMIN_WEB'$this->getUser()->getRoles())) {
  332.             $this->addFlash('warning''You ARE NOT AUTHORIZED TO DO THIS - Contact ADMIN');
  333.             $route $request->headers->get('referer');
  334.             return $this->redirect($route);
  335.         }
  336.         $mpesaTransaction $this->em->getRepository(MpesaTransaction::class)->findOneBy([
  337.             'transactionId' => $id
  338.         ]);
  339.         $mpesaManual $this->em->getRepository(MpesaManual::class)->findOneBy([
  340.             'mpesaTransaction' => $mpesaTransaction
  341.         ]);
  342.         if (!$mpesaManual) {
  343.             return $this->redirectToRoute('mpesaManualNewRoute');
  344.         }
  345.         $mpesaTransaction $mpesaManual->getMpesaTransaction();
  346.         $form $this->createForm(MpesaManualType::class, $mpesaManual, [
  347.             'validation_groups' => [
  348.                 'Default'
  349.             ]
  350.         ]);
  351.         $form->handleRequest($request);
  352.         if ($form->isSubmitted() && $form->isValid()) {
  353.             $mpesaAuth $em->getRepository(MpesaAuth::class)->findOneBy([
  354.                 'branch' => $mpesaManual->getBranch()
  355.             ]);
  356.             $user $em->getRepository(User::class)->findOneBy([
  357.                 'id' => 1
  358.             ]);
  359.             if ($mpesaAuth) {
  360.                 try {
  361.                     $mpesaTransaction->setShortCode($mpesaAuth->getTillNumber());
  362.                     $mpesaManual->setCreatedBy($user);
  363.                     $em->flush();
  364.                     return $this->redirectToRoute('mpesaManualNewRoute');
  365.                 } catch (\Exception $e) {
  366.                     dump($e);
  367.                 }
  368.             }
  369.         }
  370.         return $this->render('mpesa/manual_new_mpesa.html.twig', [
  371.             'form' => $form->createView()
  372.         ]);
  373.     }
  374.     /**
  375.      * @Route("/mpesa/json", name="mpesaJSONRoute")
  376.      * @return Response
  377.      */
  378.     public function mpesaTransactionsJSON(Request $request)
  379.     {
  380.         $context = new SerializationContext();
  381.         $context->setSerializeNull(true);
  382.         $branchId $request->getSession()->get('branch') ?: null;
  383.         $serializer SerializerBuilder::create()->build();
  384.         $page $request->request->get('page') > $request->request->get('page') : 1;
  385.         $rows $request->request->get('rows') > $request->request->get('rows') : 20;
  386.         $offset = ($page 1) * $rows;
  387.         $fromDate $request->request->get("from_date");
  388.         $toDate $request->request->get("to_date");
  389. //        dump($fromDate);
  390.         $fDate null;
  391.         $date = new \DateTime('+1 day');
  392.         $tDate null;
  393.         $fromDate = empty($fromDate) ? $fDate $fromDate;
  394.         $toDate = empty($toDate) ? $tDate $toDate;
  395.         $filterRules $request->request->get('filterRules');
  396.         dump($filterRules);
  397.         /*
  398.          * If the @filterRules is empty set the @fromDate & @toDate to today's date
  399.          */
  400.         if (!$fromDate && !$toDate) {
  401.             $date = new DateTime();
  402.             $d $date->format('Y-m-d');
  403.             dump($d);
  404.             $fromDate $d;
  405.             $toDate $d;
  406.         }
  407.         if ($fromDate && $toDate) {
  408.             $filterRules json_decode($filterRulestrue);
  409.             if (!$filterRules$filterRules = [];
  410.             $dates = [
  411.                 'field' => 'a.transaction_time',
  412.                 'op' => 'between',
  413.                 'value' => [
  414.                     'from' => str_replace(" """$fromDate),
  415.                     'to' => str_replace(" """$toDate)
  416.                 ],
  417.             ];
  418.             array_push($filterRules$dates);
  419.             $filterRules json_encode($filterRules);
  420.         }
  421.         $userBranches $this->em->getRepository(UserBranch::class)->findBy([
  422.             'user' => $this->getUser()
  423.         ]);
  424.         if ($branchId) {
  425.             $multipleBranches ' AND (';
  426.             $count count($userBranches);
  427.             foreach ($userBranches as $index => $userBranch) {
  428.                 dump($index$count);
  429.                 if ($index < ($count 1)) {
  430.                     $multipleBranches .= "  c.id = {$userBranch->getBranch()->getId()} or ";
  431.                 } else {
  432.                     $multipleBranches .= " c.id ={$userBranch->getBranch()->getId()})";
  433.                 }
  434.             }
  435.             $filterRules json_decode($filterRulestrue);
  436.             if (!$filterRules$filterRules = [];
  437.             $branch = [
  438.                 'field' => 'c.id',
  439.                 'op' => 'multi',
  440.                 'value' => $multipleBranches,
  441.             ];
  442.             array_push($filterRules$branch);
  443.             $filterRules json_encode($filterRules);
  444.         }
  445.         $transactions $this->em->getRepository(MpesaTransaction::class)->getAllTransactions($filterRules$offset$rows);
  446.         $count $this->em->getRepository(MpesaTransaction::class)->getAllTransactionsCounter($filterRules);
  447.         dump($count);
  448.         $data = [
  449.             'total' => $count['total'],
  450.             'rows' => $transactions,
  451.             'amounts' => number_format($count['amount'])
  452.         ];
  453.         $data $serializer->serialize($data'json'$context);
  454. //        $data = json_encode($data, false);
  455.         return new Response($dataResponse::HTTP_OK, [
  456.             'ContentType' => 'application/json'
  457.         ]);
  458.     }
  459.     /**
  460.      * @Route("/mpesa/manual/json", name="mpesaManualJSONRoute")
  461.      * @return Response
  462.      */
  463.     public function mpesaManualTransactionsJSON(Request $request)
  464.     {
  465.         $context = new SerializationContext();
  466.         $context->setSerializeNull(true);
  467.         $serializer SerializerBuilder::create()->build();
  468.         $branchId $request->getSession()->get('branch') ?: null;
  469.         $page $request->request->get('page') > $request->request->get('page') : 1;
  470.         $rows $request->request->get('rows') > $request->request->get('rows') : 20;
  471.         $offset = ($page 1) * $rows;
  472.         $filterRules $request->request->get('filterRules');
  473.         if ($branchId) {
  474.             $filterRules json_decode($filterRulestrue);
  475.             if (!$filterRules$filterRules = [];
  476.             $branch = [
  477.                 'field' => 'c.id',
  478.                 'op' => 'equal',
  479.                 'value' => $branchId,
  480.             ];
  481.             array_push($filterRules$branch);
  482.             $filterRules json_encode($filterRules);
  483.         }
  484.         $transactions $this->em->getRepository(MpesaTransaction::class)->getAllManualTransactions($filterRules$offset$rows);
  485.         $count $this->em->getRepository(MpesaTransaction::class)->getAllManualTransactionsCounter($filterRules);
  486.         $data = [
  487.             'total' => $count,
  488.             'rows' => $transactions,
  489.         ];
  490.         $data $serializer->serialize($data'json'$context);
  491. //        $data = json_encode($data, false);
  492.         return new Response($data);
  493.         /*return new JsonResponse($data, Response::HTTP_OK, [
  494.             'ContentType' => 'application/json'
  495.         ]);*/
  496.     }
  497.     /**
  498.      * @throws RedirectionExceptionInterface
  499.      * @throws ClientExceptionInterface
  500.      * @throws ServerExceptionInterface
  501.      */
  502.     function getMpesaAuthentication(MpesaAuth $credential)
  503.     {
  504.         $host 'api.safaricom.co.ke';
  505.         $tokenRequest '/oauth/v1/generate?grant_type=client_credentials';
  506.         $em $this->em;
  507.         $date = new \DateTime();
  508.         $date date_format($date'YmdHis');
  509.         $url "https://{$host}{$tokenRequest}";
  510.         $password base64_encode("{$credential->getConsumerKey()}:{$credential->getConsumerSecret()}");
  511.         try {
  512.             $response $this->client->request(
  513.                 "GET",
  514.                 $url,
  515.                 [
  516.                     'headers' => [
  517.                         "Content-Type:application/json",
  518.                         "Authorization:Basic {$password}"
  519.                     ]
  520.                 ]
  521.             );
  522.             $responseData $response->getContent();
  523. //            dump($responseData); die;
  524.             $responseDataArray json_decode($responseDatatrue);
  525.             $credential->setToken($responseDataArray['access_token']);
  526.             $credential->setTokenUpdatedAt(new \DateTime());
  527.             $em->flush();
  528.             $this->logger->debug("ok - {$responseData}_");
  529.             return new Response($response->getContent(), Response::HTTP_OK);
  530.         } catch (ClientExceptionInterface|ClientException|RedirectionExceptionInterface|ServerExceptionInterface|TransportExceptionInterface $e) {
  531.             $this->logger->debug($e->getMessage());
  532.             return new Response($e->getMessage(), Response::HTTP_OK);
  533.         }
  534.     }
  535. }