Я настраиваю специальное решение для электронной торговли, а используемая платежная система требует, чтобы я отправлял HTTPS POSTS.
Как я могу это сделать, используя php (и CURL?), Не отличается ли он от отправки сообщений HTTP?
ОБНОВИТЬ:
Спасибо за ваши ответы, они были очень полезны. Я предполагаю, что мне нужно будет приобрести сертификат SSL, чтобы это работало, и я, очевидно, сделаю это для финального сайта, но есть ли способ проверить это без покупки?
Спасибо, Нико
PHP / Curl будет обрабатывать запрос https просто отлично. Что вам может понадобиться, особенно при работе с Dev-сервером, отключается 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);
Вы также можете использовать параметры потока 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.
Нет, нет большой разницы. Curl делает все необходимое самостоятельно.
См. Примеры в комментариях пользователя на справочной странице curl_setopt
как это делается.
Если вы используете завиток, вы можете перейти в ключ -d для своих параметров. Это приводит к использованию HTTP-сообщения. Что-то вроде
curl http://foo.com -d bar=baz -d bat=boo
приведет к сообщению HTTP на http://foo.com с соответствующими параметрами
Похожие вопросы: POST для URL с PHP и Handle Response
Используя принятое решение ( 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; ?>