cmiecom/cmi-pay-bundle

CMI gateway payment library

Installs: 378

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 0

Forks: 4

Open Issues: 0

Type:symfony-bundle

v1.0 2019-04-10 15:09 UTC

This package is auto-updated.

Last update: 2024-04-29 04:09:17 UTC


README

Straight forward integration of CMI payment module into Symfony applications.

  • How CMI payment process works?*

    A client fills the form on your side and then submits the form. Then the client will be redirected to CMI payment page to complete the payment. Once the payment has been completed the client has the option to return back to your website and at the same time a callback is send from Cmi to your callback url.

Setup

This bundle allows you to add cmi payment process with minimum changes to your code. These instructions will also guide you through the installation of that bundle.

Installation

Install with composer:

composer require cmiecom/cmi-pay-bundle

Include routes.xml in your routing file :

// config/routes.yaml

_cmi_pay:
    resource: '@CmiPayBundle/Resources/config/routes.xml'

Usage

Rendering the form and redirect client to CMI page payment

The default route configured in:

// src/Resources/config/routes.xml
	<route id="cmi_pay_request" controller="cmi.pay.controller::requestPay" path="/cmi/requestpayment" />

And a controller action to render the form:

namespace CmiPayBundle\Controller;

......

class CmiPayController extends AbstractController
{
    public function requestPay(Request $request)
    {
        $params = new CmiPay();
        // Setup new payment parameters
        $okUrl = $this->generateUrl('cmi_pay_okFail', [], UrlGeneratorInterface::ABSOLUTE_URL);
        $shopUrl = $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
        $failUrl = $this->generateUrl('cmi_pay_okFail', [], UrlGeneratorInterface::ABSOLUTE_URL);
        $callbackUrl = $this->generateUrl('cmi_pay_callback', [], UrlGeneratorInterface::ABSOLUTE_URL);
        $rnd = microtime();
	//Sample Order Data:
        $params->setGatewayurl('https://....')// Provided by CMI
            ->setclientid('600000000')// Provided by CMI
            ->setTel('05000000')
            ->setEmail('email@domaine.ma')
            ->setBillToName('BillToName')
            ->setBillToCompany('BillToCompany')
            ->setBillToStreet1('BillToStreet1')
            ->setBillToStateProv('BillToStateProv')
            ->setBillToPostalCode('BillToPostalCode')
	//.................
        ;
	//.................        
    }
}

The twig template:

// src/Resources/views/payrequest.html.twig
{% extends 'base.html.twig' %}

{% block title %}Hello {% endblock %}

{% block body %}

    <form name="payForm"  id="payForm" method="post" action="{{url}}">
        {% for name, value in data %}
            <input type="hidden" name="{{ name }}" value="{{ value }}" />
        {% endfor %}
    </form>

{% endblock %}
............

Callback

The default route configured in:

// src/Resources/config/routes.xml
	<route id="cmi_pay_callback" controller="cmi.pay.controller::callback" path="/cmi/callback" />

And a controller action : Callback:

namespace CmiPayBundle\Controller;

......

class CmiPayController extends AbstractController
{
..........
    public function callback(Request $request)
    {
        .......
    }
}

The twig template:

// src/Resources/views/callback.html.twig
{{response}} 

OK / FAIL URL

The default route configured in:

// src/Resources/config/routes.xml
	<route id="cmi_pay_okFail" controller="cmi.pay.controller::okFail" path="/cmi/okFail" />

And a controller action : okFail:

namespace CmiPayBundle\Controller;

......

class CmiPayController extends AbstractController
{
..........
    public function okFail(Request $request)
    {
        ........
    }
}

The twig template:

// src/Resources/views/okFail.html.twig
{{response}}

Calculate Hash value

Controller action : hashValue:

namespace CmiPayBundle\Controller;

......

class CmiPayController extends AbstractController
{
..........
   public function hashValue($data)
    {
        $params = new CmiPay();
        $params->setSecretKey('TEST1234');//Secret key generated from CMI Backoffice
        ..........        
        return $hash;
    }
}