一种必须关注公众号才能参加活动的方案介绍

到现在公司的微信公众号已经做了大概4个活动了吧以此来吸引粉丝,为了拉来更多的粉丝,领导要求参加活动的用户必须关注我们的公众号才行

研究了下微信公众平台提供的文档,没有提供相应的接口来判断用户是否关注了公众号

我们的公众号类型是订阅号,所以不具有使用微信登录接口的功能,所以借助微信提供的接口来实现这个功能的方案行不通了。

经过一番研究,实现了一个方案,目前看来效果还是可以的,下面简单介绍下

使用微信的开发者模式,自己的后台把微信的消息接收过来

步骤:

1.用户在微信公众号回复关键字,比如:’活动’,或者点击菜单’参加活动’

2.自己的后台收到用户发来的消息 后台可以获得用户的openid,这个openid就是我们整个方案的关键

这个openid对于一个公众号来说是唯一的,我们用这个openid来判断用户,如果以前没有记录过这个用户opendid,

就在数据库里面插入一条记录,如果有的话,就返回

3.经过步骤2的操作,我记录下来了用户的opendid,然后需要给你用户一个反馈

因为我用的是nodejs,我用的是wechat这个模块

项目地址: https://github.com/node-webot/wechat

返回客户端消息:

res.reply([
      {
          title: '参加活动',
          description: '参加活动',
          picurl: 'http://www.xxx.com/image.png',
          url: 'http://www.xxx.com/cacheIndex?openid=' + openid
      }
]);  

上面的返回结果中的url是返回给用户后,用户点击后跳转的页面

这里我们定义的这个地址后面的定义了一个参数,openid就是这个用户的在微信对于我们这个公众号的里面的唯一id

当然这里你可以不实用opendid,你可以使用自己逻辑中的唯一id,只要能确定用户的唯一性即可,例如userid

4.当用户点击公众号返回的消息,比如 http://www.xxx.com/cacheIndex?openid=xxxxxx

我们的工程处理这个响应:

exports.cacheIndex = function(req, res, next){

  var openid = req.query.openid;
  var shareid = ''; 

  if(openid){
  //todo 判断opendid是否正确 如果正确的话,将openid 种再浏览器的cookie里面去
      res.cookie('openid', openid,
          {path: '/', maxAge: 1000 * 60 * 60 * 24 * 365, signed: true, httpOnly: true}); //cookie 有效期30天
  }
  var cookie_shareid = req.cookies.shareid; 

  if(!!cookie_shareid){
      //todo 到分享页面上去
  }else{
      res.redirect('personal'); //到我的页面上去
  }
}  

上面代码是处理这个响应的,主要就是获取到openid,然后判断openid的值是不是正确的,如果正确,把opendid种在浏览器的cookie里面去

因为我们的活动主要是为了拉粉丝,一个人参与过后,需要分享给别人,让别人帮助他,他才能获取更高的积分或者奖励

所以当一个没有关注过我们公众号的用户访问别人分享的页面,他这时是没有办法参加的,所以js记录下这个分享页面的id,然后在他重复上面的步骤

参与活动的时候,在这个方法里面,判断cookie里面是否有分享页面的id,如果有的话,验证完opendi后,会直接跳转到用户刚才访问的分享页面上去

到此,一个必须关注公众号才能参加活动的流程已经完成,下面就是用户关注以后,参与活动的逻辑了,和本文没有关系了

这种方案的缺点是用户必须在微信公众号里面回复关键字,或者点击菜单,才能实现。