Как отправлять сообщения HTTPS используя php - PullRequest
16 голосов
/ 20 июля 2009

Я настраиваю индивидуальное решение для электронной коммерции, и используемая платежная система требует от меня отправки HTTPS POSTS.

Как я могу сделать это с помощью php (и CURL?), Это отличается от отправки сообщений http?

UPDATE:

Спасибо за ваши ответы, они были очень полезны. Я предполагаю, что мне нужно будет приобрести сертификат SSL для этого, и я, очевидно, сделаю это для конечного сайта, но есть ли способ проверить это, не покупая его?

Спасибо, Нико

Ответы [ 5 ]

38 голосов
/ 20 июля 2009

PHP / Curl отлично справится с запросом https. Что вам может понадобиться, особенно при работе с сервером разработки, это отключить CURLOPT_SSL_VERIFYPEER. Это связано с тем, что сервер разработки может быть самозаверяющим и не пройден тест проверки.

$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);
12 голосов
/ 20 июля 2009

Вы также можете использовать параметры потока API и параметры 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);

Вам все еще нужно расширение, обеспечивающее шифрование SSL. Это может быть php_openssl или (, если скомпилировано таким образом) php_curl.

2 голосов
/ 20 июля 2009

Нет, особой разницы нет. Керл делает все необходимое сам.

См. Примеры в комментариях пользователей на справочной странице curl_setopt , как это делается.

1 голос
/ 20 июля 2009

Если вы используете curl, вы можете передать ключ -d для ваших параметров. Это приводит к использованию сообщения HTTP. Что-то вроде

curl http://foo.com -d bar=baz -d bat=boo

приведет к HTTP-сообщению http://foo.com с соответствующими параметрами

0 голосов
/ 20 июля 2009

Аналогичный вопрос: POST для URL с PHP и ответом на дескриптор

Используя принятое решение ( Snoopy PHP Class ), вы можете сделать что-то вроде следующего:

<?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;

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...