如果单独用 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
命令行正常

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
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年前 评论

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