如果单独用 code 请求会报 message": "参数错误,未获取用户信息没有 openid?

file

try {
            if ($code = $request->code) {
                $response = $driver->getAccessTokenResponse($code);
                $token = array_get($response, 'access_token');
            } else {
                $token = $request->access_token;

                if ($type == 'weixin') {
                    $driver->setOpenId($request->openid);
                }
            }
            $oauthUser = $driver->userFromToken($token);
    } catch (\Exception $e) {
            return $this->response->errorUnauthorized('参数错误,未获取用户信息');
    }

单独code 请求 后续也没有判断

file
命令行正常

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
liyu001989
最佳答案

请先跟着上一节在 tinker 中调试代码

file

其次一个 code 只能使用一次

file

5年前 评论
讨论数量: 7
liyu001989

请先跟着上一节在 tinker 中调试代码

file

其次一个 code 只能使用一次

file

5年前 评论

试了 命令行测试没有问题 可以返回数据 但是携带code请求 直接报错

file
报异常

5年前 评论
liyu001989

这个错就是无法通过 code 获取数据,命令行能调试成功,那么只能是code有问题,一个code只能使用一次。

命令行中的代码和 controller 中的代码一样的,你加日志调试一下

5年前 评论

一开始也有这样的疑问,翻了一下源码, getAccessTokenResponse 方法中获取到token后会设置openId,

public function getAccessTokenResponse($code)
    {
        $response = $this->getHttpClient()->get($this->getTokenUrl(), [
            'query' => $this->getTokenFields($code),
        ]);

        $this->credentialsResponseBody = json_decode($response->getBody(), true);
        $this->openId = $this->credentialsResponseBody['openid'];

        return $this->credentialsResponseBody;
    }
5年前 评论

这问题也不知道解决了没, 也没找到答案啊

5年前 评论

获取新的code并使用,可解决

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!