src/Controller/ServicePaymentController.php line 41

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