lexik / LexikPayboxBundle

LexikPayboxBundle eases the implementation of the Paybox payment system
MIT License
40 stars 47 forks source link

Multiple payments not implemented correctly #23

Closed acidjames closed 10 years ago

acidjames commented 10 years ago

Here is the original /Paybox/System/Base/ParameterResolver.php

<?php

namespace Lexik\Bundle\PayboxBundle\Paybox\System\Base;

use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\Options;

/**
* Paybox\System\ParameterResolver class.
*
* @author Olivier Maisonneuve <o.maisonneuve@lexik.fr>
*/
class ParameterResolver
{
    /**
* @var array
*/
    private $knownParameters;

    /**
* @var array
*/
    private $requiredParameters;

    /**
* @var OptionsResolver
*/
    private $resolver;

    /**
* @var array
*/
    private $currencies;

    /**
* Constructor initialize all available parameters.
*
* @param array $currencies
*/
    public function __construct(array $currencies)
    {
        $this->resolver = new OptionsResolver();

        $this->currencies = $currencies;
        $this->knownParameters = array(
            'PBX_1EURO_CODEEXTER',
            'PBX_1EURO_DATA',
            'PBX_2MONTn',
            'PBX_3DS',
            'PBX_ANNULE',
            'PBX_ARCHIVAGE',
            'PBX_AUTOSEULE',
            'PBX_CMD',
            'PBX_CODEFAMILLE',
            'PBX_CURRENCYDISPLAY',
            'PBX_DATEn',
            'PBX_DEVISE',
            'PBX_DIFF',
            'PBX_DISPLAY',
            'PBX_EFFECTUE',
            'PBX_EMPREINTE',
            'PBX_ENTITE',
            'PBX_ERRORCODETEST',
            'PBX_HASH',
            'PBX_HMAC',
            'PBX_IDABT',
            'PBX_IDENTIFIANT',
            'PBX_INTRUM_DATA',
            'PBX_LANGUE',
            'PBX_MAXICHEQUE_DATA',
            'PBX_NETRESERVE_DATA',
            'PBX_ONEY_DATA',
            'PBX_PAYPAL_DATA',
            'PBX_PORTEUR',
            'PBX_RANG',
            'PBX_REFABONNE',
            'PBX_REFUSE',
            'PBX_REPONDRE_A',
            'PBX_RETOUR',
            'PBX_RUF1',
            'PBX_SITE',
            'PBX_SOURCE',
            'PBX_TIME',
            'PBX_TOTAL',
            'PBX_TYPECARTE',
            'PBX_TYPEPAIEMENT',
        );
    }

    /**
* Resolves parameters for a payment call.
*
* @param array $parameters
*
* @return Options
*/
    public function resolve(array $parameters)
    {
        $this->initParameters();

        return $this->resolver->resolve($parameters);
    }

    /**
* Initialise required parameters for a payment call.
*/
    protected function initParameters()
    {
        $this->requiredParameters = array(
            'PBX_SITE',
            'PBX_RANG',
            'PBX_IDENTIFIANT',
            'PBX_TOTAL',
            'PBX_DEVISE',
            'PBX_CMD',
            'PBX_PORTEUR',
            'PBX_RETOUR',
            'PBX_HASH',
            'PBX_TIME',
            'PBX_HMAC',
        );

        $this->initResolver();
    }

    /**
* Initialize the OptionResolver with required/optionnal options and allowed values.
*/
    protected function initResolver()
    {
        $this->resolver->setRequired($this->requiredParameters);

        $this->resolver->setOptional(array_diff($this->knownParameters, $this->requiredParameters));

        $this->initAllowed();
    }

    /**
* Initialize allowed values.
* @see http://www.fastwrite.com/resources/core/iso-currency-codes/index.php
*/
    protected function initAllowed()
    {
        $this->resolver->setAllowedValues(array(
            'PBX_DEVISE' => $this->currencies,
            'PBX_RUF1' => array(
                'GET',
                'POST',
            ),
        ));
    }
}

