Не может надежно получать данные POST json в PHP из некоторых источников

#php #api #post

#php #API #Публикация

Вопрос:

Я пытаюсь работать с API, который отправляет данные на мой сервер в формате json через команду POST.

Я использую

 <?PHP 
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Expose-Headers: *');
header('HTTP/1.1 201 Accepted');

$data = file_get_contents('php://input');

if(!empty($data)){
    echo "Not Empty";
} else {
    echo "Is Empty";
}
echo ': '.$data;

?>
 

Для тестирования:

Когда я использую reqbin.com Я получаю успешный ответ, но данные не возвращаются

Когда я использую apitester.com все работает, как и ожидалось, json является свойством echoed.

Что может быть причиной того, что один сервис работает, а другой не работает, когда оба отправляют один и тот же файл json на мой сервер.

*** Я знаю, что в конечном итоге мне нужно будет использовать json_decode для работы с данными, но я просто пытаюсь проверить получение данных … любых данных на данный момент.

Ответ от reqbin:

 HTTP/1.1 201 Accepted
Date: Thu, 14 Jan 2021 04:36:52 GMT
Server: Apache
Access-Control-Allow-Headers: *
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Access-Control-Expose-Headers: *
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

Is Empty:
 

Ответ от apitester:

 HTTP/1.1 201 Accepted
Date: Thu, 14 Jan 2021 04:38:48 GMT
Server: Apache
Access-Control-Allow-Headers: *
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Access-Control-Expose-Headers: *
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Not Empty: {
    "PublicKey":"12121212121212121212121212121212",
    "TimeStamp":"MM-DD-YYYY HH:MM:SS",
    "TokenKey":"34343434343434343434343434343434",
    "Action":"AUTHORIZE",
    "SecureURL":"https://merchant-store.3dcartstores.com",
}
 

Обновить:

Я заметил, что reqbin использует CURLOPT_RETURNTRANSFER, для которого установлено значение true для их запроса. Может ли мой сервер отклонять это?

Комментарии:

1. Может быть, попробовать обычный, реальный HTTP-клиент, например curl , вместо онлайн-сервиса? Также может предоставить вам более подробный вывод, если что-то не так.

2. Я использую онлайн-сервис для тестирования, потому что API, с которым я буду взаимодействовать, также является онлайн-сервисом. Мой вопрос конкретно об этих онлайн-сервисах… почему один будет работать, а другой не будет работать. Когда я использую curl из командной строки, он работает так, как ожидалось.

3. Если вы хотите, чтобы он работал с этими веб-сайтами, вы должны получить от них полные запросы ответы и опубликовать их в своем вопросе.

4. Обновленный вопрос с ответом, полученным с использованием каждой службы.

5. Разница между ними будет заключаться в запросе, который они отправляют, но ответы также полезны!