288 lines
6.0 KiB
PHP
288 lines
6.0 KiB
PHP
<?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 l’acheteur
|
||
- PBX_RETOUR = Liste des variables à retourner par Paybox
|
||
- PBX_HASH = Type d’algorithme de hachage pour le calcul de l’empreinte
|
||
- 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
|
||
- L’affichage du logo Paybox
|
||
- Les boutons de validation/annulation/retour boutique
|
||
- Les langues
|
||
- Le fond d’écran
|
||
- Et bien d’autres 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 l’empreinte 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 d’autorisation)
|
||
* 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;
|
||
}
|
||
} |