张未未,王丽,韩爱庆
基于微信服务号的合法身份验证方法设计与实现
张未未,王丽,韩爱庆
(北京中医药大学信息中心,北京 100029)
微信服务号偏重于为每一位关注用户提供交互服务,具有较好的开放性,但不便于用户的分级分类管理;而企业号主要为公司内部提供通讯和移动应用服务,需要先有成员的通讯信息验证才可以成功关注并使用,具有较强的针对性。但企业在使用微信公众号进行运营过程中,既需要对所有潜在用户提供开放性服务,也需要对用户进行分级分类管理,不能单纯的将对外服务和内部活动割裂开来。针对以上问题,介绍了基于微信服务号实现合法身份验证的方法,将企业号可对关注用户进行分级分类管理及提供特定服务的优点应用于服务号之中,同时又保留了服务号原有的开放性特点,从而拓宽了服务号的应用范围,为这两种公众号的集成应用提供了思路。
微信;服务号;企业号;身份验证;OpenID
2012年8月23日,腾讯公司推出微信公众平台,其是微信公众账号所有者(政府、媒体、企业、组织或个人等)进行品牌推广、减少运营成本、提高影响力、与用户进行互动交流及提供服务的平台,公众账号通过消息、事件、菜单等交互方式为用户提供服务[1]。在微信公众平台应用之出,微信公众账号主要分为订阅号和服务号两种类型。其中,订阅号主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息;而服务号则偏于服务交互(类似银行、114等提供服务查询),认证前后都是每个月可群发4条消息[2]。自2014年9月以后,微信公众平台又推出了新的账号类型—企业号,其是微信为企业客户提供的移动服务,旨在提供企业移动应用入口。它可以帮助企业建立员工、上下游供应链与企业IT系统间的连接。企业号主要用于公司内部通讯使用,需要先有成员的通讯信息验证才可以关注成功企业号[3]。
目前,企业和组织一般多会选择使用服务号来实现对外服务,使用企业号来为企业内部员工提供通讯等移动应用服务。而笔者在为企业进行实际公众账号项目开发过程中发现,企业所能提供的对外服务往往是建立在内部员工相互协作的基础上的,也就是说不能单纯的将企业运营的对外服务和内部活动进行割裂。而另一方面,企业在提供对外服务时,也要区分不同的客户群体,是新关注客户还是已合作过的客户,或者可以在服务号中针对不同的客户等级提供不同的服务选项[4]。针对以上实际需求,可以考虑将服务号的对外服务功能与企业号中对于关注用户需进行身份验证的特点相结合来予以解决,方法之一是在服务号中加入身份验证机制。
服务号可以为所有关注的用户提供服务,相较之企业号只能为内部员工或验证用户提供服务来说具有更强的开放性。但这样的开放性又不便于企业对于客户进行分级管理以及提供不同的服务选项,因此需要为服务号加入类似企业号中的关注用户合法身份验证机制。
1.1 基本思路
当用户第一次关注微信服务号时,提示用户进行身份验证。通常要求用户输入具有唯一个人标识的电子信息数据(例如身份证号、电子邮箱地址或手机号码)。将用户所输入的信息与后台数据库已保存的合法用户信息进行比对,如果比对成功,则认为该用户身份合法,并将该用户关注服务号时所使用的个人微信号信息与用户信息一起保存于数据库中,从而完成用户验证过程。当该用户再次使用同一微信号进入企业服务号时,将根据微信号信息自动判断用户身份,从而完成合法用户的自动登录环节,并为该用户提供区别于普通关注用户更多的服务选项。
1.2 用户微信号信息识别
从1.1节基本思路中不难发现,实现身份验证的关键是将用户个人微信号信息与数据库中已保存的用户信息进行绑定,因此能否获取正确并且具有唯一识别性的用户微信号信息将十分重要。当关注者与服务号产生信息交互后,服务号在用户未授权的情况下并不能直接获取用户的微信号等微信注册信息,取而代之的是可获得关注者的OpenID。OpenID是加密后的微信号,每个微信号对每个服务号的OpenID是唯一的[5]。对于不同的服务号,同一微信用户的OpenID不同,获取用户相对于某个服务号的OpenID不需要用户授权[6]。可见OpenID可以作为服务号内对于关注用户的唯一标识。通过将OpenID与已有用户信息绑定保存,便可在用户下次进入同一服务号时,进行OpenID的比较,从而实现已完成合法身份验证用户的自动识别及登录。
1.3 实现方法设计
基于服务号实现身份验证的方法流程,如图1所示。
图1 身份验证方法实现流程
①用户微信关注或进入微信服务号时,获取OpenID。
②判断所获得的OpenID是否已存在于后台数据库中,如果存在则表明用户已完成身份验证,将实现服务号内的自动登录,并可直接使用服务号的全部功能。
③如果获得的OpenID并未存在于后台数据库中,说明用户还没有完成身份验证,可用图文消息提示用户进行身份验证。
④验证过程要求用户输入电子邮箱地址。如果该邮箱地址在后台数据库中有用户信息与之对应,说明该用户身份合法,则向该邮箱发送激活邮件。
⑤用户在规定时间内通过激活邮件完成身份验证过程。验证成功后,用户微信的OpenID将与用户基本信息进行绑定保存,已供后续用户自动登录使用。该用户可以使用服务号中的所有功能
⑥如果通过用户输入的电子邮箱地址在后台并未找到对应用户信息,则说明该用户身份不合法,将只能使用服务号中的部分功能,比如接收图文信息等资讯,而不能与服务号进行交互。
上述身份验证过程使用了邮件激活技术,主要是为防止别人盗用合法用户的电子邮箱地址进行验证。也可以使用输入手机号码和发送验证码的方式来完成验证。
基于以上身份验证方法的设计,笔者已在实际的服务号开发项目中予以实现。该服务号是为某培训机构提供培训信息推广、在线测验及在线评教等服务支持的。如果是非身份验证用户将只能享有培训信息推送功能。但用户身份得到验证后,将可使用服务号的所有功能。
2.1 后台数据准备
该服务号所提供的在线测验功能是针对已报名参加该培训机构线下培训课程的学员而进行的知识自测环节,通过测验的学员,可以得到结业证书。对于可以参加在线测验的学员应该具有一定的合法身份(例如,已报名某门课程的学习),当用户关注该服务号或是进行在线测验之前要进行学员身份验证,对于身份合法的用户才可使用在线测验功能。因此,需要事先将具有合法身份的学员基本信息录入服务号后台数据库中。当学员使用个人微信关注服务号时,再将其微信的OpenID与个人信息进行绑定,从而完成验证。在设计后台数据库时,将学员基本信息填入“Tbl用户”表中,该表基本结构及示例数据,如表1所示。
表1 “Tbl用户”表基本结构及示例数据
表1中“电子邮箱”地址将作为关注用户与具有合法身份学员用户进行匹配的依据。“是否激活”字段为0时,表示还未完成身份验证。另外,用户需要在“激活过期时间”所规定的范围内进行帐号激活。
2.2 验证过程实现
1)当用户首次关注服务号时,服务号将收到关注事件,并得到该事件的XML格式数据,示例数据如下[7]。
123456789
其中参数ToUserName表示接收方微信号,参数FromUserName表示发送方(关注用户)的OpenID。可以利用FromUserName中的OpenID值在“Tbl用户”表中进行查找,如果有匹配记录,说明该微信号已经与某个学员信息进行了绑定,身份验证已完成;如果没有匹配记录,则服务号将向关注用户发送图文消息,提示用户进行身份验证,如图2所示。
图2 提示用户进行身份验证的图文消息
2)单击该图文消息或者服务号的“学员验证”菜单,将跳转至身份验证界面。通过输入学员报名时所登记的正确电子邮箱地址,进行用户身份验证。验证过程,如图3所示。
图3 进行身份验证的PHP网页界面
经过以上验证步骤后,“Tbl用户”表中与所输入电子邮箱地址匹配的用户记录将会填入“OpenID”、“验证时间”、“激活过期时间”、“账户激活码”数据。需要说明的是:
a)图3所示用户验证界面是利用PHP开发的动态网页。验证过程需要在PHP页面中获取关注用户微信的OpenID值以填入“Tbl用户”表中。由于此时已脱离了微信服务号的主界面,无法接收到带有参数FromUserName的XML格式数据,因此,要想获得用户的OpenID值需调用微信公众平台所提供的OAuth2.0授权接口[8],接口请求形式如下(具体调用方法可参见微信公众平台官方开发文档)。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
在由图2所示服务号主界面跳转至图3所示验证界面时,需调用此接口来设置链接地址。
b)为防止用户使用非本人电子邮箱进行身份验证,验证过程采用了邮件激活的方式[9],激活邮件内容如图4所示。
图4 激活邮件内容示例
链接中verify参数即账户激活码,该激活码是由“OpenID”和“验证时间”两项数据通过md5加密的方式计算得到的[10],具有唯一性。PHP参考代码如下:
$regtime = date('Y-m-d H:i:s',time());//获取当前时间作为验证时间
$token = md5($openID.$regtime); //创建激活码
在激活的过程中会把该参数发送给激活页面,图4所示,链接中的激活页面地址为:
http://zwwatl.applinzi.com/active.php
激活页面接收到该参数后将与“Tbl用户”表中已保存的账户激活码数据进行比较,相同则激活成功。激活后“Tbl用户”表中对应的数据形式,如表2所示。
表2 账户激活后“Tbl用户”表中数据示例
3)激活成功后,如果用户使用同一微信号再次进行身份验证时,将会出现提示信息。此时,用户便可使用服务号的所有功能,如图5所示。
图5 账户激活成功界面
4)由于用户微信的OpenID已保存于“Tbl用户”表中,因此当通过验证的用户再次进入服务号时,将会自动进行OpenID的查找匹配,以实现类似于自动登录的效果。
本文介绍了基于微信服务号进行关注用户合法身份验证的实现方法及具体实现过程,通过身份验证的用户可获得服务号的更多服务功能。在验证过程中,加入了电子邮件激活环节,以防止非用户本人所进行的非法验证。此方法最终实现的结果是将用户个人微信号加密后所得到的OpenID值与用户的基本信息进行绑定,由于不同微信号对应同一服务号的OpenID值具有唯一性,因此验证后的用户当再次进入同一服务号时,无需重复验证或手工登录,便可通过OpenID值的自动比对实现自动登录。加入身份验证功能的微信服务号保留了原有开放性的服务功能,即任何用户都可进行关注,并可获得诸如信息推送等部分服务,同时又集成了微信企业号可针对特定用户或内部员工提供特殊功能选择的优点,从而便于对用户的分级分类管理。
[1] 方倍工作室.微信公众平台开发最佳实践[M].北京:机械工业出版社,2015.
[2] 王易.微信营销与运营策略、方法、技巧与实践[M].北京:机械工业出版社,2013.
[3] 周解敏.微信公共平台的营运开发——关于企业号的实践与应用[J].现代经济信息,2015(10):153.
[4] 孙玉敏.企业微信营销探讨[J].中国市场,2015(49):43-44.
[5] 李莎,王胜.微信互动教学系统研究与实现[J].微型电脑应用, 2015,31(4):32-34.
[6] 张淼,廖浩琛,梁杰民,等.基于ARM和微信公众平台的智能旅馆远程监控系统[J].计算机与现代化,2015(6):114-118.
[7] 陈刚,刘坤,刘毅,等.图书馆微信公众平台服务号的设计与开发[J].大学图书情报学刊,2015,33(3):44-48.
[8] 万园春,顾旸铖,邱卫东.微信交互协议和加密模式研究[J].微型电脑应用,2015,31(2):31-34.
[9] 姚舜.图书馆微信借书系统的设计与实现[J].图书馆建设,2015(2):84-87.
[10] 孙文珏,薛质.基于微信的身份证电子凭证系统研究[J].信息技术,2014(7):90-93.
Design and Realization of the Legal Identity Verification of WeChatService Number
Zhang Weiwei, Wang Li, Han Aiqing
(Information Center, Beijing University of Chinese Medicine, Beijing 100029, China)
WeChat service number puts more emphasis on providing interactive services for every concerned user and has good opening characteristics, but it is not convenient for the users' classification management. Enterprise number provides mainly for internal communication and mobile application services, users needs to have a member of the communication information validation before they can concern and use the enterprise number, so the enterprise number has strong pertinence. In the actual use of WeChat public number, we needs to provide not only open services for all potential users but also classification management for different users. But external services cannot be separated from internal activities. In view of the above problem, this paper introduces the legal identity verification method based on WeChat service number, the advantages of enterprise number that classification management and specific service will be used for service number. At the same time, it retains the original opening characteristics of the service number, so as to broaden the application scope of service number. The new design provide a way for the integrated application of these two kinds of public numbers.
WeChat; Service number; Enterprise number; Identity verification; OpenID
1007-757X(2016)12-0023-03
TP311
A
北京中医药大学2016年度教育科研课题项目(XJY16041);北京中医药大学2016年度党建课题项目(微信公众平台下高校“微党课”的设计与研究)
张未未(1979-),男,山东莱芜人,北京中医药大学,信息中心,讲师,硕士,研究方向:数据库应用技术、网站开发技术,北京,100029
王 丽(1979-),女,天津人,北京中医药大学,信息中心,讲师,硕士,研究方向:数据库应用技术,北京,100029
韩爱庆(1979-),男,河北栾城人,北京中医药大学,信息中心,讲师,硕士,研究方向:数据库应用技术,北京,100029
(2016.08.03)