Пример #1
0
/**
 * @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);
}
Пример #2
0
/**
 * 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;
}