源码 vendor/socialiteproviders/weixin/Provider.php 中关于 openid 为空的问题?

源码文件vendor/socialiteproviders/weixin/Provider.php
其中,getAccessTokenResponse($code)函数:
file
如果在只提供授权码$code的情况下,如何避免"Undefined index: openid"错误?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 14
liyu001989

那就是你的 code 错了啊,啥都没拿到,code 只能用一次,你是教程中哪一步出现的问题,截个图说明一下

5年前 评论

@liyu001989
通过微信WEB开发工具获取code:
file
将code传入:

file
出现以上错误。

5年前 评论
liyu001989

你的 app_secret 配置正确了吗,上一节中在 tinker 中你能测试通过?

5年前 评论

@liyu001989 app_secret 是正确的。且通code能获得正确的access_token和openid:

file

5年前 评论
liyu001989

app_secret 是正确的,并不代表你配置正确了,也并不代表 socialite 能正确获取到配置,所以你在 tinker 中试了吗?

file

5年前 评论

@liyu001989 我确认了,app_secret在.env中设置是正确。

file

5年前 评论
liyu001989

这位大哥,你是拒绝在 tinker 执行一下截个图给我看看吗?

file

5年前 评论

@liyu001989 提示如下:
Psy Shell v0.9.6 (PHP 7.1.6 — cli) by Justin Hileman

$code = '061OUCs02ZLX1015XZp02dzGs02OACs4'
=> "061OUCs02ZLX1015XZp02dzGs02OACs4"
$driver = Socialite::driver('weixin');
=> SocialiteProviders\Weixin\Provider {#3203}
$response = $driver->getAccessTokenResponse($code);
=> [
"access_token" => "11_97dWYrNK2Q1-gMWre-KiKBWlRqbe0S8ZnKzqn-bofddih-P6MDGXbz1yVsNLy--3APNVwDGJBl-Ao2X3N9X7GA",
"expires_in" => 7200,
"refresh_token" => "11m-JEjfBypGhh3gTiH96r7WNtxpzL-4TXVxT8GBM8BGqf2C4oKWZNBCneMOSQ5ACjxSOVAXMJVu5UuFT0B79-Q",
"openid" => "o4yzX1U3Y_ufd7e64OAPkHkrjSQU",
"scope" => "snsapi_userinfo",
]
$driver->setOpenId($response['openid']);
=> null
$oauthUser = $driver->userFromToken($response['access_token']);
GuzzleHttp/Exception/ConnectException with message 'cURL error 35: Bulk data encryption algorithm failed in selected cipher suite. (see http://curl.haxx.se/libcurl/c/libcurl-erro...)'

5年前 评论
liyu001989

对啊 你这样一步一步来能节省多少时间,问题已经很明显了,根本不是 Undefined index: openid 的问题,只要你是新生成的 code,就能换取到 access_token 以及 opneid,你看到数据了吧。最后一步通过 access_token 换取用户信息这一步,为什么会 curl 35 错误,你的环境是什么?为什么不用 homestead?

https://stackoverflow.com/questions/367874... 升级你的 curl

5年前 评论

@liyu001989 谢谢你的回复。
我更新了curl到最新版本。

file
仍然出现同样的错误。
环境如下:
centos7.5
PHP7.16
nginx/1.12
5.5.52-MariaDB
curl 7.59
不用homestead的原因,是因为,我计划在服务上部署这个应用。
另外,即使我没有更新curl,我通过postman ,提交access_token及openid,可以拿到微信的用户数据的。

5年前 评论
liyu001989

用了 homestead 你就无法在服务器上部署这个应用了?

为什么要求用 homestead 就是为了统一环境,让你先掌握技能,而不是时间浪费在环境问题上面,你要学的是如何写代码,如何快速的完成功能,剩下的一切都是环境问题,环境问题有它自己的解决方案,docker?环境部署脚本?

我又没法直接去你的服务器上调试,请不要在这种事情上浪费大家的时间,我只负责 在 homestead 环境下,代码逻辑正确,可以快速跟着实践。

curl 是curl ,postman 是postman,两者之间半毛钱关系都没有,你是为了证明你 postman 请求成功了,就不应该报错?教程中的代码逻辑有问题?

5年前 评论
CaiBird008

@liyu001989 你好! 我在tinker调试的时候能够正确通过,但是在postman测试的时候是401。 微信code只用一次

5年前 评论
CaiBird008

@gan 请问你解决了吗

5年前 评论

在测试环境 homestead下是没有问题的,但在生产环境下,没有解决。

5年前 评论

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