<?php
namespace App\Service\Payment\HiPay\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use App\Service\PrintLMDVInterface;
use App\Service\Payment\PaymentEventInterface;
use App\Service\Payment\HiPay\HiPayManager;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Address;
use App\Service\Payment\HiPay\Event\HiPayCallbackEvent;
use Symfony\Contracts\Translation\TranslatorInterface;
class HiPayCallbackSubscriber implements EventSubscriberInterface {
/**
* @var \Symfony\Component\Mailer\MailerInterface
*/
protected $mailer;
/**
* @var string
*/
protected $fromEmail;
/**
* @var \Symfony\Contracts\Translation\TranslatorInterface
*/
protected $translator;
/**
* @var \App\Service\PrintLMDVInterface
*/
protected $print;
public function __construct(MailerInterface $mailer, string $fromEmail, TranslatorInterface $translator, PrintLMDVInterface $print) {
$this->mailer = $mailer;
$this->fromEmail = $fromEmail;
$this->translator = $translator;
$this->print = $print;
}
public static function getSubscribedEvents()
{
return [
HiPayCallbackEvent::class => 'onHostedPaymentCallback'
];
}
public function onHostedPaymentCallback(PaymentEventInterface $event) {
//XXX: It has been decided to not send mails using Symfony, so we stop here.
return;
switch($event->getType()) {
case HiPayManager::HIPAY_CALLBACK_ACCEPT:
$this->sendEmail($event, 'payment/emails/success.html.twig');
break;
default:
$this->sendEmail($event, 'payment/emails/error.html.twig');
break;
}
}
protected function sendEmail(PaymentEventInterface $event, $template) {
$voyage = $event->getVoyage();
$to = $event->getTransaction()['email'];
$subject = $this->translator->trans('payment.email.subject');
$transaction = $event->getTransaction();
$transaction['amount'] = number_format($transaction['amount'], 2, ',', ' ');
$transaction['amount'] = str_replace(',00', '', $transaction['amount']);
$transaction['date'] = date('d/m/Y H:i:s', $transaction['date']);
$email = (new TemplatedEmail())
->from(Address::create($this->fromEmail))
->to(new Address($to))
->subject($subject)
// path of the Twig template to render
->htmlTemplate($template)
// pass variables (name => value) to the template
->context([
'nom' => $voyage->getEtape2()->getNom(),
'prenom' => $voyage->getEtape2()->getPrenom(),
'transaction'=> $transaction,
]);
$pdfContent = '';
try {
$pdfContent = $this->print->print($voyage);
}
catch(\Exception $e) {
}
if($pdfContent) {
$email->attach($pdfContent, 'contrat_de_vente.pdf', 'application/pdf');
}
try {
$this->mailer->send($email);
}
catch (\Exception $e) {
throw $e;
}
}
}