ThinkPHP中微信授权登录具体是如何实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计892个文字,预计阅读时间需要4分钟。
ThinkPHP+ 没有内置
怎么拼出正确的微信授权跳转 URL
入口控制器里不能靠 config() 直接拼 URL,必须严格 urlencode 所有参数,尤其是 redirect_uri。微信要求它和公众号后台填写的值**完全一致**:协议、域名、端口、路径、结尾斜杠都不能差。
-
scope=snsapi_userinfo才能拿到昵称头像;scope=snsapi_base只拿得到 openid(静默授权) -
state必须是服务端生成并存入 session 的随机字符串,回调时比对,防 CSRF - URL 示例:
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=".config('wechat.app_id')."&redirect_uri=".urlencode('http://localhost:8000/callback/wechat')."&response_type=code&scope=snsapi_userinfo&state=".$_SESSION['wx_state']."#wechat_redirect" - 别漏掉末尾的
#wechat_redirect,否则在微信内打开会白屏
回调里怎么安全换 token 和拉用户信息
收到 code 后必须立刻请求换 token,不能缓存、不能复用、不能跨请求使用 —— code 5 分钟过期且仅能使用一次。
本文共计892个文字,预计阅读时间需要4分钟。
ThinkPHP+ 没有内置
怎么拼出正确的微信授权跳转 URL
入口控制器里不能靠 config() 直接拼 URL,必须严格 urlencode 所有参数,尤其是 redirect_uri。微信要求它和公众号后台填写的值**完全一致**:协议、域名、端口、路径、结尾斜杠都不能差。
-
scope=snsapi_userinfo才能拿到昵称头像;scope=snsapi_base只拿得到 openid(静默授权) -
state必须是服务端生成并存入 session 的随机字符串,回调时比对,防 CSRF - URL 示例:
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=".config('wechat.app_id')."&redirect_uri=".urlencode('http://localhost:8000/callback/wechat')."&response_type=code&scope=snsapi_userinfo&state=".$_SESSION['wx_state']."#wechat_redirect" - 别漏掉末尾的
#wechat_redirect,否则在微信内打开会白屏
回调里怎么安全换 token 和拉用户信息
收到 code 后必须立刻请求换 token,不能缓存、不能复用、不能跨请求使用 —— code 5 分钟过期且仅能使用一次。

