src/Controller/Api/ApiController.php line 79
<?phpnamespace App\Controller\Api;use App\Entity\Country;use App\Entity\Input;use App\Entity\InputType;use App\Entity\LandingPage;use App\Entity\PaymentConnector;use App\Entity\PaymentType;use App\Entity\Product;use App\Entity\Source;use App\Entity\User;use App\Repository\CountryRepository;use App\Repository\InputRepository;use App\Repository\InputTypeRepository;use App\Repository\LandingPageRepository;use App\Repository\PaymentConnectorRepository;use App\Repository\PaymentTypeRepository;use App\Repository\ProductRepository;use App\Repository\SourceApiCallRepository;use App\Repository\SourceRepository;use App\Service\PaymentConnectorManagerInterface;use App\Service\PaymentProcess;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpClient\CurlHttpClient;use Symfony\Component\HttpFoundation\InputBag;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Security\Http\Attribute\IsGranted;#[Route('/api')]class ApiController extends AbstractController{// #[Route('/test', name: 'test')]// public function test()// {// $data = [// 'publicKey' => 'xQ6Syq0U',// 'privateKey' => 'YhulnvwXmyxAG8KmcZQM1MKagOCF0POmJeLKFFLDcJj6Cqr3wcfvitGmVhy3jk8IS4DBJXY9LFIHtKtffy0wo4sMTx7p6rfHg7Oj',// 'product' => 'ii6je3Lh',// 'value' => '777',// 'pubid' => 44,// 'clickid' => 'stoto',// 'visitorTag' => '3a1088f99164479800692e6',// ];//// // Initialiser une session CurlHttpClient// $customer = new CurlHttpClient();//// $headers = [// 'Content-Type' => 'application/json',// 'toto' => 'titi',// ];//// // Exécuter la requête// $time = microtime(true);//// ///notif/212f45fac563ea2306b6623/subscription/new/6101// $response = $customer->request('POST', 'https://dev-sub.phonismart.com/api/pin', [//// $response = $customer->request('POST', 'https://dev-sub.phonismart.com/api/phone-number?source=xQ6Syq0U&product=ii6je3Lh&value=0548961969&pubid=42&clickid=toto', [//// $response = $customer->request('POST', 'https://dev-sub.phonismart.com'.$this->generateUrl('app_public_notif_subscription_new_param', [//// 'param' => 6101,//// 'uniqueKey' => $aggregator->getUniqueKey(),//// ]), [// 'headers' => $headers,// 'body' => $data// ]);////// dd($response);// $content = json_decode($response->getContent());// dd($content);// }#[Route('/{inputTypeNameCanonical}', name: 'call')]public function api(string $inputTypeNameCanonical,Request $request,SourceRepository $sourceRepository,ProductRepository $productRepository,InputTypeRepository $inputTypeRepository,PaymentProcess $paymentProcess,InputRepository $inputRepository,SourceApiCallRepository $sourceApiCallRepository,EntityManagerInterface $em,): Response{$sourceApiCall = $sourceApiCallRepository->log($request,);$source = $this->getSourceByRequest($em, $sourceRepository, $request);$sourceApiCall->setSource($source);$sourceApiCallRepository->save($sourceApiCall);$product = $this->getProductByRequest($em, $productRepository, $request);$sourceApiCall->setProduct($product);$sourceApiCallRepository->save($sourceApiCall);$inputType = $this->getInputTypeByNameCanonical($em, $inputTypeRepository, $inputTypeNameCanonical);$sourceApiCall->setInputType($inputType);$sourceApiCallRepository->save($sourceApiCall, true);$pubid = Input::getPubidByRequest($request, true);$sourceApiCall->setPubid($pubid);$sourceApiCallRepository->save($sourceApiCall, true);$clickid = Input::getClickidByRequest($request, true);$sourceApiCall->setClickid($clickid);$sourceApiCallRepository->save($sourceApiCall, true);if ($product->getPaymentType()->isFirstInputType($inputType) === false && Input::getInputBag($request)->get('visitorTag') === null) {return new JsonResponse(PaymentProcess::getApiResponseTemplate(PaymentProcess::ERROR,null,'visitorTag empty'));}$visitorTag = Input::getInputBag($request)->get('visitorTag', Input::generateNewVisitorTag());$sourceApiCall->setVisitorTag($visitorTag);$sourceApiCallRepository->save($sourceApiCall, true);$input = $inputRepository->getCurrentInput($visitorTag, $product, $source, null, $pubid, null, $clickid, $request->getClientIp());while ($input->getInputTypeId() !== $inputType->getId() && $input->getPreviousInput() !== null) {$input = $input->getPreviousInput();}if ($input->getInputTypeId() !== $inputType->getId()) {return new JsonResponse(PaymentProcess::getApiResponseTemplate(PaymentProcess::ERROR,$product->getPaymentType()->isLastInputType($inputType) === false ? $visitorTag : null,'visitorTag not found'));}$input->setIsFromApi(true)->setIsSubmitted(true)->setValue(Input::getInputBag($request)->get('value'));$sourceApiCall->setInput($input);$sourceApiCallRepository->save($sourceApiCall, true);$paymentProcess->execute($input);$sourceApiCall->setSubscription($input->getActiveSubscription());$sourceApiCallRepository->save($sourceApiCall, true);$apiResponse = $paymentProcess->getApiResponse();$sourceApiCall->setResponse($apiResponse);$sourceApiCallRepository->save($sourceApiCall, true);return new JsonResponse($apiResponse);}private function getInputTypeByNameCanonical(EntityManagerInterface $em, InputTypeRepository $inputTypeRepository, string $nameCanonical): InputType{$inputType = $inputTypeRepository->findOneByNameCanonical($nameCanonical);if ($inputType === null) {$em->flush();throw $this->createNotFoundException('input type not found');}return $inputType;}private function getProductByRequest(EntityManagerInterface $em, ProductRepository $productRepository, Request $request): Product{$uniqueKey = Input::getInputBag($request)->get('product');if ($uniqueKey === null || ($product = $productRepository->getProductByUniqueKey($uniqueKey, false)) === null) {$em->flush();throw $this->createNotFoundException('product not found');}return $product;}private function getSourceByRequest(EntityManagerInterface $em, SourceRepository $sourceRepository, Request $request): Source{$publicKey = Input::getInputBag($request)->get('publicKey');$privateKey = Input::getInputBag($request)->get('privateKey');if ($publicKey === null || $privateKey === null || ($source = $sourceRepository->getSourceByKeys($publicKey, $privateKey)) === null) {$em->flush();throw $this->createNotFoundException('source not found');}return $source;}}