web-dev-qa-db-fra.com

Comment envoyer des messages HTTPS en utilisant PHP

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

17
Nico Burns

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);
39
Brent Baisley

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.

12
VolkerK

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.

2
Gumbo

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

1
Rob Di Marco

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;

?>
0
Sampson