Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как отдать JSON ответ с помощью PHP (для Яндекс Турбо)?
Форумы портала PHP.SU » » Работа с сетью » Как отдать JSON ответ с помощью PHP (для Яндекс Турбо)?

Страниц (1): [1]
 

1. Taldis - 10 Декабря, 2020 - 12:16:03 - перейти к сообщению
Для сайта подключил Яндекс Турбо страницы, необходимо фиксировать заказы на сайте, сделанные через эти Турбо страницы. Алгоритм такой:
1. Пользователь сделал заказ через Яндекс Турбо страницу.
2. Яндекс отправляет на сайт данные заказа методом POST в виде JSON объекта.
3. На сайте эти данные обрабатываются и создается новый заказ.
4. Далее нужно ответить Яндексу, что все в порядке, заказ добавлен. И вот тут возникла проблема, как правильно вернуть ответ из PHP обработчика? Если не вернуть ответ, то Яндекс отправляет данные заказа еще 4-5 раз.
В инструкции сказано:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Ответ магазина, если он принимает заказ
  2. Код ответа: 200 OK
  3. Тело:
  4. {
  5.   "order":
  6.   {
  7.     "accepted": true,
  8.     "id": "12345"
  9.   }
  10. }

Я пробую варианты (по очереди):
CODE (htmlphp):
скопировать код в буфер обмена
  1. $response = '{"order": {"accepted": true, "id": "'.$order_id.'"}}';
  2. header('Content-Type: application/json');
  3. header("HTTP/1.1 200 OK");
  4. echo $response;
  5.  
  6. $response = '{"order": {"accepted": true, "id": "'.$order_id.'"}}';
  7. header('Content-Type: application/json');
  8. header("HTTP/1.1 200 OK");
  9. echo json_encode($response);
  10.  
  11. $response['order']['accepted'] = true;
  12. $response['order']['id'] = $order_id;
  13. header('Content-Type: application/json');
  14. header("HTTP/1.1 200 OK");
  15. echo json_encode($response);
  16.  
  17. $response = ["order" => [[ "accepted" => "true", "id" => "'.$order_id.'" ]]];
  18. header('Content-Type: application/json');
  19. header("HTTP/1.1 200 OK");
  20. echo json_encode($response);

Ни один вариант не срабатывает, т.к. Яндекс шлет заказы повторно.
Я понимаю, что нужно обращаться в тех. поддержку Яндекса, но они молчат.
2. Мелкий - 10 Декабря, 2020 - 13:13:45 - перейти к сообщению
Запросите свой скрипт curl'ом и посмотрите внимательно (любой hex редактор в помощь) что именно у вас в ответе получается. Может BOM или ещё что сложно-заметное, может order_id пустой
3. Vladimir Kheifets - 11 Декабря, 2020 - 08:09:52 - перейти к сообщению
Taldis пишет:
Для сайта подключил Яндекс Турбо страницы, необходимо фиксировать заказы на сайте, сделанные через эти Турбо страницы. Алгоритм такой:
1. Пользователь сделал заказ через Яндекс Турбо страницу.
2. Яндекс отправляет на сайт данные заказа методом POST в виде JSON объекта.
3. На сайте эти данные обрабатываются и создается новый заказ.
4. Далее нужно ответить Яндексу, что все в порядке, заказ добавлен. И вот тут возникла проблема, как правильно вернуть ответ из PHP обработчика?


Добрый день!
Во всех вариантах Вы ничего не отправляете.
Посмотрите в документации URL, на который Ваш скрипт должен отправлять
подтверждение на Яндекс. Вставте в обработчик cURL.
Удачи!

 

Powered by ExBB FM 1.0 RC1