Возникли проблемы с преобразованием инструкции CURL в php-скрипт

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
75
1

Ответы 1

Используйте curl_errno, чтобы проверить, есть ли какие-либо ошибки из запросов curl, вместо if (!$output)

if (curl_errno($ch)) {
    echo "Curl Error : " . curl_error($ch);
}

Привет Никлаз, Спасибо за совет. Вопрос - знаете ли вы, как я могу добавить параметры curl "-i" или "-S" или "-v" к приведенной выше версии php-скрипта?

David Lee 07.03.2019 10:58

@DavidLee, лучший способ - найти эквивалент, выяснив, что означает фактическая опция, -i - небезопасный флаг, -s - беззвучный режим, -v - подробный. В php параметру curl CURLOPT_SSL_VERIFYHOST присвоено значение false, параметру -s CURLOPT_MUTE присвоено значение true, а параметру -v CURLOPT_VERBOSE присвоено значение true.

Nikola Kirincic 07.03.2019 11:11

Другие вопросы по теме