微信于9月份推出企业号后引起了业界不小的反响,许多企业都在思索企业号将如何影响企业的运营,从本文开始,我将详细阐述微信企业号开发的相关知识,而本文将着重介绍如何实现更高安全机制的二次验证。
申请企业体验号:
企业号顾名思义就是企业来申请的号,申请时就像申请服务号一样,需要提供各种组织证明文件,对广大开发者来说很难操作,好在腾讯公司也像服务号一样开通了体验号申请,留意企业体验号的有效期间非常短,只有90天(服务号测试账号有1年有效期),且如果企业体验号长期不使用还会收到腾讯公司的提前失效提醒邮件。企业体验号的申请链接如下,开发者只需要按照腾讯公司的引导完成注册步骤,立刻就能获得体验号:
http://qydev.weixin.qq.com/try?t=experience
通讯录添加成员:
与公众号不同的是,因为是面向企业内部,所以腾讯允许企业主动添加粉丝,具体操作是进入到通讯录后点击+按钮添加新成员,留意作为唯一识别个人信息,微信号、手机号或者邮箱必须至少有一个,直接搜集微信号通常比较困难,一般可以使用企业HR数据库里的手机号和邮箱等信息,具体操作上除了手工添加还可以通过Excel模板导入以及通过腾讯企业号微信API来添加,关于API添加用户稍后章节介绍。

输入完成以后,可以将企业微信号的二维码发送给员工,员工扫描后会自动出现系统默认的企业号小助手,小助手会自动引导员工通过邮箱或手机验证码来完成员工身份绑定的过程,此为一次验证,企业自行确保通讯录员工数据的正确性,后续依赖于腾讯公司来进行员工验证,验证通过后通讯录状态列的问号会消失,表明一次验证通过:

为此我们可以参考企业号官方接口文档http://qydev.weixin.qq.com/wiki/index.phptitle=%E5%85%B3%E6%B3%A8%E4%B8%8E%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8在Force.com平台开发相应页面。
开发二次验证用页面:
同样,页面分成两个部分,一部分是显示部分,用来输入用户名和密码,页面示意图如下,用户输入用户名user以及密码123点击绑定按钮既可以完成绑定:

此时会弹出如下窗口需要输入企业的二次验证页面地址:

为此我们可以参考企业号官方接口文档http://qydev.weixin.qq.com/wiki/index.phptitle=%E5%85%B3%E6%B3%A8%E4%B8%8E%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8在Force.com平台开发相应页面。
开发二次验证用页面:
同样,页面分成两个部分,一部分是显示部分,用来输入用户名和密码,页面示意图如下,用户输入用户名user以及密码123点击绑定按钮既可以完成绑定:

页面名称是EmployeeAuth,页面代码如下,有些属于apex代码特有的标签,无需做深入理解,重要是在第13行按钮的action属性指定了bind方法,当点击按钮的时候将调用控制器类EmployeeAuthController的bind方法:
<apex:page standardstylesheets="false" showHeader="false" sidebar="false" controller="EmployeeAuthController">
<font size="50">
<h1>Please input your user name and password</h1>
</font>
<font size="30">
UserName: user<br />
Password: 123<br /><br />
<hr/>
<apex:form >
UserName: <apex:inputText size="100" style="height:100px" value="{!strUsername}" id="strUsername"/><br /><br />
Password: <apex:inputText size="100" style="height:100px" value="{!strPassword}" id="strPassword"/><br /><br />
<center>
<apex:commandButton value="Bind" style="width:600px; height:100px;font-size:50px" action="{!bind}" id="bind" />
</center>
</apex:form>
{!msg}
</font>
</apex:page>
在解读EmployeeAuthController控制器类的代码前我们首先看看微信二次认证的步骤。
二次验证的步骤与机理:
1. 首先,当微信一次验证(或邮箱或手机号码等认证)完成后,微信会发送如下图所示的消息给到用户:

2. 页面跳转:
当用户点击这个图文的时候实际上打开了一个位于open.weixin.qq.com网站下面的网页,这个页面会做一些处理后跳转到前面在二次验证里设置的URL也就是我们正在开发的这个页面,在跳转的时候还会再我们设置的URL后面加上参数code=CODE&state=STATE,例如在本例里二次验证配置的URL是http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth,那么从腾讯openweixin.qq.com跳转后实际打开的URL是http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth?code=CODE&state=STATE 。这里的state参数是干嘛的腾讯公司并没有说明目前看也并不重要。重要的是code参数,利用这个参数可以调用腾讯的oauth2接口换取员工的userid,留意userid是一个很重要的概念,在企业号里没有微信OpenId一说,只有userid用来唯一标识用户,这个userid实际上就是我们在维护通讯录时的账号字段值:

3. 通过code调用腾讯oauth2接口换取员工userid
关于这个接口的说明参见腾讯文档http://qydev.weixin.qq.com/wiki/index.phptitle=%E6%A0%B9%E6%8D%AEcode%E8%8E%B7%E5%8F%96%E6%88%90%E5%91%98%E4%BF%A1%E6%81%AF,也可以参加下方说明,这里需要特别说明的是access token和agentid:

做过微信公共号开发或者看过前面介绍相关开发文章的读者应该不会陌生,当主动调用腾讯的api时都需要access token已确保访问的正当性,

