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 }}€ + + \ No newline at end of file