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

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
命令行正常

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 5
liyu001989

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

file

其次一个 code 只能使用一次

file

4个月前
gotophp

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

file
报异常

4个月前
liyu001989

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

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

4个月前
gotophp

好的 谢谢大佬

4个月前

一开始也有这样的疑问,翻了一下源码, 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;
    }
3个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!