Преобразование объекта в массив для отображения ошибок с помощью Square API

В настоящее время я использую метод оплаты SquareUp, используя их API Connect V2. Обработка платежа работает нормально, однако я хотел бы отобразить любые ошибки на экране, например, если карта отклоняется.

} catch (\SquareConnect\ApiException $e) {
  echo "Caught exception!<br/>";
  print_r('<strong>Details:</strong><br/>');
  echo "<pre>";
  var_dump($e->getResponseBody());

  echo "</pre>";
}

Когда я выгружаю весь getResponseBody, я получаю результат ниже, однако я просто хочу выгрузить строку в свойстве «detail». Я думал, что, возможно, преобразование в массив поможет, но, честно говоря, я не уверен.

object(stdClass)#20 (1) {
  ["errors"]=>
  array(1) {
    [0]=>
    object(stdClass)#21 (3) {
      ["category"]=>
      string(20) "PAYMENT_METHOD_ERROR"
      ["code"]=>
      string(13) "CARD_DECLINED"
      ["detail"]=>
      string(14) "Card declined."
    }
  }
}

Я пробовал сделать это, но он ничего не сбрасывает внутри <pre></pre>, тогда как сброс всего $e->getResponseBody() выводится в <pre></pre>.

$json = file_get_contents($e->getResponseBody());
$obj = json_decode($json);
echo $obj->errors[0]->detail));
Стоит ли изучать 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 и хотите разрабатывать...
1
0
150
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сначала разрешить ($obj->errors), а затем ссылаться на элементы массива, например:

<?php
$obj = (object)['errors' => [(object)['category' => 'PAYMENT_METHOD_ERROR', 'code' => 'CARD_DECLINED', 'detail' => 'Card declined']]];

echo ($obj->errors)[0]->category;   // output PAYMENT_METHOD_ERROR
echo '<br />';
echo ($obj->errors)[0]->code;       // output CARD_DECLINED
echo '<br />';
echo ($obj->errors)[0]->detail;     // output Card declined
?>

Как мне получить то, что у вас есть в вашем $obj? Строка detail не всегда может быть Card declined, поэтому я не могу просто скопировать и вставить ваш ответ, но не знаю, что здесь делать. Мне нужно преобразовать в массив? если да, то как? Даже просто скопировав и вставив ошибку кода, я получаю HTTP ERROR 500

Zac Ram 28.06.2018 22:21

не уверен, что понимаю; вы говорите: «однако я просто хочу сбросить строку в свойстве detail», поэтому вы делаете: echo ($obj->errors)[0]->detail; результат эха, очевидно, будет зависеть от того, что вы получили в свойстве detail.

lovelace 28.06.2018 22:25

Да, это правильно, и я понимаю, однако, как мне получить содержимое того, что у вас есть в вашем $ obj?

Zac Ram 28.06.2018 22:28

А теперь я понимаю. Это было так просто: $obj = $e->getResponseBody(); echo $obj->errors[0]->detail; // output Card declined

Zac Ram 28.06.2018 22:31

да, вы прибили это

lovelace 28.06.2018 22:32

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