Я пытаюсь преобразовать следующий оператор 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, ничего не отображается, и скрипт обратного вызова не вызывается. Буду признателен за любые указания на то, что я делаю неправильно.






Используйте curl_errno, чтобы проверить, есть ли какие-либо ошибки из запросов curl, вместо if (!$output)
if (curl_errno($ch)) {
echo "Curl Error : " . curl_error($ch);
}
@DavidLee, лучший способ - найти эквивалент, выяснив, что означает фактическая опция, -i - небезопасный флаг, -s - беззвучный режим, -v - подробный. В php параметру curl CURLOPT_SSL_VERIFYHOST присвоено значение false, параметру -s CURLOPT_MUTE присвоено значение true, а параметру -v CURLOPT_VERBOSE присвоено значение true.
Привет Никлаз, Спасибо за совет. Вопрос - знаете ли вы, как я могу добавить параметры curl "-i" или "-S" или "-v" к приведенной выше версии php-скрипта?