公众号关联业务系统实现免登录
总体实现方案:基于微信授权获取openid,与本地系统用户关联。
参照微信授权文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
由于业务不需要使用的用户信息,只需要openid,所以使用静默授权的方式:
第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
第二步:通过code换取网页授权access_token
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
具体实现设计:
数据库表:微信用户登录记录表,用于绑定userid(业务系统)和openid(公众号用户唯一标识)
代码实现:通过session保存用户状态。用户在公众号跳转后,前端判断token是否过期,过期则执行如下步骤。
1.用户网页授权,由前端调用微信接口获取code,并截取code,请求后端接口。
2.后端调用通过code换取网页授权access_token接口获取到openid。
3.判断用户是否曾经登录,即微信用户登录记录表是否含有该openid绑定的记录,如有则自动登录,返回token和sessionid,和首页展示的数据给前端。
4.若无则返回错误码,并把openid返回给前端。前端返回到登录页。
5.用户进行登录并把openid带上。登录后后端往记录表插入一条数据。
特殊情况,对于用户在操作页停留过久,session过期后,后端返回异常。前端通过openid调用接口删除微信用户登录记录表记录,并跳转到登录页。
开发过程申请测试号:
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
在微信公众号平台官网可以申请个人测试号用于开发

浙公网安备 33010602011771号