<?php
namespace App\Controller;
use App\Entity\Booking;
use App\Form\BookingType;
use DateTime;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SriCabBookingController extends AbstractController
{
#[Route('/booking{id}_step_1', name: 'app_sri_cab_booking_step_1', requirements: ['id' => '\d+'])]
public function step1(ManagerRegistry $d,$id, Request $r): Response
{
$price = 40;
$ref = "sricab";
if ($id == 1)
{
$ref = "1DayTrip";
$price = 30;
}
elseif ($id == 2)
{
$ref = "2DayTrip";
$price = 50;
}
elseif ($id == 3)
{
$ref = "3DayTrip";
$price = 100;
}
elseif ($id == 4)
{
$ref = "Custom10";
$price = 10;
}elseif ($id == 5)
{
$ref = "Custom20";
$price = 20;
}elseif ($id == 6)
{
$ref = "Custom40";
$price = 40;
}
else
$this->redirectToRoute('app_sri_cab_home');
/*
* @var $entity Booking
*/
$entity = new Booking();
$entity->setNbOfSeats(1);
$form = $this->createForm(BookingType::class, $entity);
$em = $d->getManager();
//
// return $this->render("sri_cab_booking/step_1.html.twig", ['form' => $form->createView()]);
$form->handleRequest($r);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$nbOfSeats = (int)$entity->getNbOfSeats();
if ($nbOfSeats <= 0) {
return $this->render("sri_cab_booking/step_1.html.twig", ['form' => $form->createView()]);
}
// $entity->setTotal(10);
// $entity->setShow(1);
// // $entity->setStatus(1);
// $entity->setDestinationId(1);
// $entity->setDestnationName("1");
// $entity->setDateBooking(new \DateTime());
// $entity->setMail("helo@mail.fr");
// $entity->setPhone("050505");
// $entity->setNom("he");
// $entity->setPrix("5050");
$entity->setDateBooking(new DateTime("now"));
$entity->setPrix($price);
$entity->setTotal(number_format($nbOfSeats * $entity->getPrix() ,2));
// $em->persist($entity);
// $em->flush();
$paySheet = $this->generatePaiement($ref,$entity->getMail(),number_format($entity->getTotal(),2), $entity->getNbOfSeats(),$entity->getNom(),$entity->getNom());
return $this->render("sri_cab_booking/step_2.html.twig", $paySheet);
}
// ... perform some action, such as saving the data to the database
// return $this->redirectToRoute('task_success');
}
return $this->render("sri_cab_booking/step_1.html.twig", ['form' => $form->createView(), 'ref' => $ref]);
}
#[Route('/booking', name: 'app_sri_cab_booking')]
public function index(): Response
{
$now = new DateTime();
$pbx_site = 3142974; //variable de test 9999999
$pbx_rang = 001; //variable de test 95
$pbx_identifiant = 38019112; //variable de test 123456789
$pbx_total = 140; //variable de test 200
// Suppression des points ou virgules dans le montant
$pbx_total = str_replace(",", "", $pbx_total);
$pbx_total = str_replace(".", "", $pbx_total);
$pbx_cmd = 'cmd_test_1'; //variable de test cmd_test1
$pbx_porteur = 'test@test.fr'; //variable de test test@test.fr
// Param�trage de l'url de retour back office site (notification de paiement IPN) :
$pbx_repondre_a = 'https://www.sricab.fr/log';
// Param�trage des donn�es retourn�es via l'IPN :
$pbx_retour = 'Mt:M;Ref:R;Auto:A;Erreur:E';
// Param�trage des urls de redirection navigateur client apr�s paiement :
$pbx_effectue = 'https://www.sricab.fr/';
$pbx_annule = 'https://www.sricab.fr/';
$pbx_refuse = 'https://www.sricab.fr/';
// On r�cup�re la date au format ISO-8601 :
$dateTime = date("c");
$dateTime = $now->format('c');
// Nombre de produit envoy� dans PBX_SHOPPINGCART :
$pbx_nb_produit = 5; //variable de test 5
// Construction de PBX_SHOPPINGCART :
$pbx_shoppingcart = "<?xml version=\"1.0\" encoding=\"utf-8\"?><shoppingcart><total><totalQuantity>" . $pbx_nb_produit . "</totalQuantity></total></shoppingcart>";
// Valeurs envoy�es dans PBX_BILLING :
$pbx_prenom_fact = 'prenom de l utilisateur de facturation'; //variable de test Jean-Marie
$pbx_nom_fact = 'nom de l utilisateur de facturation'; //variable de test Thomson
$pbx_adresse1_fact = 'ligne1 de l adresse de facturation'; //variable de test 1 rue de Paris
$pbx_adresse2_fact = 'ligne2 de l adresse de facturation'; //variable de test <vide>
$pbx_zipcode_fact = 93140; //variable de test 75001
$pbx_city_fact = 'ville de l adresse de facturation'; //variable de test Paris
$pbx_country_fact = 250; //variable de test 250 (pour la France)
// Construction de PBX_BILLING :
$pbx_billing = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Billing><Address><FirstName>" . $pbx_prenom_fact . "</FirstName>" .
"<LastName>" . $pbx_nom_fact . "</LastName><Address1>" . $pbx_adresse1_fact . "</Address1>" .
"<Address2>" . $pbx_adresse2_fact . "</Address2><ZipCode>" . $pbx_zipcode_fact . "</ZipCode>" .
"<City>" . $pbx_city_fact . "</City><CountryCode>" . $pbx_country_fact . "</CountryCode>" .
"</Address></Billing>";
// --------------- S�L�CTION DE L'ENVIRRONEMENT ---------------
// Recette (paiements de test) :
//$urletrans ="https://recette-tpeweb.e-transactions.fr/php/";
// Production (paiements r�els) :
// URL principale :
$urletrans = "https://tpeweb.e-transactions.fr/php/";
// URL secondaire :
// $urletrans ="https://tpeweb1.e-transactions.fr/php/";
// --------------- R�CUP�RATION DE LA CL� HMAC ---------------
// Connection � la base de donn�es
// mysql_connect...
// On r�cup�re la cl� secr�te HMAC (stock�e dans une base de donn�es par exemple) et que l�on renseigne dans la variable $hmackey;
$hmackey = '4CC5271BA9235E6C8A483E55BEB178965050EE16D323126F43A8BA45EB2A7E6C2D8B4F46B2DFEB96CCFF1389D273FD6DDFA5C0B0E030071EDCDE580CE84B42A9';
//$hmackey = '4FA32C1D6333B627F567095D5F3B2AE1804289AAB5EF09AF6EB8DAEBE9C9CFFF5FE10ADA9DBB4A0DDA0B55E5CD1CCF80C2AD867C2E37D19D0618AD5884339E19';
// --------------- TRAITEMENT DES VARIABLES ---------------
// On crée la chaîne à hacher sans URLencodage
$msg = "PBX_SITE=" . $pbx_site .
"&PBX_RANG=" . $pbx_rang .
"&PBX_IDENTIFIANT=" . $pbx_identifiant .
"&PBX_TOTAL=" . $pbx_total .
"&PBX_DEVISE=978" .
"&PBX_CMD=" . $pbx_cmd .
"&PBX_PORTEUR=" . $pbx_porteur .
"&PBX_REPONDRE_A=" . $pbx_repondre_a .
"&PBX_RETOUR=" . $pbx_retour .
"&PBX_EFFECTUE=" . $pbx_effectue .
"&PBX_ANNULE=" . $pbx_annule .
"&PBX_REFUSE=" . $pbx_refuse .
"&PBX_HASH=SHA512" .
"&PBX_TIME=" . $dateTime .
"&PBX_SHOPPINGCART=" . $pbx_shoppingcart .
"&PBX_BILLING=" . $pbx_billing;
// echo $msg;
// Si la clé est en ASCII, On la transforme en binaire
$binKey = pack("H*", $hmackey);
// On calcule l’empreinte (à renseigner dans le paramètre PBX_HMAC) grâce à la fonction hash_hmac et //
// la clé binaire
// On envoi via la variable PBX_HASH l'algorithme de hachage qui a été utilisé (SHA512 dans ce cas)
// Pour afficher la liste des algorithmes disponibles sur votre environnement, décommentez la ligne //
// suivante
// print_r(hash_algos());
$hmac = strtoupper(hash_hmac('sha512', $msg, $binKey));
// La chaîne sera envoyée en majuscule, d'où l'utilisation de strtoupper()
// On crée le formulaire à envoyer
// ATTENTION : l'ordre des champs dans le formulaire est extrêmement important, il doit
// correspondre exactement à l'ordre des champs dans la chaîne hachée.
return $this->render('sri_cab_booking/index.html.twig', [
'pbx_site' => $pbx_site,
'pbx_rang' => $pbx_rang,
'pbx_identifiant' => $pbx_identifiant,
'pbx_total' => $pbx_total,
'pbx_cmd' => $pbx_cmd,
'pbx_porteur' => $pbx_porteur,
'pbx_repondre_a' => $pbx_repondre_a,
'pbx_retour' => $pbx_retour,
'pbx_effectue' => $pbx_effectue,
'pbx_annule' => $pbx_annule,
'pbx_refuse' => $pbx_refuse,
'dateTime' => $dateTime,
'pbx_shoppingcart' => $pbx_shoppingcart,
'pbx_billing' => $pbx_billing,
'hmac' => $hmac,
'urletrans' => $urletrans
]);
}
private function generatePaiement($pbx_cmd,$pbx_porteur,$pbx_total, $pbx_nb_produit,$pbx_prenom_fact,$pbx_nom_fact)
{
$now = new DateTime();
$pbx_site = 3142974; //variable de test 9999999
$pbx_rang = 001; //variable de test 95
$pbx_identifiant = 38019112; //variable de test 123456789
//$pbx_total = 200; //variable de test 200
// Suppression des points ou virgules dans le montant
$pbx_total = str_replace(",", "", $pbx_total);
$pbx_total = str_replace(".", "", $pbx_total);
//$pbx_cmd = 'cmd_test_1'; //variable de test cmd_test1
//$pbx_porteur = 'test@test.fr'; //variable de test test@test.fr
// Param�trage de l'url de retour back office site (notification de paiement IPN) :
$pbx_repondre_a = 'http://www.votre-site.extention/page-de-back-office-site';
// Param�trage des donn�es retourn�es via l'IPN :
$pbx_retour = 'Mt:M;Ref:R;Auto:A;Erreur:E';
// Param�trage des urls de redirection navigateur client apr�s paiement :
$pbx_effectue = 'http://www.votre-site.extention/accepte.php';
$pbx_annule = 'http://www.votre-site.extention/annule.php';
$pbx_refuse = 'http://www.votre-site.extention/refuse.php';
// On r�cup�re la date au format ISO-8601 :
$dateTime = date("c");
$dateTime = $now->format('c');
// Nombre de produit envoy� dans PBX_SHOPPINGCART :
// $pbx_nb_produit = 5; //variable de test 5
// Construction de PBX_SHOPPINGCART :
$pbx_shoppingcart = "<?xml version=\"1.0\" encoding=\"utf-8\"?><shoppingcart><total><totalQuantity>" . $pbx_nb_produit . "</totalQuantity></total></shoppingcart>";
// Valeurs envoy�es dans PBX_BILLING :
//$pbx_prenom_fact = 'prenom de l utilisateur de facturation'; //variable de test Jean-Marie
//$pbx_nom_fact = 'nom de l utilisateur de facturation'; //variable de test Thomson
$pbx_adresse1_fact = ''; //variable de test 1 rue de Paris
$pbx_adresse2_fact = ''; //variable de test <vide>
$pbx_zipcode_fact = ''; //variable de test 75001
$pbx_city_fact = 'Paris'; //variable de test Paris
$pbx_country_fact = 250; //variable de test 250 (pour la France)
// Construction de PBX_BILLING :
$pbx_billing = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Billing><Address><FirstName>" . $pbx_prenom_fact . "</FirstName>" .
"<LastName>" . $pbx_nom_fact . "</LastName><Address1>" . $pbx_adresse1_fact . "</Address1>" .
"<Address2>" . $pbx_adresse2_fact . "</Address2><ZipCode>" . $pbx_zipcode_fact . "</ZipCode>" .
"<City>" . $pbx_city_fact . "</City><CountryCode>" . $pbx_country_fact . "</CountryCode>" .
"</Address></Billing>";
// --------------- S�L�CTION DE L'ENVIRRONEMENT ---------------
// Recette (paiements de test) :
//$urletrans ="https://recette-tpeweb.e-transactions.fr/php/";
// Production (paiements r�els) :
// URL principale :
$urletrans = "https://tpeweb.e-transactions.fr/php/";
$hmackey = '4CC5271BA9235E6C8A483E55BEB178965050EE16D323126F43A8BA45EB2A7E6C2D8B4F46B2DFEB96CCFF1389D273FD6DDFA5C0B0E030071EDCDE580CE84B42A9';
//dev
//$hmackey = '4FA32C1D6333B627F567095D5F3B2AE1804289AAB5EF09AF6EB8DAEBE9C9CFFF5FE10ADA9DBB4A0DDA0B55E5CD1CCF80C2AD867C2E37D19D0618AD5884339E19';
// --------------- TRAITEMENT DES VARIABLES ---------------
// On crée la chaîne à hacher sans URLencodage
$msg = "PBX_SITE=" . $pbx_site .
"&PBX_RANG=" . $pbx_rang .
"&PBX_IDENTIFIANT=" . $pbx_identifiant .
"&PBX_TOTAL=" . $pbx_total .
"&PBX_DEVISE=978" .
"&PBX_CMD=" . $pbx_cmd .
"&PBX_PORTEUR=" . $pbx_porteur .
"&PBX_REPONDRE_A=" . $pbx_repondre_a .
"&PBX_RETOUR=" . $pbx_retour .
"&PBX_EFFECTUE=" . $pbx_effectue .
"&PBX_ANNULE=" . $pbx_annule .
"&PBX_REFUSE=" . $pbx_refuse .
"&PBX_HASH=SHA512" .
"&PBX_TIME=" . $dateTime .
"&PBX_SHOPPINGCART=" . $pbx_shoppingcart .
"&PBX_BILLING=" . $pbx_billing;
// Si la clé est en ASCII, On la transforme en binaire
$binKey = pack("H*", $hmackey);
$hmac = strtoupper(hash_hmac('sha512', $msg, $binKey));
return [
'pbx_site' => $pbx_site,
'pbx_rang' => $pbx_rang,
'pbx_identifiant' => $pbx_identifiant,
'pbx_total' => $pbx_total,
'pbx_cmd' => $pbx_cmd,
'pbx_porteur' => $pbx_porteur,
'pbx_repondre_a' => $pbx_repondre_a,
'pbx_retour' => $pbx_retour,
'pbx_effectue' => $pbx_effectue,
'pbx_annule' => $pbx_annule,
'pbx_refuse' => $pbx_refuse,
'dateTime' => $dateTime,
'pbx_shoppingcart' => $pbx_shoppingcart,
'pbx_billing' => $pbx_billing,
'hmac' => $hmac,
'urletrans' => $urletrans
];
}
}