#php #curl
#php #curl
Вопрос:
Я пытаюсь преобразовать следующую инструкцию CURL в PHP-скрипт и у меня возникают проблемы.
curl -s -S -i -v --cert /etc/ssl/certs/TestCertificate.p12:password --cert-type p12 --cacert /etc/ssl/certs/TLSRootCA.pem --tlsv1.1 --header "Content-Type: application/json" https://example1.com/api/paymentrequests --data '{ "payeePaymentReference" : "0123456789", "callbackUrl" : "https://example2.com/callback.php", "payerAlias" : "345689123", "payeeAlias" : "123456789", "amount" : "10", "currency" : "USD", "message" : "Testing callback server" }'
Вот мой php-скрипт:
<?php
class APIController
{
public static function getRoutes()
{
$routes = [];
$routes[] = new Route('GET /api', function () {
$url = "https://example1.com/api/paymentrequests";
$ch = curl_init();
$data =
[
'payeePaymentReference' => '0123456789',
'callbackUrl' => 'https://example2.com/callback.php',
'payerAlias' => '345689123',
'payeeAlias' => '123456789',
'amount' => '10',
'currency' => 'USD',
'message' => 'Testing callback server'
];
$data_string = json_encode($data);
$options = array(
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url ,
CURLOPT_VERBOSE => true,
CURLOPT_CAINFO => '/etc/ssl/certs/TLSRootCA.pem',
CURLOPT_SSLCERT => '/etc/ssl/certs/TestCertificate.p12',
CURLOPT_SSLCERTPASSWD => 'password',
CURLOPT_SSLCERTTYPE => 'P12',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data_string,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
]
);
curl_setopt_array($ch , $options);
$output = curl_exec($ch);
if(!$output)
{
echo "Curl Error : " . curl_error($ch);
}
else
{
echo htmlentities($output);
}
return false;
});
return $routes;
}
}
$testObject = new APIController();
$testObject->getRoutes();
echo htmlentities($output);
?>
При запуске инструкции CURL в командной строке скрипт обратного вызова вызывается успешно и отображается HTTP 201 (успешный ответ на вызов). Однако, когда я запускаю скрипт php, ничего не отображается, и скрипт обратного вызова не вызывается. Был бы признателен за любые указания относительно того, что я делаю неправильно.
Ответ №1:
Используйте curl_errno
для проверки наличия ошибок в запросах curl, вместо if(!$output)
if (curl_errno($ch)) {
echo "Curl Error : " . curl_error($ch);
}
Комментарии:
1. Привет, Никлаз, спасибо за совет. Вопрос — вы знаете, как я могу добавить параметры curl «-i», «-S» или «-v» к приведенной выше версии php-скрипта?
2. @DavidLee, лучший способ — это поиск эквивалента, выяснив, что означает фактический параметр, -i — флаг небезопасности, -s — беззвучный режим, -v — подробный. В php -i для параметра curl
CURLOPT_SSL_VERIFYHOST
установлено значениеfalse
, -sCURLOPT_MUTE
установлено значениеtrue
, а -vCURLOPT_VERBOSE
установлено значениеtrue