<?php

//Prépare les paramètres
$host = 'http://api.gesasso.ffvv.stadline.com';//url de prod ou preprod selon les cas 
$login = 'wsse_*****'; //fourni par la FFVV, info de sécurité //Contenu de la requêt
$secret = '****************************'; //fourni par la FFVV, info de sécurité //Contenu de la requête 


/**
 * @param string $login Fourni par Stadline, info de sécurité
 * @param string $secret Fourni par Stadline, info de sécurité
 * @param string $host Host de prod ou preprod selon les cas
 * @param string $uri URI de la ressource sur l'API
 * @param string $content Contenu de la requête
 * @param string $httpMethod Méthode HTTP de la ressource GET,POST,PUT,DELETE...
 * @return string
 * @throws Exception en cas d'erreur (de validation ou d'erreur plus globale)
 */
function callGesassoApiWithCurl($login, $secret, $host, $uri, $content, $httpMethod)
{
    $headers = array(
        'Content-Type: application/json',
        'Content-Length: ' . mb_strlen($content),
        generateWsseHeader($login, $secret)
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $host . '/' . $uri);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $httpMethod);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if(!in_array($httpcode, array(200,201))){
        $message =  'A problem occured' . PHP_EOL
            . 'Status Code: ' . $httpcode . PHP_EOL
            . 'Message: ' . $result . PHP_EOL;
        throw new Exception($message);
    }
    return $result;
}

/**
 * @param string $login Fourni par Stadline, info de sécurité
 * @param string $secret Fourni par Stadline, info de sécurité
 * @return string
 */
function generateWsseHeader($login, $secret)
{
    $nonce = md5(rand(), true);
    $created = gmdate('Y-m-d\TH:i:s\Z');

    $digest = base64_encode(sha1($nonce . $created . $secret, true));
    $b64nonce = base64_encode($nonce);

    return sprintf(
        'X-WSSE: UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
        $login,
        $digest,
        $b64nonce,
        $created
    );
}

echo callGesassoApiWithCurl($login, $secret, $host, 'flights-collection.json', file_get_contents("fichier_import_groupe_vols.json"), 'POST');

