Как использовать сторонний ответ RESTapi в базе данных Laravel

В моем проекте Laravel я звоню на сторонний api и пытаюсь использовать некоторые данные из ответа json в моей базе данных.

Моя функция

public function addPlaid(Request $request) // adds a plaid user
{
  $username = $request->input('bank_username');
  $password = $request->input('bank_password');
  $pin = $request->input('pin'); // set null
  $type = $request->input('type');
  $authUser = Plaid::addAuthUser($username, $password, $pin, $type);

  return $authUser;
}

Мой ответ

{
    "type": "device",
    "mfa": {
        "message": "Code sent to [email protected]"
    },
    "access_token": "test_chase"
}

Здесь я хочу сохранить значение access_token из ответа JSON в моей таблице users в столбце plaid_access_token. Я продолжил изменять свою функцию, чтобы попытаться сделать это.

public function addPlaid(Request $request) // adds a plaid user
{
  $username = $request->input('bank_username');
  $password = $request->input('bank_password');
  $pin = $request->input('pin'); // set null
  $type = $request->input('type');
  $authUser = Plaid::addAuthUser($username, $password, $pin, $type);
  $authUserData = json_decode($authUser['access_token']);
  User::where('user_id', '=', 51)->update(['access_token' => $authUser->access_token]);
  return $authUser;
}

но теперь я получаю сообщение об ошибке Trying to get property 'access_token' of non-object Я пытаюсь выяснить, не придерживаюсь ли я неправильного подхода, сохраняя его с помощью этой строки кода User::where('user_id', '=', 51)->update(['plaid_access_token' => $authUser->access_token]);.

Примечание: я использую пользователя 51, поэтому я знаю, где он сохраняется.

Если $authUser - это json, нужно ли вам использовать json_decode() перед доступом к его свойствам.

Nigel Ren 20.07.2018 10:51
Стоит ли изучать 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 и хотите разрабатывать...
0
1
694
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуйте так:

public function addPlaid(Request $request) // adds a plaid user
{
  $username = $request->input('bank_username');
  $password = $request->input('bank_password');
  $pin = $request->input('pin'); // set null
  $type = $request->input('type');
  $authUser = Plaid::addAuthUser($username, $password, $pin, $type);
  if ($authUser){
       User::where('user_id', '=', 51)->update(['plaid_access_token' => $authUser["access_token"]);
  }
  return $authUser;
}

Некоторое объяснение того, почему они должны попробовать ваш ответ, улучшило бы качество этого ответа.

Nigel Ren 20.07.2018 10:50
Ответ принят как подходящий

Как я вижу, $authUser - это строка JSON, поэтому вам нужно декодировать ее перед доступом к контенту (используя json_decode()) ...

  $authUser = Plaid::addAuthUser($username, $password, $pin, $type);
  $authUserData = json_decode($authUser);
  User::where('user_id', '=', 51)->update(['plaid_access_token' => $authUserData->access_token]);

Если вместо этого данные представляют собой массив, вам нужно использовать нотацию массива, а не объектную нотацию - $authUser['access_token'] ...

  $authUser = Plaid::addAuthUser($username, $password, $pin, $type);
  User::where('user_id', '=', 51)->update(['plaid_access_token' => $authUser['access_token']]);

Я получаю сообщение об ошибке json_decode() expects parameter 1 to be string, array given in

jermayne williams 20.07.2018 19:22

ОК - попробуйте обновленный ответ - используя $authUser['access_token']

Nigel Ren 20.07.2018 19:24

Обновил вопрос. Я все еще получаю ту же ошибку

jermayne williams 20.07.2018 19:29

Пожалуйста, посмотрите обновленный ответ, вам не нужно делать json_decode(), просто обновите строку User::where(...

Nigel Ren 20.07.2018 19:31

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