如何将第三方RESTapi响应吸收到数据库Laravel中

时间:2018-07-20 08:42:49

标签: php laravel rest

在Laravel项目中,我正在调用第3方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 t...t@plaid.com"
    },
    "access_token": "test_chase"
}

在这里,我想将JSON响应中的“ access_token”值保存到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,所以我知道它的保存位置。

2 个答案:

答案 0 :(得分:2)

正如我所见,$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']]);

答案 1 :(得分:0)

尝试这种方式:

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;
}