All Projects → lexik → Lexikpayboxbundle

lexik / Lexikpayboxbundle

Licence: mit
LexikPayboxBundle eases the implementation of the Paybox payment system

Projects that are alternatives of or similar to Lexikpayboxbundle

Webfactoryicutranslationbundle
Enables ICU message formatting for translations in Symfony applications.
Stars: ✭ 27 (-35.71%)
Mutual labels:  bundle, symfony, symfony-bundle
Knpgaufrettebundle
Easily use Gaufrette in your Symfony projects.
Stars: ✭ 646 (+1438.1%)
Mutual labels:  bundle, symfony, symfony-bundle
Phone Number Bundle
Integrates libphonenumber into your Symfony2-Symfony4 application
Stars: ✭ 446 (+961.9%)
Mutual labels:  bundle, symfony, symfony-bundle
Jwtrefreshtokenbundle
Implements a Refresh Token system over Json Web Tokens in Symfony
Stars: ✭ 425 (+911.9%)
Mutual labels:  bundle, symfony, symfony-bundle
Entityauditbundle
Audit for Doctrine Entities
Stars: ✭ 546 (+1200%)
Mutual labels:  bundle, symfony, symfony-bundle
Craueformflowbundle
Multi-step forms for your Symfony project.
Stars: ✭ 654 (+1457.14%)
Mutual labels:  bundle, symfony, symfony-bundle
Easy Deploy Bundle
The easiest way to deploy your Symfony applications
Stars: ✭ 446 (+961.9%)
Mutual labels:  bundle, symfony, symfony-bundle
Doctrinebundle
Symfony Bundle for Doctrine ORM and DBAL
Stars: ✭ 4,225 (+9959.52%)
Mutual labels:  bundle, symfony, symfony-bundle
Sentry Symfony
The official Symfony SDK for Sentry (sentry.io)
Stars: ✭ 515 (+1126.19%)
Mutual labels:  bundle, symfony, symfony-bundle
Sensiodistributionbundle
Base bundle for Symfony Distributions
Stars: ✭ 501 (+1092.86%)
Mutual labels:  bundle, symfony, symfony-bundle
Symfony
The Symfony PHP framework
Stars: ✭ 26,220 (+62328.57%)
Mutual labels:  bundle, symfony, symfony-bundle
Sensiogeneratorbundle
Generates Symfony bundles, entities, forms, CRUD, and more...
Stars: ✭ 634 (+1409.52%)
Mutual labels:  bundle, symfony, symfony-bundle
Sonatamediabundle
Symfony SonataMediaBundle
Stars: ✭ 415 (+888.1%)
Mutual labels:  bundle, symfony, symfony-bundle
Ismaambrosigeneratorbundle
Generates Symfony2 documents, forms and CRUD for MongoDB documents
Stars: ✭ 27 (-35.71%)
Mutual labels:  bundle, symfony, symfony-bundle
Doctrineenumbundle
📦 Provides support of ENUM type for Doctrine in Symfony applications.
Stars: ✭ 410 (+876.19%)
Mutual labels:  bundle, symfony, symfony-bundle
Liipmonitorbundle
Integrates the LiipMonitor library into Symfony
Stars: ✭ 445 (+959.52%)
Mutual labels:  bundle, symfony, symfony-bundle
Exporter
Lightweight Exporter library
Stars: ✭ 384 (+814.29%)
Mutual labels:  bundle, symfony, symfony-bundle
Sonatadoctrineormadminbundle
Integrate Doctrine ORM into the SonataAdminBundle
Stars: ✭ 400 (+852.38%)
Mutual labels:  bundle, symfony, symfony-bundle
Foscommentbundle
Threaded comments for Symfony
Stars: ✭ 451 (+973.81%)
Mutual labels:  bundle, symfony, symfony-bundle
Liipfunctionaltestbundle
Some helper classes for writing functional tests in Symfony
Stars: ✭ 604 (+1338.1%)
Mutual labels:  bundle, symfony, symfony-bundle

LexikPayboxBundle

Build Status Latest Stable Version SensioLabsInsight

Important!

This bundle is partially maintained. No new features will be added but some PR will be merged for compatibility or security.

LexikPayboxBundle makes the use of Paybox payment system easier by doing all the boring things for you.

LexikPayboxBundle silently does :

  • hmac hash calculation of parameters during request.
  • server testing before request to be sure it is up.
  • signature verification with openssl on ipn response.
  • triggers an event on response.

You only need to provide parameters of your transaction, customize the response page and wait for the event triggered on ipn response.

Requirements

  • PECL hash >= 1.1
  • openssl enabled

Installation

Installation with composer :

composer require lexik/paybox-bundle

Add this bundle to your app/AppKernel.php :

public function registerBundles()
{
    return array(
        // ...
        new Lexik\Bundle\PayboxBundle\LexikPayboxBundle(),
        // ...
    );
}

Configuration

Your personnal account informations must be set in your config.yml

