PHP 如何做微信登录
现在很多小程序、网站都喜欢加微信登录,毕竟用户不用填一堆信息,点一下就注册了,体验特别好。如果你用PHP做网站或小程序,要实现微信登录也不难,跟着步骤走,普通人也能搞定,还能避开很多新手容易踩的坑。
先搞懂微信登录的核心逻辑
很多人一上来就敲代码,结果绕了大弯,其实微信登录的本质是“信任传递”:用户打开你的页面,点微信登录按钮,会跳转到微信的授权页,用户确认允许后,微信会给你发一个临时的“授权码”,你用这个码换微信的“用户唯一标识(openid)”,再拿openid去查自己网站的数据库,判断是新用户还是老用户,最后给用户发个登录凭证(比如session),整个流程就完成了。

举个生活化的例子:你去陌生的咖啡店,老板要确认你是不是真的能进,不会让你瞎闯。微信就是那个“门口的登记员”,你跟登记员说要进这家店,登记员先问你“是不是本人”,你点头同意后,登记员给你一张临时的纸条(授权码),你把纸条给老板,老板拿着纸条去后台查你的身份(微信的用户信息),确认后就给你开门(发登录凭证)。
第一步:准备好必要的工具和配置
用PHP做微信登录,首先得有两个基础东西,缺一个都跑不起来:
- 微信开放平台的账号:不管是网站还是小程序,都要去微信开放平台注册(小程序的话用小程序后台的“开发管理”就行),还要配置“授权回调域名”——就是你网站上用来接收微信返回数据的那个域名,比如你的网站是
www.nihao.com,那回调域名得填www.nihao.com,不能带http://或https://,也不能加路径,不然微信发回来的数据你接不到。 - PHP的开发环境:用WAMP、XAMPP这种一键安装的就行,不用自己搭Apache、PHP、MySQL,新手省时间。另外要记得开启PHP的
curl扩展,因为后面要跟微信的服务器发请求,这个扩展大部分环境默认开了,要是没开,去php.ini里把;extension=curl前面的分号去掉,重启服务就行。
第二步:写前端按钮和授权跳转代码
前端部分很简单,就是个“微信登录”的按钮,点了之后跳转到微信的授权页。这里要注意,不能直接跳,得按微信要求的格式拼接链接。比如你用小程序的话,链接要带小程序的appid(微信给你的唯一标识)、redirect_uri(就是刚才配置的回调域名,要转成URL编码,不然特殊字符会乱码)、response_type=code(固定值)、scope=snsapi_userinfo(要用户昵称头像的话用这个,要是只拿openid用snsapi_base就行)。
举个实际的链接例子,大概是这样的:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的appid&redirect_uri=你的回调链接&response_type=code&scope=snsapi_userinfo#wechat_redirect
把这个链接放在按钮的跳转事件里,用户一点,就会跳微信的授权页了。
第三步:后端用PHP处理授权码,拿用户信息
用户点了确认后,微信会跳回你配置的回调页面,同时带了一个code参数,这就是刚才说的“临时纸条”。接下来用PHP的curl把这个code换成微信的用户信息,这里要用到appid和appsecret(微信给你的密钥,别泄露,跟银行密码似的)。
请求的链接格式是固定的:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的appid&secret=你的appsecret&code=刚才拿到的code&grant_type=authorization_code
用curl发这个GET请求,微信会返回一个JSON数据,里面有access_token(访问令牌)、openid(用户的唯一标识,这是你存数据库的关键),要是你选了snsapi_userinfo,还会有用户的昵称、头像这些信息。
拿到这些数据后,你就可以操作数据库了:先查有没有这个openid的记录,要是有,就给用户开个session,标记他已登录;要是没有,就把openid、昵称、头像这些存进去,再给用户开session,完成注册加登录。
第四步:避开通新手最容易踩的坑
很多人折腾半天不成功,都是踩了这几个坑:
第一,回调域名配置错了,比如加了http://或者带了路径,微信根本找不到你的后端页面;
第二,appsecret泄露了,别人用你的appid和secret也能拿用户信息,要存在服务器的配置文件里,别写在前端代码里;
第三,code用了一次就失效,要是你重复拿同一个code请求,微信会返回错误,所以后端要处理好,要是失败就提示用户重新点登录。
最后再提一句,要是你是做小程序,流程跟网站差不多,只是回调域名的配置是在小程序后台的“开发设置”里,不用去开放平台,而且用户在小程序里点登录,直接弹授权框,不用跳转到外部页面,更流畅。