Only 3 multiple payments are allowed, it should be :

<?php

namespace Lexik\Bundle\PayboxBundle\Paybox\System\Base;

use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\Options;

/**
* Paybox\System\ParameterResolver class.
*
* @author Olivier Maisonneuve <o.maisonneuve@lexik.fr>
*/
class ParameterResolver
{
    /**
* @var array
*/
    private $knownParameters;

    /**
* @var array
*/
    private $requiredParameters;

    /**
* @var OptionsResolver
*/
    private $resolver;

    /**
* @var array
*/
    private $currencies;

    /**
* Constructor initialize all available parameters.
*
* @param array $currencies
*/
    public function __construct(array $currencies)
    {
        $this->resolver = new OptionsResolver();

        $this->currencies = $currencies;
        $this->knownParameters = array(
            'PBX_1EURO_CODEEXTER',
            'PBX_1EURO_DATA',
            'PBX_2MONT1',
            'PBX_2MONT2',
            'PBX_2MONT3',
            'PBX_3DS',
            'PBX_ANNULE',
            'PBX_ARCHIVAGE',
            'PBX_AUTOSEULE',
            'PBX_CMD',
            'PBX_CODEFAMILLE',
            'PBX_CURRENCYDISPLAY',
            'PBX_DATE1',
            'PBX_DATE2',
            'PBX_DATE3',
            'PBX_DEVISE',
            'PBX_DIFF',
            'PBX_DISPLAY',
            'PBX_EFFECTUE',
            'PBX_EMPREINTE',
            'PBX_ENTITE',
            'PBX_ERRORCODETEST',
            'PBX_HASH',
            'PBX_HMAC',
            'PBX_IDABT',
            'PBX_IDENTIFIANT',
            'PBX_INTRUM_DATA',
            'PBX_LANGUE',
            'PBX_MAXICHEQUE_DATA',
            'PBX_NETRESERVE_DATA',
            'PBX_ONEY_DATA',
            'PBX_PAYPAL_DATA',
            'PBX_PORTEUR',
            'PBX_RANG',
            'PBX_REFABONNE',
            'PBX_REFUSE',
            'PBX_REPONDRE_A',
            'PBX_RETOUR',
            'PBX_RUF1',
            'PBX_SITE',
            'PBX_SOURCE',
            'PBX_TIME',
            'PBX_TOTAL',
            'PBX_TYPECARTE',
            'PBX_TYPEPAIEMENT',
        );
    }

    /**
* Resolves parameters for a payment call.
*
* @param array $parameters
*
* @return Options
*/
    public function resolve(array $parameters)
    {
        $this->initParameters();

        return $this->resolver->resolve($parameters);
    }

    /**
* Initialise required parameters for a payment call.
*/
    protected function initParameters()
    {
        $this->requiredParameters = array(
            'PBX_SITE',
            'PBX_RANG',
            'PBX_IDENTIFIANT',
            'PBX_TOTAL',
            'PBX_DEVISE',
            'PBX_CMD',
            'PBX_PORTEUR',
            'PBX_RETOUR',
            'PBX_HASH',
            'PBX_TIME',
            'PBX_HMAC',
        );

        $this->initResolver();
    }

    /**
* Initialize the OptionResolver with required/optionnal options and allowed values.
*/
    protected function initResolver()
    {
        $this->resolver->setRequired($this->requiredParameters);

        $this->resolver->setOptional(array_diff($this->knownParameters, $this->requiredParameters));

        $this->initAllowed();
    }

    /**
* Initialize allowed values.
* @see http://www.fastwrite.com/resources/core/iso-currency-codes/index.php
*/
    protected function initAllowed()
    {
        $this->resolver->setAllowedValues(array(
            'PBX_DEVISE' => $this->currencies,
            'PBX_RUF1' => array(
                'GET',
                'POST',
            ),
        ));
    }
}