1. Go to this page and download the library: Download c975l/payment-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/ */
c975l / payment-bundle example snippets
//YourProductServiceInterface file
namespace App\Service;
use c975L\PaymentBundle\Entity\Payment;
interface YourProductServiceInterface
{
public function validate(Payment $payment);
}
//Your ProductService file
namespace App\Service;
use Doctrine\ORM\EntityManagerInterface;
use App\Service\YourProductServiceInterface;
class YourProductService implements YourProductServiceInterface
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function validate(Payment $payment)
{
/**
* For example if `$payment->getAction()` contains the result of "json_encode(array('addCredits' => 10));"
*/
$action = (array) json_decode($payment->getAction());
if (array_key_exists('addCredits', $action)) {
//Gets the user
$user = $this->em->getRepository('c975LUserBundle:User')
->findOneById($payment->getUserId());
//Adds credits to user
$user->setCredits($user->getCredits() + $action['addCredits']);
$this->em->persist($user);
//Set payment as finished
$payment->setFinished(true);
$this->em->persist($payment);
$this->em->flush();
return true;
}
return false;
}
}
//YourPaymentServiceInterface file
namespace App\Service;
interface YourPaymentServiceInterface
{
public function payment($yourNeededData);
}
//Your PaymentService file
namespace App\Service;
use App\Service\YourPaymentServiceInterface;
use c975L\PaymentBundle\Service\PaymentServiceInterface;
class YourPaymentService implements YourPaymentServiceInterface
{
public function payment(PaymentServiceInterface $paymentService, $yourNeededData)
{
/**
* Except amount and currency all the fields are nullable
* You may use the data define in `$yourNeededData`
*/
$paymentData = array(
'amount' => YOUR_AMOUNT, //Must be an integer in cents
'currency' => YOUR_CURRENCY, //Coded on 3 letters or use "$paymentService->getParameter('c975LPayment.defaultCurrency')" to get your default currency
'action' => YOUR_ACTION, //Store the action to achieve after the payment. Mainly used by `returnRoute`. As a string, you can store plain text, json, etc.
'description' => YOUR_DESCRIPTION,
'userId' => USER_ID,
'userIp' => $request->getClientIp(),
'live' => false|true, //If your product is live or not, different from live config value
'returnRoute' => 'THE_NAME_OF_YOUR_RETURN_ROUTE', //This Route is defined in your Controller
'vat' => 'YOUR_VAT_RATE', //Rate value without % i.e. 5.5 for 5.5%, or 20 for 20%
);
$paymentService->create($paymentData);
}
}
//Your Controller file
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use c975L\PaymentBundle\Entity\Payment;
use c975L\PaymentBundle\Service\PaymentServiceInterface;
use App\Service\YourPaymentServiceInterface;
class PaymentController extends AbstractController
{
/**
* Route used to proceed to payment
* @return Response
*
* @Route("proceed-to-payment",
* name="proceed_to_payment")
*/
public function proceedToPayment(YourPaymentServiceInterface $yourPaymentService)
{
//Creates the Payment
$yourPaymentService->payment();
//Redirects to the payment form
return $this->redirectToRoute('payment_form');
}
/**
* Return Route used after payment
* @return Redirect
* @throws NotFoundHttpException
*
* @Route("/payment-done/{orderId}",
* name="payment_done",
* methods={"HEAD", "GET"})
*/
public function paymentDone(YourProductServiceInterface $yourProductService, PaymentServiceInterface $paymentService, Payment $payment)
{
//Validates the Payment
$validation = $yourProductService->validate($payment);
//Redirects or renders
if ($validation) {
return $this->redirectToRoute('YOUR_ROUTE');
}
//Payment has been done but product was not validated
$paymentService->error($payment);
return $this->redirectToRoute('payment_display', array('orderId' => $payment->getOrderId()));
}
}