#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. Разница между ними будет заключаться в запросе, который они отправляют, но ответы также полезны!