overtrue/socialite

2.x 微信公众号网页授权时如果code过期会报错

xiaopp opened this issue · 5 comments

overtrue/socialite/src/Providers/AbstractProvider.php:448
parseAccessToken 错误单是微信的错误返回,而是抛出了整个错误页面,个人感觉不太友好。
3.0应该也有这个问题。

3,0 中用 Code 换取 Token 对外公开的接口是返回的将 http response 进行处理之后的数组。详细请看源码:

public function tokenFromCode($code): array

在对响应处理过程中集成判断了该次响应是否如愿含有token,不然的话会抛出异常。

protected function normalizeAccessTokenResponse($response): array

刚看了 2.0 也是在解析时报错,当比之下 3.0 更优在于能根据平台要求自定义响应返回的 access_token 字段名称。
如果您要做验证判断,无非就是 if else,
采用 try ... catch... 形式可以实现一样的的逻辑。

p.s. 本就是错误信息,故采用异常本人觉得是最优雅的方式。3.0 开始对函数的输入输出都进行了严格限定,故如果返回的是数组,如何判断该次请求报错,对返回数组用 empty(response[''err]) 像 golang 那样每次都对返回值做报错判断吗?这个函数这样,那其他函数都这样吗?本人觉得反而是更不友好的。

我只是希望在得到微信的错误返回以后中断后续流程打印返回结果,不是说要根据返回值做一些其他判断

我只是希望在得到微信的错误返回以后中断后续流程打印返回结果,不是说要根据返回值做一些其他判断

try {
   // 这里可能出错
} catch(\Throwable $e) {
   // 当抓取到错误时做你想做的事,比如打印日志,修改返回结果,或者中断逻辑等
}

我在OAuthAuthenticate的if ($request->has('code'))里面做了个try...catch的跳转,目前看来可以做到code过期重新获取