网上搜索到的文章大多在讲unionId、openId之类的关联,这里很简单就是一个需求:获得用户是否关注关联公众号的状态,这里简单说一下具体怎么做。
(注意这里的公众号必须是服务号,如果是订阅号的话就只能通过在公众号中与用户互动,比如点击菜单,回复等获取openid,然后再获取到状态)
总体思路就是利用web-view跳转到公众号授权域名下,在该web-view下获取到用户在关联公众号下的openId,再通过openId查询到用户信息,最后通过web-view的jssdk跳转回小程序,带上是否关注公众号的标识即可。
设置
首先要设置两个东西,公众号的授权域名和小程序开发下的业务域名,公众号授权域名即授权该域名可获得用户信息回传,小程序开发下的业务域名需要设置与公众号授权域名同样的域名。
公众号授权域名设置:https://www.jianshu.com/p/162fa4b83ea5
小程序开发业务域名设置:https://www.php.cn/xiaochengxu-446622.html-
小程序web-view跳转公众号授权页
跳转url:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
这里是各个参数的具体含义:
注意跳到web-view之后实际就与小程序开发无关了,这里就是在进行公众号的开发,具体可以参考一下公众号开发的官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
跳转到授权页需要用户同意授权,同意后页面跳转到 redirect_uri/?code=CODE&state=STATE,这里拿到了code。 通过code获取access_token,请求返回用户在公众号上的openid
拿到code后,请求url: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
这里的appid和serect都是属于公众号的。
随后返回json数据:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
这样就拿到了当前用户在公众号上的openid
使用openid获取用户信息
请求url: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
注意这里的access_token是上一步中获取到的access_token,而不是基础支持的access_token。
这一步中返回的json数据中就包含了用户是否关注公众号的信息。利用jssdk跳转回小程序(带是否关注公众号参数)
wx.miniProgram.switchTab({url: `/pages/index/index?isSubscribe=${isSubscribe}`})