这个适合技术宅不想自己的作品(网站、软件等)被白嫖。
所以我们希望用户关注公众号后可以使用、下载,如果取消关注立马封号不可用。
这就牵扯到对用户公众号关注状态的可知性。这个在订阅号和服务号都有权限
官方文档里描述了这个事件的场景
在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息。其中,某些事件推送在发生后,是允许开发者回复用户的,某些则不允许,详细内容如下: 目录 1 关注/取消关注事件 2 扫描带参数二维码事件 3 上报地理位置事件 4 自定义菜单事件 5 点击菜单拉取消息时的事件推送 6 点击菜单跳转链接时的事件推送 关注/取消关注事件 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。为保护用户数据隐私,开发者收到用户取消关注事件时需要删除该用户的所有信息。 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。 关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。 假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。 推送XML数据包示例: <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml> 参数说明: 参数 描述 ToUserName 开发者微信号 FromUserName 发送方帐号(一个OpenID) CreateTime 消息创建时间 (整型) MsgType 消息类型,event Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅)
第一条就是关注/取消关注。
所以我们需要做如下步骤:
用户打开页面,去本地的localstorange或本地文件里去查找openid 如果查得到就通过API查询数据库种用户的关注状态。如果关注状态是已经关注则正常使用,否则不可用。
如果本地没有openid,那就生成一个随机的UUID,并且通过微信接口生成一个带参数的二维码,参数里填写UUID
发起一个查询的轮询线程 使用UUID作为参数查询
用户扫码关注后,微信推送openid和自定义参数UUID到服务器端。
第三步的轮询此时通过UUID查询到了openid以及关注状态为已关注。
软件正常使用,记录openid到网页localstorange或本地文件
追加知识:
扫描带参数二维码事件 用户扫描带场景值二维码时,可能推送以下两种事件: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。 如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。 1. 用户未关注时,进行关注后的事件推送 推送XML数据包示例: <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[qrscene_123123]]></EventKey> <Ticket><![CDATA[TICKET]]></Ticket> </xml>
参考微信官方文章:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
基本步骤如上面。本文纯手打,转载请标注本文地址。
原创申明:本文章为三叔原创。