微信"大众年夜众帐号申请成功后,要想吸收处理用户的要求,就必须要在“高等功能”里进行配置,点击“高等功能”,将看到如下界面:

从上图中可以看到,高等功能包含两种模式:编辑模式和开拓模式,并且这两种模式是互斥关系,即两种模式不能同时开启。
那两种模式有什么差异呢?作为开拓职员到底要开启哪一种呢?

编辑模式:紧张针对非编程职员及信息发布类"大众年夜众帐号利用。
开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回答的”。

微信公众号服务器不配置jsp微信帐号开辟教程开辟模式启用及接口设置装备摆设 Java

开拓模式:紧张针对具备开拓能力的人利用。
开启该模式后,能够利用微信"大众年夜众平台开放的接口,通过编程办法实现自定义菜单的创建、用户的吸收/处理/相应。
这种模式更加灵巧,建议有开拓能力的公司或个人都采取该模式。

启用开拓模式(上)

微信公众年夜众帐号注册完成后,默认开启的是编辑模式。
那么该如何开启开拓模式呢?操作步骤如下:

1)点击进入编辑模式,将右上角的编辑模式开关由“开启”切换到“关闭”,如下图所示:

2)点击高等功能进入到开拓模式,将右上角的开拓模式开关由“关闭”切换到“开启”,但在切换时会碰着如下提示:

提示须要我们先成为开拓者,才能开启开拓模式。
那就先点击下图所示的“成为开拓者”按钮:

如果提示资料不全,那就先补齐资料再回来连续操作。
须要补全的资料有"大众年夜众帐号头像、描述和运营地区。

待资料补全后,再次点击“成为开拓者”,这时将看到接口配置信息界面,如下图所示:

这里须要填写URL和Token两个值。
URL指的是能够吸收处理微信服务器发送的GET/POST要求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就哀求我们先把"大众年夜众帐号后台处理程序开拓好(至少该当完成了对GET要求的处理)并支配在公网做事器上。
Token后面会详细解释。

也便是说要完成接口配置,只须要先完成微信服务器的GET要求处理就可以?是的。
那这是为什么呢?由于这是微信"大众年夜众平台接口中定义的。
详细请参考API文档-接口-接口指南中的网址接入部分。
点此进入。

上面写的很清楚,实在你只要能理解上面在说什么就OK了,至于怎么编写干系代码,我已经帮你完成了,请连续往下看。

创建"大众年夜众帐号后台接口程序

创建一个Java Web工程,并新建一个能够处理要求的Servlet,命名任意,我在这里将其命名为org.liufeng.course.servlet.CoreServlet,代码如下:

package org.liufeng.course.servlet; 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 org.liufeng.course.util.SignUtil; / 核心要求处理类 @author liufeng @date 2013-05-18 /public class CoreServlet extends HttpServlet {private static final long serialVersionUID = 4440739483644821986L; / 确认要求来自微信服务器 /public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 微信加密署名String signature = request.getParameter(\"大众signature\"大众);// 韶光戳String timestamp = request.getParameter(\公众timestamp\公众);// 随机数String nonce = request.getParameter(\"大众nonce\"大众);// 随机字符串String echostr = request.getParameter(\公众echostr\"大众); PrintWriter out = response.getWriter();// 通过考验signature对要求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失落败if (SignUtil.checkSignature(signature, timestamp, nonce)) {out.print(echostr);}out.close();out = null;} / 处理微信服务器发来的 /public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO 的吸收、处理、相应} }

可以看到,代码中只完成了doGet方法,它的浸染正是确认要求是否来自于微信服务器;而doPost方法不是我们这次要讲的内容,并且完成接口配置也不须要管doPost方法,就先空在那里。
在doGet方法中调用了org.liufeng.course.util.SignUtil.checkSignature方法,SignUtil.java的实现如下:

package org.liufeng.course.util; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Arrays; / 要求校验工具类 @author liufeng @date 2013-05-18 /public class SignUtil {// 与接口配置信息中的Token要同等private static String token = \"大众weixinCourse\公众; / 验证署名 @param signature @param timestamp @param nonce @return /public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] arr = new String[] { token, timestamp, nonce };// 将token、timestamp、nonce三个参数进行字典序排序Arrays.sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md = null;String tmpStr = null; try {md = MessageDigest.getInstance(\"大众SHA-1\公众);// 将三个参数字符串拼接成一个字符串进行sha1加密byte[] digest = md.digest(content.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();} content = null;// 将sha1加密后的字符串可与signature比拟,标识该要求来源于微信return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;} / 将字节数组转换为十六进制字符串 @param byteArray @return /private static String byteToStr(byte[] byteArray) {String strDigest = \公众\公众;for (int i = 0; i < byteArray.length; i++) {strDigest += byteToHexStr(byteArray[i]);}return strDigest;} / 将字节转换为十六进制字符串 @param mByte @return /private static String byteToHexStr(byte mByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(mByte >>> 4) & 0X0F];tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr);return s;}}

这里唯一须要把稳的便是SignUtil类中的成员变量token,这里授予什么值,在接口配置信息中的Token就要填写什么值,两边保持同等即可,没有其他哀求,建议用项目名称、公司名称缩写等,我在这里用的是项目名称weixinCourse。
末了再来看一下web.xml中,CoreServlet是怎么配置的,web.xml中的配置代码如下:

<?xml version=\公众1.0\"大众 encoding=\"大众UTF-8\公众?><web-app version=\"大众2.5\"大众 xmlns=\公众http://java.sun.com/xml/ns/javaee\"大众xmlns:xsi=\"大众http://www.w3.org/2001/XMLSchema-instance\"大众xsi:schemaLocation=\"大众http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"大众><servlet><servlet-name>coreServlet</servlet-name><servlet-class>org.liufeng.course.servlet.CoreServlet</servlet-class></servlet> <!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 --><servlet-mapping><servlet-name>coreServlet</servlet-name><url-pattern>/coreServlet</url-pattern></servlet-mapping> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

到这里,所有编码都完成了,便是这么大略。
接下来便是将工程发布到公网做事器上,如果没有公网做事器环境,可以去理解下BAE、SAE或阿里云。
发布到做事器上后,我们在浏览器里访问CoreServlet,如果看到如下界面就表示我们的代码没有问题:

啊,代码都报空指针非常了还说证明没问题?那当然了,由于直接在地址栏访问coreServlet,就相称于提交的是GET要求,而我们什么参数都没有传,在验证的时候当然会报空指针非常。

接下来,把coreServlet的访问路径拷贝下来,再回到微信"大众年夜众平台的接入配置信息界面,将coreServlet的访问路径粘贴到URL中,并将SignUtil类中指定的token值weixinCourse填入到Token中,填写后的结果如下图所示:

我在写这篇教程的时候是利用的BAE环境,如果想学习微信公众帐号开拓又没有公网做事器环境的,建议可以试试,注册利用都很方便,如果有问题我们还可以互换。

接着点击“提交”,如果程序写的没问题,并且URL、Token都填写精确,可以在页面最上方看到“提交成功”的提示,并会再次跳转到开拓模式设置界面,而且能够看到“你已成为开拓者”的提示,如下图所示:

启用开拓模式(下)

这个时候就已经成为开拓者了,百般周折啊,哈哈,到这里还没有完哦,还有末了一步事情便是将开拓模式开启。
将右上角的开拓模式开关由“关闭”切换到“开启”,如下图所示:

到这里,接口配置、开拓模式的开启就都完成了,内容也就讲到这里。