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 : 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; } }