Не получается запарсить json-запрос удаленного сервера на PHP

Удаленный сервер обращается к моему с следующим запросом:

sendNotificationAsync(): url=****************/getReq.php, request.object={
  "id" : "po-2e0b0050-0003-5000-a000-08b0474395ad",
  "amount" : {
    "value" : "65.00",
    "currency" : "RUB"
  },
  "status" : "succeeded",
  "payout_destination" : {
    "type" : "bank_card",
    "card" : {
      "first6" : "*******",
      "last4" : "****",
      "card_type" : "Visa",
      "issuer_country" : "RU",
      "issuer_name" : "Alfa-Bank"
    }
  },
  "description" : "SAFE_DEAL",
  "created_at" : "2024-06-24T03:48:33.208Z",
  "deal" : {
    "id" : "****************"
  },
  "metadata" : {
    "order_id" : "12120697"
  },
  "test" : false
}, headers=[Signature: v1 2e0b006a 1 MGQCMBM/d5VCjHLDz53bK7RAr93sm3G6ibYuw8C1tJANZKV8nOJx8mym5IjxiffdmiyxpgIwbGpvt/MdgHtrhArKscnmg//PyDF1xppgvrIx1FlK8tFHLJd1cB502FErxzP3hphJ, Content-Type: application/json, User-Agent: AHC/2.1, Accept: */*]

Ответ, который получает сервер:

END http request: method=POST, url=*********/getReq.php, status=200, time.ms=9

Исходя из того, что сервер отправляет application/json, пытаюсь спарсить данные из запроса на своей стороне:

$source = file_get_contents('php://input');
$requestBody = json_decode($source, true);
// Пробовал по разному, т.к. видел разные примеры.
file_put_contents("getReq1.txt", $requestBody["id"]." ".$requestBody["deal"]["id"]." ".$requestBody["status"]."1");
file_put_contents("getReq2.txt", $requestBody->id." ".$requestBody->deal->id." ".$requestBody->status." 1");

В файл записывается только " 1", приписываемая к концу строки, соответственно, к файлу обращение происходит, но данные не получается спарсить. Пробовал еще вариант просто получить $_POST запрос, но тоже неудачно:

$requestBody = json_decode($_POST, true);
file_put_contents("getReq1.txt", $requestBody->id." ".$requestBody->deal->id." ".$requestBody->status." 1");
file_put_contents("getReq2.txt", $_POST["id"]." ".$_POST["deal"]["id"]." ".$_POST["amount"]["value"]." ".$_POST["status"]."1");

Что делаю со своей стороны не так?


Ответы (1 шт):

Автор решения: VikDay

Данная проблема показала важность использования отладки для решения возникающих проблем.

Главной составляющей отладки является проверка реально полученных данных на соответствие ожиданиям. Записав полученный JSON в файл, удалось выяснить, что данные имеют другую структуру. После указания правильных ключей в распакованном массиве, удалось получить нужные значения.

→ Ссылка