В моем проекте 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, поэтому я знаю, где он сохраняется.






попробуйте так:
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;
}
Некоторое объяснение того, почему они должны попробовать ваш ответ, улучшило бы качество этого ответа.
Как я вижу, $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
ОК - попробуйте обновленный ответ - используя $authUser['access_token']
Обновил вопрос. Я все еще получаю ту же ошибку
Пожалуйста, посмотрите обновленный ответ, вам не нужно делать json_decode(), просто обновите строку User::where(...
Если
$authUser- это json, нужно ли вам использоватьjson_decode()перед доступом к его свойствам.