src/Controller/ServicePaymentController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\InfoSanteSubscription;
  4. use App\Entity\InfoSanteTransaction;
  5. use App\Entity\LabbaikSubscriber;
  6. use App\Entity\LabbaikSubscription;
  7. use App\Entity\LabbaikTransaction;
  8. use App\Entity\SysCloseStatus;
  9. use App\Entity\SysSmsHistory;
  10. use App\Entity\SysTransaction;
  11. use App\Message\ServicePayment;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Doctrine\Persistence\ManagerRegistry;
  14. use PhpParser\Node\Stmt\TryCatch;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpClient\HttpClient;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. class ServicePaymentController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/service/payment", name="service_payment")
  23.      */
  24.     public function index(): Response
  25.     {
  26.         
  27.         //$this->dispatchMessage(new ServicePayment(56,$this->getDoctrine()));
  28.         return $this->render('service_payment/index.html.twig', [
  29.             'controller_name' => 'ServicePaymentController',
  30.         ]);
  31.     }
  32.     /**
  33.      * @Route("/service/checkPaymentStatus", name="service_payment_status")
  34.      */
  35.     public function checkPaymentStatus(): Response
  36.     {
  37.         $resultReponse "OK";
  38.         $entityManager $this->getDoctrine()->getManager();
  39.         $repoTrans $entityManager->getRepository(SysTransaction::class);
  40.         $transactions $repoTrans->findBy(['clientPayementStatus' => 'PENDING''isClosed' => false]);
  41.         
  42.         foreach($transactions as $transaction){
  43.             if($transaction->getIsSuccessTransaction() && !$transaction->getIsClosed()){
  44.                 $resultReponse $resultReponse " " strval($transaction->getId());
  45.                 $url "http://caurispay.ridcode.com:8184/payement/requestStatus";
  46.                 $client HttpClient::create([
  47.                     'headers' => [
  48.                     'User-Agent' => 'ReservLine',
  49.                     'Connection' => 'keep-alive',
  50.                     //'Content-Length' => strlen($body),
  51.                     //'Authorization' => $authorization,
  52.                     //'Content-Type' => 'application/json',
  53.                     'Content-Type: application/x-www-form-urlencoded'
  54.                     ],
  55.                     'verify_peer' => false,
  56.                     'verify_host' => false,
  57.                     'body' => ['requestReference' => $transaction->getClientPayementReference()]
  58.                 ]);
  59.             
  60.                 //try{
  61.                 //}catch(){
  62.                     
  63.                 //}
  64.                 $response $client->request('POST'$url,['timeout' => 400]);
  65.                 
  66.                 //var_dump( $transaction->getClientPayementReference());
  67.                 //var_dump($response->getStatusCode());
  68.                 //var_dump($response->getInfo());
  69.                 if($response->getStatusCode() == 200 or $response->getStatusCode() ==202){
  70.                     
  71.                     $requestResponse $response->toArray();
  72.                     //var_dump( $requestResponse);
  73.                     if(strcmp($requestResponse["status"],"PENDING") != ){
  74.                         $transaction->setClientPayementTime(new \DateTime('now'));
  75.                         $transaction->setClientPayementStatus($requestResponse["status"]);
  76.                         $transaction->setClientPayementComment($requestResponse["messageText"]);
  77.                         
  78.                         $textMessageSMS "";
  79.                         $textMessageSMSGAZADMIN ="";
  80.                         $repoClosStatus $entityManager->getRepository(SysCloseStatus::class);
  81.                         
  82.                         if(strcmp($requestResponse["status"],"SUCCESS") == ){
  83.                             $closeStatus $repoClosStatus->findOneBy(["statusCode" => "PDPROCS"]); //TODO: Add service code in condition
  84.                             $transaction->setIsClientPaid(true);
  85.                             switch ($transaction->getService()->getCodeService()) {
  86.                                 
  87.                                 case "TTBUS":
  88.                                     //$textMessageSMS = str_replace("%idResv%", $transaction->getReservationCode() , $transaction->getService()->getTextSuccessPayementSMS());
  89.                                     $textMessageSMS $transaction->getSmsMessage();
  90.                                     break;
  91.                                 case "RCHGAZ":
  92.                                     $textMessageSMS $transaction->getSmsMessage();
  93.                                     
  94.                                     //Send admin notification email
  95.                                     if($transaction->getEmailNotif() != null){
  96.                                         SysNotifController::sendEmailGazNotif($transaction->getReservationCode() . "-" $transaction->getMsisdn(), $transaction->getEmailNotif());
  97.                                         $textMessageSMSGAZADMIN $transaction->getEmailNotif();
  98.                                     }
  99.                                     break;
  100.                                 case "ESANTE":
  101.                                     $textMessageSMS $transaction->getService()->getTextSuccessPayementSMS();
  102.                                     $transaction->setIsClosed(true);
  103.                                     $repoInfoSanteTransaction $entityManager->getRepository(InfoSanteTransaction::class);
  104.                                     $infoSanteTransaction $repoInfoSanteTransaction->findOneBy(["sysTansaction" => $transaction ]);
  105.                                     $repoSubscription $entityManager->getRepository(InfoSanteSubscription::class);
  106.                                     $subscription $repoSubscription->findOneBy(["msisdn"=>$transaction->getMsisdn(), "categorie" =>$infoSanteTransaction->getCategorie()]);
  107.                                     $toDay = new \DateTime('now');
  108.                                     if($subscription == null){
  109.                                         $subscription = new InfoSanteSubscription();
  110.                                         $subscription->setMsisdn($transaction->getMsisdn());
  111.                                         $subscription->setCreationDate(new \DateTime('now'));
  112.                                         $subscription->setCategorie($infoSanteTransaction->getCategorie());
  113.                                         $subscription->setIsActif(true);
  114.                                         $subscription->setStartDate(new \DateTime('now'));
  115.                                         $subscription->setExpiryDate(new \DateTime('now'));
  116.                                     }
  117.                                     $subscription->setIsActif(true);
  118.                                     $subscription->setUpdateDate(new \DateTime('now'));
  119.                                     
  120.                                     if($subscription->getExpiryDate() < $toDay){
  121.                                         $subscription->setStartDate(new \DateTime('now'));
  122.                                         $subscription->setExpiryDate($toDay);
  123.                                     }
  124.                                     $toDay $subscription->getExpiryDate();
  125.                                     $toDay date_add($toDay,date_interval_create_from_date_string(strval($infoSanteTransaction->getTypeAbonnement()->getNbrJours()) . " DAYS"));
  126.                                     $subscription->setExpiryDate(date_create(date_format($toDay,"Y-m-d H:i:s")) );
  127.                                     
  128.                                     $entityManager->persist($subscription);
  129.                                    
  130.                                     break;
  131.                                 case "LABBAIK":
  132.                                     $labbaikTransRepo $entityManager->getRepository(LabbaikTransaction::class);
  133.                                     $labbaikSubscriberRepo $entityManager->getRepository(LabbaikSubscriber::class);
  134.                                     $labbaikTransaction $labbaikTransRepo->findOneBy(['sysTransaction' => $transaction]);
  135.                                     $closeStatus $repoClosStatus->findOneBy(["statusCode" => "SUCCESS"]);
  136.                                     $labbaikTransaction->setTransactionStatus($closeStatus);
  137.                                     if(strcmp(strtolower($labbaikTransaction->getTransactionType()) ,"souscription")==or strcmp(strtolower($labbaikTransaction->getTransactionType()) ,"newsouscription")==0){
  138.                                         $textMessageSMS "Merci pour votre nouvelle souscription au service ".$labbaikTransaction->getSubscriptionType()->getLibelle().". Faite vos paiements a tout moment de votre choix en tapant *450*6#";
  139.                                         
  140.                                         //$subscription = $labbaikTransaction->getSubscription();
  141.                                         
  142.                                         //$subscriber = $labbaikSubscriberRepo->findOneBy(['telephoneNumber' => $transaction->getMsisdn()]);
  143.                                         //if($subscription == null){
  144.                                             //$subscriber = new LabbaikSubscriber();
  145.                                             //$subscriber->setTelephoneNumber($transaction->getMsisdn());
  146.                                             //$entityManager->persist($subscriber);
  147.                                             $subscription = new LabbaikSubscription();
  148.                                             $subscription->setSubscriber($labbaikTransaction->getSubscriber());
  149.                                             $subscription->setSubscribtionType($labbaikTransaction->getSubscriptionType());
  150.                                             $subscription->setMsisdn($labbaikTransaction->getMsisdn());
  151.                                             $subscription->setFeeSubscriptionPaid(true);
  152.                                             $subscription->setSubscriptionActivated(false);
  153.                                             $subscription->setAssPolice1Enable(false);
  154.                                             $subscription->setAssPolice2Enable(false);
  155.                                             $subscription->setAssPolice1Number(sprintf("%06d",strval($labbaikTransaction->getId())));
  156.                                             $subscription->setFeeSubscriptionPaid(true);
  157.                                             $subscription->setCreateDate(new \DateTime("Now"));
  158.                                             $subscription->setUpdateTime(new \DateTime("Now"));
  159.                                             $subscription->setMainBalance($labbaikTransaction->getSubscriptionType()->getCotisationAmount());
  160.                                             $entityManager->persist($subscription);
  161.                                         //}
  162.                                         $labbaikTransaction->setPaymentTime(new \DateTime('now'));
  163.                                         $labbaikTransaction->setPaymentValidated(true);
  164.                                         $labbaikTransaction->setAffectedPoliceId(1);
  165.                                         $labbaikTransaction->setBalanceBefore(0);
  166.                                         $labbaikTransaction->setBalanceAfter($subscription->getMainBalance());
  167.                                         $labbaikTransaction->setSubscription($subscription);
  168.                                         $entityManager->persist($labbaikTransaction);
  169.                                     }elseif(strcmp(strtolower($labbaikTransaction->getTransactionType()) ,"paiement")==0){
  170.                                        
  171.                                         //$labbaikSubscriptionRepo = $entityManager->getRepository(LabbaikSubscription::class);
  172.                                         $subscription $labbaikTransaction->getSubscription();
  173.                                         $labbaikTransaction->setAffectedPoliceId(1);
  174.                                         $labbaikTransaction->setBalanceBefore($subscription->getMainBalance());
  175.                                         $labbaikTransaction->setPaymentTime(new \DateTime('now'));
  176.                                         $labbaikTransaction->setPaymentValidated(true);
  177.                                         $subscription->setMainBalance($subscription->getMainBalance() + $labbaikTransaction->getTransactionAmount());
  178.                                         $entityManager->persist($subscription);
  179.                                         
  180.                                         $labbaikTransaction->setBalanceAfter($subscription->getMainBalance());
  181.                                         $entityManager->persist($labbaikTransaction);
  182.                                         $textMessageSMS "Payement de "strval(intval($labbaikTransaction->getTransactionAmount())) ." au service " $labbaikTransaction->getSubscriptionType()->getLibelle() ." effectue avec success. votre nouveau solde est de " strval(intval($subscription->getMainBalance())) . "F" ;
  183.                                     }
  184.                                     $transaction->setIsClosed(true);
  185.                                     //$textMessageSMS = $transaction->getSmsMessage();
  186.                                     //Send admin notification email
  187.                                     if($transaction->getEmailNotif() != null){
  188.                                         SysNotifController::sendEmailGazNotif($transaction->getReservationCode() . "-" $transaction->getMsisdn(), $transaction->getEmailNotif());
  189.                                     }
  190.                                     break;
  191.                             }
  192.                         }else{
  193.                             $closeStatus $repoClosStatus->findOneBy(["statusCode" => "NOTPAID"]); //TODO: Add service code in condition
  194.                             $transaction->setIsClosed(true);
  195.                             $transaction->setCloseComment("Client payment fail");
  196.                             
  197.                             
  198.                             switch ($transaction->getService()->getCodeService()) {
  199.                                 
  200.                                 case "TTBUS":
  201.                                     $textMessageSMS str_replace("%idResv%"$transaction->getReservationCode() , $transaction->getService()->getTextFailedPayementSMS());
  202.                                     break;
  203.                                 case "RCHGAZ":
  204.                                     
  205.                                     $textMessageSMS str_replace("%idResv%"$transaction->getReservationCode() , $transaction->getService()->getTextFailedPayementSMS());
  206.                                     break;
  207.                                 case "ESANTE":
  208.                                     $textMessageSMS str_replace("%idResv%"$transaction->getReservationCode() , $transaction->getService()->getTextFailedPayementSMS());
  209.                                     break;
  210.                                 case "LABBAIK":
  211.                                     $textMessageSMS =  $transaction->getService()->getTextFailedPayementSMS();
  212.                                     $labbaikTransRepo $entityManager->getRepository(LabbaikTransaction::class);
  213.                                     $labbaikTransaction $labbaikTransRepo->findOneBy(['sysTransaction' => $transaction]);
  214.                                     $labbaikTransaction->setTransactionStatus($closeStatus);
  215.                                     $entityManager->persist($labbaikTransaction);
  216.                                     //var_dump($textMessageSMS);
  217.                                     break;
  218.                             }
  219.                         }
  220.                         $transaction->setCloseStatus($closeStatus);
  221.                 
  222.                         if(strlen($textMessageSMS) > 0){
  223.                             //Send SMS
  224.                             //Send Message and Record SmsHistoy
  225.                             //SysSMSController::sendSMS($transaction->getMsisdn(),$textMessageSMS);
  226.                             //var_dump($textMessageSMS);
  227.                             SysSMSController::sendSMSWithParm($transaction->getMsisdn(),$textMessageSMS,$transaction->getOperator()->getCodeOperator(), $transaction->getService()->getSmsSenderName() );
  228.                             $sysSmsHistory = new SysSmsHistory();
  229.                             $sysSmsHistory->setMsisdn($transaction->getMsisdn());
  230.                             $sysSmsHistory->setMessageText($textMessageSMS);
  231.                             //$sysSmsHistory->setMessageText($textMessageSMS);
  232.                             $sysSmsHistory->setCreateTime(new \DateTime);
  233.                             $sysSmsHistory->setIsReceived(false);
  234.                             $sysSmsHistory->setTransaction($transaction);
  235.                             $sysSmsHistory->setSmsType('PAYMENT_MSG');
  236.                             $entityManager->persist($sysSmsHistory);
  237.                             //$entityManager->flush();
  238.                         }
  239.                         
  240.                         if(strlen($textMessageSMSGAZADMIN) > 0){
  241.                             //Send SMS
  242.                             //Send Message and Record SmsHistoy
  243.                             SysSMSController::sendSMSWithParm("22995000169",$textMessageSMSGAZADMIN,"MOOVBJ""RESERVLINE" );
  244.                             $sysSmsHistory = new SysSmsHistory();
  245.                             $sysSmsHistory->setMsisdn("22995000169");
  246.                             $sysSmsHistory->setMessageText($textMessageSMSGAZADMIN);
  247.                             $sysSmsHistory->setCreateTime(new \DateTime);
  248.                             $sysSmsHistory->setIsReceived(false);
  249.                             $sysSmsHistory->setTransaction($transaction);
  250.                             $sysSmsHistory->setSmsType('ADMIN');
  251.                             $entityManager->persist($sysSmsHistory);
  252.                             //$entityManager->flush();
  253.                         }
  254.                         //$transaction->setPayementReference($result["isSuccess"]);
  255.                         $entityManager->persist($transaction);
  256.                         $entityManager->flush();
  257.                     }
  258.                 }
  259.             }
  260.         }
  261.         //$this->dispatchMessage(new ServicePayment(56,$this->getDoctrine()));
  262.         $JResponse = new Response();
  263.         $JResponse->headers->set('Content-Type''application/json''charset=utf-8');
  264.         $JResponse->setCharset('UTF-8');
  265.         $JResponse->setContent(json_encode($resultReponse));
  266.         return $JResponse;
  267.     }
  268.     public function payment(int $transctionIdstring $referenceId,ManagerRegistry  $doctrineRes){
  269.         $entityManager $doctrineRes->getManager();
  270.         $repoTrans $doctrineRes->getRepository(SysTransaction::class);
  271.         $transaction $repoTrans->find($transctionId);
  272.         if($transaction->getIsSuccessTransaction() && !$transaction->getIsClosed()){
  273.             //sleep(1);
  274.             $operateurCode "";
  275.             $payeReferentId $transaction->getReferenceId() . '+' $transaction->getReservationCode();
  276.             if(strcmp($transaction->getOperator()->getCodeOperator(),"MOOVBJ") == 0){
  277.                 $operateurCode "MOOVBENIN";
  278.             }    
  279.             if(strcmp($transaction->getOperator()->getCodeOperator(),"MTNBJ") == 0){
  280.                 $operateurCode "MTNBENIN";
  281.             }
  282.             $url "http://caurispay.ridcode.com:8184/payement/requestPayement";
  283.             $client HttpClient::create([
  284.                 'headers' => [
  285.                 'User-Agent' => 'ReservLine',
  286.                 'Connection' => 'keep-alive',
  287.                 //'Content-Length' => strlen($body),
  288.                 //'Authorization' => $authorization,
  289.                 //'Content-Type' => 'application/json',
  290.                 'Content-Type: application/x-www-form-urlencoded'
  291.                  ],
  292.                 'verify_peer' => false,
  293.                 'verify_host' => false,
  294.                 'body' => ['operatorCode' => $operateurCode'accountNumber' =>  $transaction->getMsisdn(),
  295.                            'payementAmount' => intval($transaction->getServiceTransactionAmount()),
  296.                             'currency' => 'CFA''transactionType' => 'DEBIT',
  297.                              'merchantReference' => $payeReferentId,
  298.                              'merchantComment' => $transaction->getService()->getLibelle()]
  299.             ]);
  300.         
  301.             $response $client->request('POST'$url,['timeout' => 400]);
  302.             //var_dump($response);
  303.             //$result["isSuccess"] = false;
  304.             $result["statusCode"] = $response->getStatusCode();
  305.             if($result["statusCode"] == 200 or $result["statusCode"] ==202){
  306.                 $result["requestResponse"] = $response->toArray();
  307.                 if($result["requestResponse"]["isSuccess"]){
  308.                     $repoClosStatus $entityManager->getRepository(SysCloseStatus::class);
  309.                     $closeStatus $repoClosStatus->findOneBy(["statusCode" => "PDPAYE"]); //TODO: Add service code in condition
  310.                     $transaction->setCloseStatus($closeStatus);
  311.                     //$transaction->setClientPayementCanal("CAURISPAY");
  312.                     $transaction->setClientPayementTelephone($transaction->getMsisdn());
  313.                     $transaction->setClientPayementAccount($transaction->getMsisdn());
  314.                     $transaction->setClientPayementStatus($result["requestResponse"]["status"]);
  315.                     $transaction->setClientPayementReference($payeReferentId);
  316.                     //$transaction->setPayementReference($result["isSuccess"]);
  317.                     $entityManager->persist($transaction);
  318.                     $entityManager->flush();
  319.                 }
  320.             }
  321.             return $result;
  322.         }
  323.     }
  324.     public function checkPayementStatus(SysTransaction $transaction,ManagerRegistry  $doctrineRes ){
  325.         $entityManager $doctrineRes->getManager();
  326.         $repoTrans $doctrineRes->getRepository(SysTransaction::class);
  327.     }
  328. }