je suis sur un bout de code PHP ou j'ai besoin de préparer une structure xml,la compresser puis crypter et l'envoyer via la méthode curl_ avec la méthode POST,
sur le coté traitement du poste je reçois une chaine de caractère plus courte, quand j'envois 512 caractère , la variable du post contienne une chaine de taille aléatoire a chaque refreesh.
merci pour vos réponse.
j'ajoute le code pour mieux expliquer
<?php
require_once 'MessagesUtils.php';
$sender_account = '100103';
$recipient_account = '100104';
$recipient_name = 'boutique.com';
$order = 'A012/2012';
$product = '05561';
$url_return = 'http://thy85k.php'; /* utiliser des fichier de return generer dynamiquement a partir d'un template */
$url_cancel = 'http://ply5o92.php'; /* utiliser des fichier de return generer dynamiquement a partir d'un template */;
$amount = '500';
$api_key = '955g477t555d3011zgpkko'; /* c'est un identifiant utilisé pour récuperer la clé publique du marchand dans la base de icosnet */
$token = '8gfpjkjsmmfyerav'; /* c'est un token generer dynamiquement au niveau du marchand pour identifier chaque transaction */
$xmlString = MessagesUtils::buildMerchantRequest($sender_account, $recipient_account, $recipient_name, $order, $product, $url_return, $url_cancel, $amount, $api_key, $token);
/* ---------end build request ------------------ */
//crypt with public key
$fp = fopen("PublicKey.pem", "r");
$pub_key = fread($fp, 8192);
fclose($fp);
$PK = "";
$PK = openssl_get_publickey($pub_key);
$xmlString = urlencode($xmlString);
$xmlString = gzcompress($xmlString);
$xmlencrypted = "";
try {
openssl_public_encrypt($xmlString, $xmlencrypted, $PK);
} catch (Exception $exp) {
var_dump($exp);
}
/* fin de cryptage */
// Infobip's POST URL
$postUrl = "http://localhost/security/cryptography/traitement.php";
// previously formatted XML data becomes value of "XML" POST variable
$fields = "XML=" . $xmlencrypted;
// in this example, POST request was made using PHP's CURL
echo '--------- xmlencrypted marchent--------------------</br>';
var_dump($xmlencrypted);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
// response of the POST request
$result = curl_exec($ch);
$response = '';
if ($result == true) {
$response = ob_get_contents();
}
$xmlResponse = simplexml_load_string($response);
var_dump($xmlResponse);
curl_close($ch);
?>
d'un autre coté sur le fichier traitement.php j'ai:
<?php
require_once 'MessagesUtils.php';
echo"<?xml version=\"1.0\"?>\r\n";
if (isset($_POST['XML'])) {
$xmlencrypted = $_POST['XML'];
echo '---------recieved xmlencrypted --------------------</br>';
var_dump($xmlencrypted);
/* decryptage message du marchand */
//decrypt with private key
$fp = fopen("Key.pem", "r");
$private_key = fread($fp, 8192);
fclose($fp);
$PrK = "";
$PrK = openssl_get_privatekey($private_key, '');
$xmlCompressed="";
/
openssl_private_decrypt($xmlencrypted, $xmlCompressed, $PrK);
echo '--------- xmlCompressed --------------------</br>';
var_dump($xmlCompressed);
$xmlCodded= gzuncompress($xmlCompressed);
echo '--------- uncompressed --------------------</br>';
var_dump($xmlCodded);
$xmlDecodded = urldecode($xmlCodded);
$xmlResponse = simplexml_load_string($xmlDecodded);
echo '--------- xmlResponse --------------------</br>';
var_dump($xmlResponse);
$check_result = "OK";
$err_code = "0";
$last_balance = "700";
$new_balance = "800";
$order = "A012/2012";
$token = "955g477t555d3011zgpkko";
$response = MessagesUtils::buildIcosnetResponse($check_result, $err_code, $last_balance, $new_balance, $order, $token);
echo $response;
} else {
echo "erreur";
}
?>