partner/library/Paybox/System.php
Michael RICOIS 4b5da92d16 Remove echo
2013-11-15 15:43:07 +00:00

288 lines
6.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
Page scores
===========
Choix du moyen de paiement
- Liste les cartres de paiement autorisées
Forçage du moyen de paiement
PBX_TYPEPAIEMENT
PBX_TYPECARTE
URL de Paybox System :
Variables à transmettre
- PBX_SITE = Numéro de site (fourni par Paybox)
- PBX_RANG = Numéro de rang (fourni par Paybox)
- PBX_IDENTIFIANT = Identifiant interne (fourni par Paybox)
- PBX_TOTAL = Montant total de la transaction
- PBX_DEVISE = Devise de la transaction
- PBX_CMD = Référence commande côté commerçant
- PBX_PORTEUR = Adresse E-mail de lacheteur
- PBX_RETOUR = Liste des variables à retourner par Paybox
- PBX_HASH = Type dalgorithme de hachage pour le calcul de lempreinte
- PBX_TIME = Horodatage de la transaction
- PBX_HMAC = Signature calculée avec la clé secrète
Gestion du HMAC
1 - Générer un clé par l'interface de backoffice
2 - Valider la clé, reception d'un email demandant la validation (la clé est valable 31 jours)
Pas possible plusieurs clés...
=> Pour le test clé définie
Page de paiement paybox
========================
Personnalisation
- Le logo en haut de page
- Laffichage du logo Paybox
- Les boutons de validation/annulation/retour boutique
- Les langues
- Le fond décran
- Et bien dautres options via un fichier CSS
=> Transmettre ces éléments à PayBox
*/
class Paybox_System extends Paybox_Config
{
/**
* Algorithme utilisé pour la signature du message
* SHA512, RIPEMD160, SHA224, SHA256, SHA384, MDC2
* @var string
*/
protected $PBX_HASH = 'SHA512';
/**
* Date à laquelle lempreinte HMAC a été calculée. Doit être URL-encodée
* Date au format ISO8601.
* @var string
*/
protected $PBX_TIME;
protected $PBX_HMAC;
/**
* Référence de commande
* @var string
*/
protected $PBX_CMD;
/**
* Devise (monnaie)
* Code monnaie de la transaction suivant la norme ISO 4217 (code numérique)
* Exemples :
* - Euro : 978
* - US Dollar : 840
* @var string
*/
protected $PBX_DEVISE = '978';
/**
* URL de retour en cas de succès
* @var string
*/
protected $PBX_EFFECTUE;
/**
* URL de retour en cas d'abandon
* @var string
*/
protected $PBX_ANNULE;
/**
* URL de retour en cas de refus de paiement
* @var string
*/
protected $PBX_REFUSE;
/**
* Configuration de la réponse
* Chaine <nom de variable>:<lettre> concaténé par ;
* mt:M => Montant de la transaction
* eta:E
* Liste des erreurs possible
*
* id:R => Référence commande (précisée dans PBX_CMD)
* auto:A => numéro d'Autorisation (numéro remis par le centre dautorisation)
* type:P => Type de Paiement retenu (cf. PBX_TYPEPAIEMENT)
* idtrans:S => Numéro de TranSaction Paybox
* pays:Y => Code paYs de la banque émettrice de la carte. Format : ISO 3166 (alphabétique)
* sign:K => Signature sur les variables de l'URL. Format : url-encodé (toujours en dernier)
* @var string
*/
protected $PBX_RETOUR = 'eta:E;id:R;type:P;mt:M;auto:A;idtrans:S;sign:K';
/**
* Langue de la page de paiement
* @var string
*/
protected $PBX_LANGUE = '';
/**
* Adresse email du client
* @var string
*/
protected $PBX_PORTEUR = '';
/**
* TEST
* Code erreur à renvoyer pour tests
* @var string
*/
protected $PBX_ERRORCODETEST;
/**
* ORDRE des champs pour l'affichage du formulaire et le calcul du HMAC
* @var array
*/
protected $stackfields = array(
'PBX_SITE',
'PBX_RANG',
'PBX_IDENTIFIANT',
'PBX_TOTAL',
'PBX_DEVISE',
'PBX_CMD',
'PBX_PORTEUR',
'PBX_RETOUR',
'PBX_HASH',
'PBX_TIME',
);
protected $URL_PARAMETERS;
public function __construct($test = false) {
parent::__construct($test);
}
public function getFormUrl()
{
return $this->URL_PAIEMENT;
}
public function getFormParameters()
{
$params = array();
foreach ( $this->stackfields as $field ) {
$value = $this->{$field};
if ( !empty($value) ) {
$params[] = array(
'name' => $field,
'value' => $value,
);
}
}
$params[] = array(
'name' => 'PBX_HMAC',
'value' => $this->PBX_HMAC,
);
return $params;
}
/**
* Défini le montant
* @param float $value
*/
public function setMontant($value)
{
$montant = str_replace(',', '', number_format($value, 2, ',', ''));
$this->PBX_TOTAL = $montant;
}
/**
* Set the command reference
* @param string $value
*/
public function setReference($value)
{
$this->PBX_CMD = $value;
}
/**
* Set user email
* @param string $value
*/
public function setEmail($value)
{
$this->PBX_PORTEUR = $value;
}
/**
* Define URL parameters as string to calculate HMAC
* @param string $withReturnUrl
*/
public function setUrlParameters($withReturnUrl = '')
{
if ( !empty($withReturnUrl) ) {
$this->setReturnUrl($withReturnUrl);
$this->stackfields = array_merge($this->stackfields, array(
'PBX_EFFECTUE',
'PBX_REFUSE',
'PBX_ATTENTE',
'PBX_ANNULE',
));
}
$dateTime = date('c');
$this->PBX_TIME = $dateTime;
$params = '';
$i = 0;
foreach ( $this->stackfields as $field ) {
$value = $this->{$field};
if ( !empty($value) ) {
$params.= $field.'='.$value;
$i++;
if ( $i < count($this->stackfields) ) {
$params.= '&';
}
}
}
// If the last char is &, remove it
if ( substr($params, -1) == '&' ) {
$params = substr($params, 0, strlen($params)-1);
}
$this->URL_PARAMETERS = $params;
}
/**
* Return the paiement URL if available
* @return string|boolean
*/
public function setUrlPaiement()
{
$this->checkservers();
if ( !empty($this->URL_PAIEMENT) ) {
return $this->URL_PAIEMENT;
}
return false;
}
/**
* Calcul le HMAC
* @return void
*/
public function calculateHMAC()
{
$binKey = pack("H*", $this->KEY);
//echo "URL_PARAMETERS : ".$this->URL_PARAMETERS;
$this->PBX_HMAC = strtoupper(hash_hmac('sha512', $this->URL_PARAMETERS, $binKey));
}
/**
* Define Return URL
* @param string $url
*/
public function setReturnUrl($url)
{
$this->PBX_EFFECTUE = $url;
$this->PBX_REFUSE = $url;
$this->PBX_ATTENTE = $url;
$this->PBX_ANNULE = $url;
}
}