首先,我们大致描述微信智能 WiFi 的使用场景,在某个公共场所,能够提供一定的开放 WiFi 覆
盖,当用户连接上 WiFi 之后,用户会被引导到一个登陆页面,在登陆页面可以通过关注热点提
供商的微信公众号的方式来进行验证,如关注,则通过验证,放行通过,可以上网;如未关
注,则引导关注,关注成功后放行。

流程如下:

该流程主要涉及到的问题点如下:

  • 基本认证流程
  • 如何判断当前用户是否关注了提供方的微信公共账号?
  • 已经关注的用户可以无感地自动访问网络吗?
  • 如何实现微信和 MAC 地址绑定?

下面就这几个几个问题进行详细说明:

基本认证流程

  • 用户设备(手机、Pad、笔记本电脑)连接到 WiFi 热点
  • 提供热点的终端节点(路由器/AP)上的 WiFiDog 拦截用户网络,将用户 HTTP 请求转向认证服务器
  • (可跳过)云端 AC 服务器返回网页提醒用户进行认证
  • (可跳过)用户在网页或APP里完成认证(开放认证、粉丝认证、自助定制等)
  • AC 服务器通知终端节点放行

流程如下:

这里面的主要技术细节在于如何实现用户访问流量的监控、拦截和转发,推荐的技术选型为:
OpenWRT + WiFiDog + RADIUS

OpenWRT 是开源的智能路由器操作系统,基于 Linux,可以方便的安装应用和进行二次定制开
发。

WiFiDog 是一个开源的 WiFi 热点认证服务器(Captive Portal),可以安装在 Linux 上,也可嵌
OpenWRT 中,能够实现流量的监控、拦截和转发,并提供网页认证接口,是实现该方案的核
心技术。

RADIUS (可选),远端用户拨入验证服务,可以和 WiFiDog 结合实现网页认证。

如何判断当前用户已经关注了商户的微信公众账号

前提是该微信公众账号已启用开发者模式。

主要实现思路有两种:

  1. 不需要使用微信公众平台高级接口

    该思路主要是通过用户和公众账号进行互动来实现,用户通过点击或发送某些信息,
    如“免费上网”,来产生一个 URL,该 URL 中带有一个对应该设备(用户)的唯一的,一
    次性的 token,用户通过点击该 URL 跳转到认证服务器页面,认证服务器获得该 token,然
    后通知 AP 放行该设备。

    该思路的核心是既然用户可以和公众账号互动,则默认用户已经关注该公众账号。

  2. 需要使用微信公众平台高级接口

    该思路实现时又分为两种情况:

  • 调用用户信息接口 获取用户基本信息( UnionID )机制

    该方法也依赖于用户和公众账号的互动,和前面的方案区别不大,没有太大意义。

  • 调用 OAuth-Basic 接口 网页授权获取用户基本信息

    该方案需要注意的是,该操作必须在微信内嵌浏览器中实现,而且只对服务号开放。

    用户浏览器访问网页的请求会被智能WiFi拦截并强制跳转到指定的页面,该页面可以加
    入微信高级接口 OAuth-Basic 的调用,获取当前用户的 OpenID,然后在服务器保存的该公
    众账号的粉丝列表中匹配是否有对应项,已有则放行设备,没有则引导用户关注,然后
    放行。

已关注用户是否可以无感地自动访问网络?

上个问题里的方法1依赖于用户和公众账号的互动,不可能实现无感访问,方法2则可能实现无
感访问,但难点在于如何取得用户的唯一标识,获取绑定用户的MAC地址是一种途径,具体细
节后面讨论。

虽然有可能实现无感访问,但每次用户进入热点区域,能够给用户展示一定的内容对我们更加
有利,且可以衍生出更多的玩法。

如何实现微信和 MAC 地址绑定?

WiFiDog 进行用户认证的时候,会附带提供用户设备的MAC地址,我们可以在服务器上保存用户
和 MAC 地址的对应关系表,当用户取消关注时,则清楚该用户对应的 MAC 地址,实现关注可以上
网,取消关注则不可以上网的功能。

有没有更多的玩法

基础玩法

这类玩法一般基于认证页面的扩展,针对我们目前的业务主要有:

  • 在认证页面展示新闻头条
  • 新业务推广
  • 应用推广

高阶玩法

一种思路是对用户浏览行为进行采集、建模和分析,对技术等能力要求较高,且伴随着一定的
用户隐私风险。

  • 精准新闻推送
  • 精准广告推送
  • 和微信的内容进行结合,实现更好的用户体验

-eof-

Comments
Write a Comment