1. Go to this page and download the library: Download otobul/epaybg-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
otobul / epaybg-bundle example snippets
// src/Controller/PaymentController.php
namespace App\Controller;
use Otobul\EpaybgBundle\Model\EpayPayloadData;
use Otobul\EpaybgBundle\Service\EpayManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class PaymentController extends AbstractController
{
public function generateEasypayCode(EpayManagerInterface $epayManager)
{
$invoice = 1; // Generate your unique invoice number
$amount = 100; // Total sum for payment
$easypayCode = $epayManager->getEasypayCode(
new EpayPayloadData($invoice, $amount)
);
return $this->render("payment/easypay_code.html.twig", [
'invoice' => $invoice,
'easypayCode' => $easypayCode,
]);
}
}
// src/Controller/PaymentController.php
namespace App\Controller;
use Otobul\EpaybgBundle\Model\EpayPayloadData;
use Otobul\EpaybgBundle\Service\EpayManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\RouterInterface;
class PaymentController extends AbstractController
{
public function generateEasypayCode(EpayManagerInterface $epayManager, RouterInterface $router)
{
$payload = EpayPayloadData::createFromArray([
'invoice' => 1,
'amount' => 100,
]);
$returnUrl = $this->router->generate('your_payment_success_route');
$cancelUrl = $this->router->generate('your_payment_cancel_route');
$form = $epayManager->createWebLoginForm($payload, $returnUrl, $cancelUrl);
return $this->render("payment/easypay_code.html.twig", [
'form' => $form->createView(),
]);
}
}
// src/EventSubscriber/EpayInvoiceNotificationSubscriber.php
namespace App\EventSubscriber;
use Doctrine\ORM\EntityManagerInterface;
use Otobul\EpaybgBundle\Event\OtobulEpaybgEvents;
use Otobul\EpaybgBundle\Event\InvoiceNotificationReceivedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EpayInvoiceNotificationSubscriber implements EventSubscriberInterface
{
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents()
{
return [
OtobulEpaybgEvents::INVOICE_NOTIFICATION_RECEIVED => 'epayInvoiceNotification',
];
}
public function epayInvoiceNotification(InvoiceNotificationReceivedEvent $event)
{
// Example logic to find some entity related to this invoice.
$order = $this->entityManager->getRepository(Order::class)->find($event->getInvoice());
if (!$order) {
// If invoice cannot be found. Sending back NO, so ePay.bg system stops sending notification about the invoice.
$event->setResponseStatusNo();
return;
}
// process order state below
if($event->isPaid()) {
// process PAID order here
}else {
// process DENIED or EXPIRED order here
}
// Sending back OK, so ePay.bg system stops sending notification about the invoice.
$event->setResponseStatusOk();
}
}
// src/EventSubscriber/EpayInvoiceNotificationSubscriber.php
namespace App\EventSubscriber;
use Otobul\EpaybgBundle\Event\EasypayCodeCreatedEvent;
use Otobul\EpaybgBundle\Event\NotificationErrorEvent;
use Otobul\EpaybgBundle\Event\NotificationReceivedEvent;
use Otobul\EpaybgBundle\Event\NotificationResponseEvent;
use Otobul\EpaybgBundle\Event\OtobulEpaybgEvents;
use Otobul\EpaybgBundle\Event\InvoiceNotificationReceivedEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EpayInvoiceNotificationSubscriber implements EventSubscriberInterface
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public static function getSubscribedEvents()
{
return [
OtobulEpaybgEvents::NOTIFICATION_RECEIVED => 'epayNotificationReceived',
OtobulEpaybgEvents::NOTIFICATION_ERROR => 'epayNotificationError',
OtobulEpaybgEvents::NOTIFICATION_RESPONSE => 'epayNotificationResponse',
OtobulEpaybgEvents::INVOICE_NOTIFICATION_RECEIVED => 'epayInvoiceNotification',
OtobulEpaybgEvents::EASYPAY_CODE_CREATED => 'epayEasypayCodeCreated',
];
}
public function epayNotificationReceived(NotificationReceivedEvent $event)
{
$this->logger->info('epayNotificationReceived: '. $event->getContent());
}
public function epayNotificationError(NotificationErrorEvent $event)
{
$this->logger->info('epayNotificationError: '. $event->getMessage());
}
public function epayNotificationResponse(NotificationResponseEvent $event)
{
$this->logger->info('epayNotificationResponse: '. $event->getContent());
}
public function epayEasypayCodeCreated(EasypayCodeCreatedEvent $event)
{
$this->logger->info('epayEasypayCodeCreated: code'. $event->getCode());
$this->logger->info('epayEasypayCodeCreated: paymentData:'. print_r($event->getPaymentData()->toArray(), 1));
}
public function epayInvoiceNotification(InvoiceNotificationReceivedEvent $event)
{
$this->logger->info('epayInvoiceNotification: '. $event->getInvoice() .' isPaid: '. $event->isPaid());
// Event object has access to invoice notification details
/**
* Invoice number
* @var int $invoice
*/
$invoice = $event->getInvoice();
/**
* Invoice status, can be PAID|DENIED|EXPIRED
* @var string $status
*/
$status = $event->getStatus();
/**
* Payment date
* @var \DateTime $payDate
*/
$payDate = $event->getPayDate();
/**
* Transaction number
* @var int $stan
*/
$stan = $event->getStan();
/**
* Authorization code
* @var string $bcode
*/
$bcode = $event->getBcode();
/*
// Your logic to find some entity related to this invoice. Example:
$order = $this->orderRepository->find($invoice);
if (!$order) {
// If invoice cannot be found. Sending back NO, so ePay.bg system stops sending notification about the invoice.
$event->setResponseStatusNo();
return;
}
process order state below
*/
if($event->isPaid()) {
// process PAID order here
}else {
// process DENIED or EXPIRED order here
}
// Sending back OK, so ePay.bg system stops sending notification about the invoice.
$event->setResponseStatusOk();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.