• 首页
  • nodejs
  • 微信第三方活动 关注微信公众号才能参与

微信第三方活动 关注微信公众号才能参与

wt.jpg

#产品要求:必须先关注公众号才能参与活动

###上面需求涉及到的几个点: 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 . 如果满足上面的条件,说明此用户已经关注公众号,反之需要用户先关注公众号才能浏览页面.

未完待续~~

出自:微信第三方活动 关注微信公众号才能参与



回到顶部