<?php
namespace App\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\Orders;
use App\Repository\OrderRepository;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class PaymentSubscriber implements EventSubscriberInterface
{
private $client;
private $logger;
private $entityManager;
public function __construct(HttpClientInterface $client,LoggerInterface $logger,EntityManagerInterface $entityManager)
{
$this->client = $client;
$this->logger = $logger;
$this->entityManager = $entityManager;
}
/**
*
* @return array The event names to listen to
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['payment', EventPriorities::POST_WRITE],
];
}
public function payment(ViewEvent $event)
{
$oder = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$oder instanceof Orders || Request::METHOD_POST !== $method) {
return;
}
$date = $oder->getOrderDate()->format('YmdHis');
$this->logger->info("========");
$this->logger->info($oder->getPaymentMethode()->getName());
$this->logger->info("========");
if($oder->getPaymentMethode()->getName() === 'Mobile money'){
}else{
//$orderId = (string)$oder->getId();
return;
$oder->setTransactionId($this->generateNewTransactionId());
$this->logger->info("========");
$this->logger->info($oder->getId());
$this->logger->info("========");
$formParameters = $this->createForm($oder->getAmount(),$date,$oder->getTransactionId(),$oder->getId());
try {
$response = $this->client->request(
'POST',
'https://e-paiement-securite-bici.com/vads-payment/entry.silentInit.a', [
'body' => $formParameters,
]
);
} catch (TransportExceptionInterface $e) {
throw new \RuntimeException($e);
}
if($response->getStatusCode() === 200){
$redirectionUrl = $response->toArray()['redirect_url'];
$oder->redirect_url = $redirectionUrl;
$oder->setSignature($formParameters['signature']);
}
$this->entityManager->persist($oder);
$this->entityManager->flush();
}
}
public function createForm(string $amount,$date,$trans_id, $idOrder){
$formParameters = [];
$merchantSiteId = '92887726';
$usedMerchantKey = 'uZEeoLtYDxhhqz89'; //'oRk0BU4hfw5Lr36x';
$formParameters['vads_action_mode'] ='INTERACTIVE';
$formParameters['vads_amount'] =$amount;
$formParameters['vads_ctx_mode'] ='PRODUCTION';
$formParameters['vads_currency'] ='952';
$formParameters['vads_page_action'] ='PAYMENT';
$formParameters['vads_payment_config'] ='SINGLE';
//$formParameters['vads_order_id'] ="{$idOrder}";
$formParameters['vads_site_id'] =$merchantSiteId;
$formParameters['vads_theme_config'] ='SIMPLIFIED_DISPLAY=true';
$formParameters['vads_trans_date'] = $date;
$formParameters['vads_trans_id'] = $trans_id;
//$formParameters['vads_url_cancel'] = "http://webview_" . $merchantSiteId . ".cancel";
//$formParameters['vads_url_error'] = "http://webview_" . $merchantSiteId . ".error";
//$formParameters['vads_url_refused'] = "http://webview_" . $merchantSiteId . ".refused";
//$formParameters['vads_url_return'] = "http://webview_" . $merchantSiteId . ".return";
//$formParameters['vads_url_success'] = "http://webview_" . $merchantSiteId . ".success";
$formParameters['vads_version'] = "V2";
//Create the string to sign
$concatenateMapParams = "";
foreach ($formParameters as $value ){
$concatenateMapParams .=$value."+";
}
$concatenateMapParams .=$usedMerchantKey;
$formParameters['signature'] = sha1($concatenateMapParams);
return $formParameters;
}
public function generateNewTransactionId(){
$count = random_int(500000, 999998);
return $count;
}
}