# Lexik Paybox Bundle
lexik_paybox:
    parameters:
        production: false        # Switches between Paybox test and production servers (preprod-tpe <> tpe)
        site:        '9999999'   # Site number provided by the bank
        rank:        '99'        # Rank number provided by the bank
        login:       '999999999' # Customer's login provided by Paybox
        hmac:
            key: '01234...BCDEF' # Key used to compute the hmac hash, provided by Paybox

Additional configuration:

lexik_paybox:
    parameters:
        currencies:  # Optionnal parameters, this is the default value
            - '036'  # AUD
            - '124'  # CAD
            - '756'  # CHF
            - '826'  # GBP
            - '840'  # USD
            - '978'  # EUR
        hmac:
            algorithm:      sha512 # signature algorithm
            signature_name: Sign   # customize the signature parameter name

The routing collection must be set in your routing.yml

# Lexik Paybox Bundle
lexik_paybox:
    resource: '@LexikPayboxBundle/Resources/config/routing.yml'

Usage of Paybox System

The bundle includes a sample controller SampleController.php with two actions.

...
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

/**
 * Sample action to call a payment.
 * It create the form to submit with all parameters.
 */
public function callAction()
{
    $paybox = $this->get('lexik_paybox.request_handler');
    $paybox->setParameters(array(
        'PBX_CMD'          => 'CMD'.time(),
        'PBX_DEVISE'       => '978',
        'PBX_PORTEUR'      => '[email protected]',
        'PBX_RETOUR'       => 'Mt:M;Ref:R;Auto:A;Erreur:E',
        'PBX_TOTAL'        => '1000',
        'PBX_TYPEPAIEMENT' => 'CARTE',
        'PBX_TYPECARTE'    => 'CB',
        'PBX_EFFECTUE'     => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'success'), UrlGeneratorInterface::ABSOLUTE_URL),
        'PBX_REFUSE'       => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'denied'), UrlGeneratorInterface::ABSOLUTE_URL),
        'PBX_ANNULE'       => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'canceled'), UrlGeneratorInterface::ABSOLUTE_URL),
        'PBX_RUF1'         => 'POST',
        'PBX_REPONDRE_A'   => $this->generateUrl('lexik_paybox_ipn', array('time' => time()), UrlGeneratorInterface::ABSOLUTE_URL),
    ));

    return $this->render(
        'LexikPayboxBundle:Sample:index.html.twig',
        array(
            'url'  => $paybox->getUrl(),
            'form' => $paybox->getForm()->createView(),
        )
    );
}
...
/**
 * Sample action of a confirmation payment page on witch the user is sent
 * after he seizes his payment informations on the Paybox's platform.
 * This action must only containts presentation logic.
 */
public function responseAction($status)
{
    return $this->render(
        'LexikPayboxBundle:Sample:return.html.twig',
        array(
            'status'     => $status,
            'parameters' => $this->getRequest()->query,
        )
    );
}
...

The getUrl() method silently does a server check and throws an exception if the destination server does not respond.

The payment confirmation in your business logic must be done when the instant payment notification (IPN) occurs. The plugin contains a controller with an action that manages this IPN and triggers an event. The event contains all data transmetted during the request and a boolean that tells if signature verification was successful.

The bundle contains a listener example that simply create a file on each ipn call.

namespace Lexik\Bundle\PayboxBundle\Listener;

use Symfony\Component\Filesystem\Filesystem;

use Lexik\Bundle\PayboxBundle\Event\PayboxResponseEvent;

/**
 * Simple listener that create a file for each ipn call.
 */
class PayboxResponseListener
{
    private $rootDir;

    private $filesystem;

    /**
     * Constructor.
     *
     * @param string     $rootDir
     * @param Filesystem $filesystem
     */
    public function __construct($rootDir, Filesystem $filesystem)
    {
        $this->rootDir = $rootDir;
        $this->filesystem = $filesystem;
    }

    /**
     * Creates a txt file containing all parameters for each IPN.
     *
     * @param  PayboxResponseEvent $event
     */
    public function onPayboxIpnResponse(PayboxResponseEvent $event)
    {
        $path = $this->rootDir . '/../data/' . date('Y\/m\/d\/');
        $this->filesystem->mkdir($path);

        $content = sprintf("Signature verification : %s\n", $event->isVerified() ? 'OK' : 'KO');
        foreach ($event->getData() as $key => $value) {
            $content .= sprintf("%s:%s\n", $key, $value);
        }

        file_put_contents($path . time() . '.txt', $content);
    }
}

To create your own listener, you just have to make it wait for the "paybox.ipn_response" event. For example the listener of the bundle:

parameters:
    lexik_paybox.sample_response_listener.class: 'Lexik\Bundle\PayboxBundle\Listener\SampleIpnListener'

services:
    ...
    lexik_paybox.sample_response_listener:
        class: %lexik_paybox.sample_response_listener.class%
        arguments: [ %kernel.root_dir%, @filesystem ]
        tags:
            - { name: kernel.event_listener, event: paybox.ipn_response, method: onPayboxIpnResponse }

Resources

All transactions parameters are available in the official documentation.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].