<?php
namespace App\Front\PaymentBundle\Controller;
use App\BackOffice\ConfigurationBundle\Services\Dalenys\Dalenys;
use Services\PaymentBundle\Manager\PaymentTypesManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends AbstractController
{
const URL_SUFFIX_SUCCESS = 'success';
const URL_SUFFIX_CANCEL = 'cancel';
const URL_SUFFIX_ERROR = 'error';
const URL_OFFER_END = 'offre-end';
private $paymentTypesManager;
private $dalenysService;
public function __construct(PaymentTypesManager $paymentTypesManager, Dalenys $dalenysService)
{
$this->paymentTypesManager = $paymentTypesManager;
$this->dalenysService = $dalenysService;
}
/**
* @Route("/")
*/
public function indexAction()
{
return new Response(
'<html><body></body></html>'
);
}
private function redirectUrl($data, $email, $status, $query=null)
{
$url = $data['site_url'].'/offre-end/'.
$data['campaign_scenario'].'/'.
$data['campaign_path'].'/'.
$email.'/'.$status;
if($query){
$url .= '?'.http_build_query($query);
}
return $url;
}
private function checkDalenysHashFromRequest(Request $request)
{
try {
$identifier = $request->query->get('IDENTIFIER');
$psp = $this->paymentTypesManager->getRepository()->findOneBy(['apiUsernamePrivate' => $identifier]);
if ($psp) {
$valid = $this->dalenysService->checkHash($request->query->all(), $psp);
if ($valid === true) {
return true;
}
}
return false;
}catch (\Exception $e){
return false;
}
}
// ===========
// DALENYS 3DS
// ===========
// The Endpoints below are currently replaced by the DigiPremium Relay Server
// They are still available in case of outages.
/**
* Replaced by https://www.dp-api-b1.com/ThreeDSecure/success_dalenys
*
* @Route("/3ds/dalenys/success")
*/
public function dalenys3DSSuccessAction(Request $request)
{
// todo: check/validate hash
$extradata = $request->query->get('EXTRADATA');
$extradata = unserialize($extradata);
$query = [
'orderid' => $request->query->get('ORDERID'),
'transactionid' => $request->query->get('TRANSACTIONID'),
];
$validHash = $this->checkDalenysHashFromRequest($request);
$execcode = $request->query->get('EXECCODE');
if($validHash && is_numeric($execcode) && $execcode < 1000 ){
$url = $this->redirectUrl($extradata, $request->query->get('CLIENTEMAIL'), self::URL_SUFFIX_SUCCESS, $query);
}else{
// $query['message'] = $request->query->get('MESSAGE', $execcode);
$url = $this->redirectUrl($extradata, $request->query->get('CLIENTEMAIL'), self::URL_SUFFIX_ERROR, $query);
}
return $this->redirect($url);
}
/**
*
* Replaced by https://www.dp-api-b1.com/ThreeDSecure/cancel_dalenys
*
* @Route("/3ds/dalenys/cancel")
*
* transaction was canceled by user intention,
* e.g. has been clicked "Give up and cancel my payment"
*/
public function dalenys3DSCancelAction(Request $request)
{
$extradata = $request->query->get('EXTRADATA');
$extradata = unserialize($extradata);
$query = [
'orderid' => $request->query->get('ORDERID'),
'transactionid' => $request->query->get('TRANSACTIONID'),
];
$url = $this->redirectUrl($extradata, $request->query->get('CLIENTEMAIL'), self::URL_SUFFIX_CANCEL, $query);
return $this->redirect($url);
}
}