【问题标题】:How to consume 3rd party RESTapi response into database Laravel如何将 3rd 方 REST api 响应消费到数据库 Laravel
【发布时间】:2018-07-21 01:28:37
【问题描述】:

在我的 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”值保存到plaid_access_token 列下的users 表中。我继续改变我的功能来尝试这样做。

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()才能访问它的属性。

标签: php laravel rest


【解决方案1】:

正如我所见,$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(...这一行
【解决方案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;
}

【讨论】:

  • 对他们为什么应该尝试你的答案的一些解释将提高这个答案的质量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2019-10-12
相关资源
最近更新 更多