diff --git a/composer.json b/composer.json
index 5c6700a..776a62b 100644
--- a/composer.json
+++ b/composer.json
@@ -7,6 +7,7 @@
"php": ">=8.2",
"ext-ctype": "*",
"ext-iconv": "*",
+ "chillerlan/php-qrcode": "^5.0",
"doctrine/annotations": "^2.0",
"doctrine/dbal": "^3",
"doctrine/doctrine-bundle": "^2.13",
diff --git a/composer.lock b/composer.lock
index e377fcd..4ba9056 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,167 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "6e7803d436b49242a4a3816fdc776d3a",
+ "content-hash": "26b10019eec6bd118285cb25e8daf878",
"packages": [
+ {
+ "name": "chillerlan/php-qrcode",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "42e215640e9ebdd857570c9e4e52245d1ee51de2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/42e215640e9ebdd857570c9e4e52245d1ee51de2",
+ "reference": "42e215640e9ebdd857570c9e4e52245d1ee51de2",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "chillerlan/php-authenticator": "^4.3.1 || ^5.2.1",
+ "ext-fileinfo": "*",
+ "phan/phan": "^5.4.5",
+ "phpcompatibility/php-compatibility": "10.x-dev",
+ "phpmd/phpmd": "^2.15",
+ "phpunit/phpunit": "^9.6",
+ "setasign/fpdf": "^1.8.2",
+ "slevomat/coding-standard": "^8.15",
+ "squizlabs/php_codesniffer": "^3.11"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output.",
+ "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT",
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase/qrcode-generator"
+ },
+ {
+ "name": "ZXing Authors",
+ "homepage": "https://github.com/zxing/zxing"
+ },
+ {
+ "name": "Ashot Khanamiryan",
+ "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qr-reader",
+ "qrcode",
+ "qrcode-generator",
+ "qrcode-reader"
+ ],
+ "support": {
+ "docs": "https://php-qrcode.readthedocs.io",
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode"
+ },
+ "funding": [
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "Ko-Fi"
+ }
+ ],
+ "time": "2024-11-21T16:12:34+00:00"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "phpmd/phpmd": "^2.15",
+ "phpstan/phpstan": "^1.11",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "squizlabs/php_codesniffer": "^3.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container.",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "Settings",
+ "configuration",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2024-07-16T11:13:48+00:00"
+ },
{
"name": "composer/semver",
"version": "3.4.3",
diff --git a/src/Controller/SuccessController.php b/src/Controller/SuccessController.php
index 9c49189..ebb7804 100644
--- a/src/Controller/SuccessController.php
+++ b/src/Controller/SuccessController.php
@@ -2,6 +2,7 @@
namespace App\Controller;
+use App\Service\TicketService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@@ -10,8 +11,10 @@ use Symfony\Component\Routing\Attribute\Route;
class SuccessController extends AbstractController
{
#[Route(path: '/success', name: 'app_success_page', methods: Request::METHOD_GET)]
- public function __invoke(): Response
+ public function __invoke(TicketService $service, Request $request): Response
{
+ $service->completePayment((string)$request->query->get('session_id'));
+
return $this->render('ticket/success.html.twig');
}
}
\ No newline at end of file
diff --git a/src/Service/TicketEmailService.php b/src/Service/TicketEmailService.php
index c1f32e9..ac54110 100644
--- a/src/Service/TicketEmailService.php
+++ b/src/Service/TicketEmailService.php
@@ -3,18 +3,22 @@ declare(strict_types=1);
namespace App\Service;
+use App\Controller\Admin\CustomerCrudController;
use App\Entity\Payment;
+use chillerlan\QRCode\QRCode;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class TicketEmailService
{
public function __construct(
private readonly MailerInterface $mailer,
#[Autowire(env: 'SENDER_MAIL')]
- private readonly string $senderMail
+ private readonly string $senderMail,
+ private readonly UrlGeneratorInterface $urlGenerator,
) {
}
@@ -25,8 +29,20 @@ class TicketEmailService
->subject('Abiball Ticket')
->from(new Address($this->senderMail, 'Noreply'))
->to($payment->getCustomer()?->getEmail())
- ->context(['payment' => $payment]);
+ ->context([
+ 'payment' => $payment,
+ 'qr' => (new QRCode())->render($this->generateUrl($payment))
+ ]);
$this->mailer->send($mail);
}
+
+ private function generateUrl(Payment $payment): string
+ {
+ return $this->urlGenerator->generate('admin', [
+ 'crudAction' => 'detail',
+ 'crudControllerFqcn' => CustomerCrudController::class,
+ 'entityId' => $payment->getCustomer()?->getId()
+ ], UrlGeneratorInterface::ABSOLUTE_URL);
+ }
}
\ No newline at end of file
diff --git a/src/Service/TicketService.php b/src/Service/TicketService.php
index 5f39dcb..3fe3a66 100644
--- a/src/Service/TicketService.php
+++ b/src/Service/TicketService.php
@@ -45,7 +45,7 @@ class TicketService
$payment->setCompleted(true);
$this->em->flush();
-dd();
+
$this->emailService->sendSuccessEmail($payment);
return true;
diff --git a/templates/email/order.html.twig b/templates/email/order.html.twig
index e6f905a..5bfcafd 100644
--- a/templates/email/order.html.twig
+++ b/templates/email/order.html.twig
@@ -24,5 +24,7 @@ placeholder text
{% endfor %}
Gesamtpreis: {{ payment.total }}€
+
+