上个星期有几个朋友叫我出一篇关于微信企业号二次验证的教程,苦于前段时间没时间就没写,今天晚上不上班,就给大家
发一篇福利吧,我们先来看看微信官方的API文档怎么说
企业在开启二次验证时,必须填写企业二次验证页面的url。当员工绑定通讯录中的帐号后,会收到一条图文消息,引导员工到企业的验证页面验证身份。在跳转到企业的验证页面时,会带上如下参数:code=CODE&state=STATE,企业可以调用oauth2接口,根据code获取员工的userid。
企业在员工验证成功后,调用如下接口即可让员工关注成功。
Http请求方式: GET
https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=ACCESS_TOKEN&userid=USERID
参数 | 必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
userid | 是 | 员工UserID |
管理员须拥有userid对应员工的管理权限。
{ "errcode": "0", "errmsg": "ok" }
API里很详细的说到,当用户在关注企业号的时候,如果通讯录里没登记你的一些信息的时候,会关注失败,给你返回一段话:
该信息未在企业号登记,请确保信息的正确性重新提交,如有疑问,请联系管理员。
说明我们关注企业号需要先在微信企业号后台通讯录里添加用户信息,并且需要在微信企业号后台——设置里开启二次验证,并且填写二次验证页面,当用户已经登记过,且信息核对无误,微信会返回一个图文给还未关注的用户,用户点击图文将定向到二次验证页面,并且携带code=CODE&state=STATE参数,我们可以结合OAuth 2.0接口获取用户ID
二次验证页面:
关注成功之前:
关注成功:
二次验证类 SecondaryVerification 源码:
package jsp.weixin.oauth2.util; /** * 企业号二次验证 * @author Engineer-Jsp * @date 2014.10.25 * */ import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.weixin.ParamesAPI.util.ParamesAPI; import jsp.weixin.ParamesAPI.util.WeixinUtil; import net.sf.json.JSONObject; public class SecondaryVerification extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String code = request.getParameter("code"); if (!"authdeny".equals(code)) { // 调取凭证 String access_token = WeixinUtil.getAccessToken(ParamesAPI.corpId, ParamesAPI.secret).getToken(); // 打印凭证 out.print("凭证:"+access_token); // agentid 跳转链接时所在的企业应用ID 管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同 String UserID = GOauth2Core.GetUserID(access_token, code, "1"); // 二次验证地址 String RequestURL = ParamesAPI.Secondary_verification.replace("ACCESS_TOKEN",access_token).replace("USERID", UserID); // 二次验证返回数据 JSONObject jsonObject = WeixinUtil.HttpRequest(RequestURL, "GET", null); // 二次验证结果 out.print("二次验证返回结果:\n"+jsonObject); // 传值 request.setAttribute("jsonObject", jsonObject); } else{ out.print("Code获取失败,至于为什么,自己找原因。。。"); } } // public static void main(String[] args) { // System.out.println(WeixinUtil.URLEncoder("http://121.40.195.86/WeiXinEnterprises/SecondaryVerification")); // } }
<!-- 二次验证 --> <servlet> <servlet-name>SecondaryVerification</servlet-name> <servlet-class> jsp.weixin.oauth2.util.SecondaryVerification </servlet-class> </servlet> <servlet-mapping> <servlet-name>SecondaryVerification</servlet-name> <url-pattern>/SecondaryVerification</url-pattern> </servlet-mapping>