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