J'installe une solution de commerce électronique personnalisée et le système de paiement que j'utilise nécessite que j'envoie des messages HTTPS.
Comment puis-je faire cela en utilisant php (et CURL?), Est-ce différent de l'envoi de messages http?
MISE À JOUR:
Merci pour vos réponses, elles ont été très utiles. Je suppose que je devrai acheter un certificat SSL pour que cela fonctionne, et je le ferai évidemment pour le site final, mais est-il possible pour moi de tester cela sans en acheter un?
Merci, Nico
PHP/Curl gérera très bien la requête https. Ce que vous devrez peut-être faire, en particulier contre un serveur de développement, est de désactiver CURLOPT_SSL_VERIFYPEER. En effet, un serveur de développement peut être auto-signé et échouer au test de vérification.
$postfields = array('field1'=>'value1', 'field2'=>'value2');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://foo.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
// Edit: prior variable $postFields should be $postfields;
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // On dev server only!
$result = curl_exec($ch);
Vous pouvez également utiliser l'API de flux et options de contexte http/https
$postdata = http_build_query(
array(
'FieldX' => '1234',
'FieldY' => 'yaddayadda'
)
);
$opts = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://example.com', false, $context);
Vous avez toujours besoin d'une extension qui fournit le cryptage SSL. Cela peut être php_openssl ou ( si compilé de cette façon) php_curl.
Non, il n'y a pas beaucoup de différence. Curl fait tout ce qui est nécessaire.
Voir les exemples dans le commentaires des utilisateurs sur le curl_setopt
page de référence comment c'est fait.
Si vous utilisez curl, vous pouvez passer le commutateur -d pour vos paramètres. Cela se traduit par l'utilisation d'une publication HTTP. Quelque chose comme
curl http://foo.com -d bar=baz -d bat=boo
entraînerait une publication HTTP à http://foo.com avec les paramètres appropriés
Question similaire: POST to URL with PHP and Handle Response
En utilisant la solution acceptée ( Snoopy PHP Class ), vous pouvez faire quelque chose comme ceci:
<?php
$vars = array("fname"=>"Jonathan","lname"=>"Sampson");
$snoopy = new Snoopy();
$snoopy->curl_path = "/usr/bin/curl"; # Or whatever your path to curl is - 'which curl' in terminal will give it to you. Needed because snoopy uses standalone curl to deal with https sites, not php_curl builtin.
$snoopy->httpmethod = "POST";
$snoopy->submit("https://www.somesite.com", $vars);
print $snoopy->results;
?>