/** * @param array $config * @param int $id_transaction * @param string $transaction_hash * @param array $options * @return array|string */ function presta_paybox_payer_acte_dist($config, $id_transaction, $transaction_hash, $options = array()) { $call_request = charger_fonction('request', 'presta/paybox/call'); $contexte = $call_request($id_transaction, $transaction_hash, $config, "acte"); $contexte['sandbox'] = paybox_is_sandbox($config) ? ' ' : ''; $contexte = array_merge($options, $contexte); return recuperer_fond('presta/paybox/payer/acte', $contexte); }
/** * Generer les hidden du formulaire d'envoi a paybox * selon methode cle secrete + hash ou binaire executable * * @param $params * @return array|string */ function paybox_form_hidden($params) { if (isset($params['PBX_HMAC_KEY']) and !trim($params['PBX_HMAC_KEY'])) { unset($params['PBX_HMAC_KEY']); } if (paybox_is_sandbox($params) and isset($params['PBX_HMAC_KEY_test'])) { $params['PBX_HMAC_KEY'] = $params['PBX_HMAC_KEY_test']; } // cle de test, on la vire de toute facon if (isset($params['PBX_HMAC_KEY_test'])) { unset($params['PBX_HMAC_KEY_test']); } // methode hash avec cle secrete partagee fournie if (isset($params['PBX_HMAC_KEY'])) { $key = trim($params['PBX_HMAC_KEY']); unset($params['PBX_HMAC_KEY']); if (isset($params['DIRECT_PLUS_CLE'])) { unset($params['DIRECT_PLUS_CLE']); } if (!isset($params['PBX_TIME'])) { $params['PBX_TIME'] = date("c"); } // On calcule l?empreinte (a renseigner dans le parametre PBX_HMAC) grace a la fonction hash_hmac et // la cle binaire // On envoie via la variable PBX_HASH l'algorithme de hachage qui a ete utilise (SHA512 dans ce cas) // Pour afficher la liste des algorithmes disponibles sur votre environnement, decommentez la ligne // suivante // print_r(hash_algos()); $hash_method = "sha512"; if (function_exists("hash_algos")) { $algos = hash_algos(); foreach (array("sha512", "sha256", "sha1", "md5") as $method) { if (in_array($method, $algos)) { $hash_method = $method; break; } } } $params['PBX_HASH'] = strtoupper($hash_method); // On cree la chaine a hacher sans URLencodage $message = array(); $params_att = array(); foreach ($params as $k => $v) { if (strncmp($k, "PBX_", 4) == 0) { $params_att[$k] = str_replace('"', '"', $v); $message[] = "{$k}=" . $params_att[$k]; } } $message = implode("&", $message); // la cle secrete HMAC // Si la cle est en ASCII, On la transforme en binaire $binKey = pack("H*", $key); // La chaine sera envoyee en majuscules, d'ou l'utilisation de strtoupper() $hmac = strtoupper(hash_hmac($hash_method, $message, $binKey)); $params_att['PBX_HMAC'] = $hmac; // On cree les hidden du formulaire a envoyer a Paybox System // ATTENTION : l'ordre des champs est extremement important, il doit // correspondre exactement a l'ordre des champs dans la chaine hachee $hidden = array(); foreach ($params_att as $k => $v) { $hidden[] = "<input type=\"hidden\" name=\"{$k}\" value=\"{$v}\" />"; } $hidden = implode("\n", $hidden); return $hidden; } // sinon methode encodage par binaire // depreciee mais permet transition en douceur et iso-fonctionnelle $paybox_exec_request = charger_fonction("exec_request", "presta/paybox"); $hidden = $paybox_exec_request($params); // modulev2.cgi injecte une balise Form dont on ne veut pas ici $hidden = preg_replace(",<form[^>]*>,Uims", "", $hidden); return $hidden; }