微信第三方活动 关注微信公众号才能参与
文章目录
#产品要求:必须先关注公众号才能参与活动
###上面需求涉及到的几个点:
1.access_token中继服务
2.第三方页面授权
3.获取微信用户信息
前面有一篇 node.js定时获取access_token
那么根据此博文我们可以解决 access_token 中继服务的创建
第三方页面授权
前提:必须微信服务号 且 第三方站点域名设置为微信管理后台安全域
获取微信用户信息
前提:微信管理后台开通开发者模式,且微信回调接口调试无误.
如何在页面授权时判断用户是否关注
首先拉取当前公众号下所有关注用户 (存储用户 openid )
然后根据存储的所有用户openid 去获取用户详情 (昵称,头像,城市,性别,是否关注,unionid )unionid 需要在微信开放平台绑定微信公众号.
//是否关注字段 是一个布尔值,当用户取消时,此值更新为 false ,当用户再次关注时,此值为 true .
微信回调接口里监听关注和取消事件.
获取微信公众号下所有关注用户的 openid
接口方法: https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
ACCESS_TOKEN 前面博客提到了,点击上面的链接查看.
NEXT_OPENID 是下一次获取openid的起始id ,当第一次调用,此值为空,以后的调用,此值为下一次请求时 next_openid 是值.
根据 openid 和 access_token 获取用户详情
接口方法: https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
返回用户详情
微信回调监听关注和取消事件
wechat开发微信回调接口
详细的代码实现点击上面链接查看.
下面截取一部分代码:
event(function (message, req, res, next) {
switch (message.Event) {
case 'subscribe':
var openid=message.FromUserName;
subscribe(openid,function(err,result){
//订阅事件中,判断数据库是否有此 openid ,如果有,更新此记录的 是否关注 字段为true ,如果没有此 openid ,获取用户详情 并插入一条新纪录
});
res.reply('欢迎关注一介布衣');
break;
case 'unsubscribe':
var openid=message.FromUserName;
unsubscribe(openid,function(err,result){
//取消事件中, 将数据库中此记录的 是否关注 字段更新为 false
});
res.reply('亲,请不要离开我!!');
break;
case 'CLICK':
//点击菜单事件
console.log(content);
break;
case 'scan':
//扫描二维码事件
res.reply('欢迎加入一介布衣');
default :
res.send('');
}
}
第三方页面微信授权
微信在第三方页面授权中,也有一个接口是获取用户信息.
但是和上面微信开发接口中 获取用户信息是不同的2个接口.
接口地址: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
在微信文档中,此方法的名称叫 "网页授权获取用户基本信息"
网页授权一共分为4步:
1 第一步:用户同意授权,获取code
2 第二步:通过code换取网页授权access_token
在第二步返回值中:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
从上面的返回值我们可以拿到 openid
我们通过此 openid 查看数据库中是否有此记录,如果有,此记录中 是否关注字段 是否为 true .
如果满足上面的条件,说明此用户已经关注公众号,反之需要用户先关注公众号才能浏览页面.
未完待续~~