当前位置: 首页 > Web前端 > HTML

微信网站授权

时间:2023-03-29 12:57:18 HTML

微信网页授权流程大致分为三步。具体文件可以在这里查看。我画了如下流程图:下面是代码实践的第一步:用户同意授权,必须先调用/auth接口获取code,传入需要的参数url和scope。(这个是参数名)请求方式:GETurl是回调地址作用域有两个可选参数snsapi_base只能获取用户进入页面的openid,用户无感知,调用静默授权snsapi_userinfo可以获取页面的基本信息用户,但需要用户接受,称为手动授权。具体区别如下图,可以去微信文档查看第二步:兑换网页授权access_token的代码这里以手动授权为例。获取微信code后,请求/getUserInfo请求方法:GET请求参数:code,需要请求/auth获取code首先,如果你请求/auth时传入的scope为snsapi_userinfo,则返回微信个人信息,包括微信名称、性别、所在地、国籍、头像等,如下{"openid":"OPENID","nickname":NICKNAME,"sex":"1","province":"PROVINCE","city":"CITY","country":"COUNTRY","headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46","privilege":["PRIVILEGE1""PRIVILEGE2"],"unionid":“o6_bmasdasdsad6_2sgVt7hMZOPfL"}但是如果scope是snsapi_base,请求成功时只会返回用户的openidPS:请求/getOpenId,/getUserInfo成功时会返回access_token,但是这个access_token和开发中的access_token不一样微信服务器的,一个是微信跟服务器打交道(微信票务服务),一个是微信网页的OAuth2.0服务(网页授权)第三步:请求userInfo拿access_token和openid去请求微信官方接口http:GET(请使用https协议)https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN返回openid、昵称、性别、省份、城市、国家、headimgurl和其他信息,用openid和你要的数据返回原来的/auth参数实战中的url上,先调用/auth接口,传入参数url和scope请求接口:http://192.168.230.209/授权?url=http://192.168.230.209/home&scope=snsapi_userinforedissaveurl=http://192.168.230.209/home即最终授权完成获取数据后返回的前端地址判断参数范围.如果是snsapi_userinfo,用户点击授权后会跳转到/getWxUserInfo界面;如果是snsapi_base,静默授权后会跳转到getOpenId接口。我们传递的scope是snsapi_userinfo,所以请求成功后会有一个授权页面,点击“同意”会跳转到页面http://192.168.230.209:8888/api/wechat/getWxUserInfo?code=081UcAFa1s1OAz0o7wGa1wb8vG1UcAFX&state=123PS:http://192.168.230.209:8888/api/wechat为后台服务地址,getWxUserInfo从ctx.request.query中获取code进行路由(即请求接口),并拿code去请求access_token服务。access_token服务也是微信官方提供的一个方法。获取code后,请求以下链接获取access_token:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code请求成功,获取access_token和返回值中的openid,请求userinfo接口,上面已经介绍过了,这里不说明了,这里需要说明的是,如果请求access_token的返回码是40029,说明access_token已经过期了,我们需要刷新access_token得到userinfo的返回值,在redis中本来就存在的url上拼接openid,headimgurl等就可以了。这里需要说明一下,我们需要先配置OAuth2.0网页授权的回调页面域名。类似这种总结,要知道微信网页开发不同于调用微信的JS-SDK,也不同于微信服务器端开发。可以说一开始坑的比较少,不会遇到像JS-SDK那样的各种错误。只知道是一个获取openid(和微信个人信息)的服务