前言:申请到微信公众号的同学,可能会挺感兴趣的,毕竟微信公众号,确实是一个好东西,它提供了一个很好的平台,而且它自带有一套管理模板,对于微信公众号可以很好的管理。
但是也仅仅是很好的管理,因为作为开发者来说,很多功能需要更加人性的自定化,就需要由自己写程序来提供服务,而微信恰恰就提供了这些接口,可以方便的我们去调用微信的功能。
于是我们去开启开发者模式
点击“基本配置”,然后需要输入url,输入token,输入EncodingAESKey(这个可以随机生成),最后点击提交。
问题:?
奇怪的是微信这方面的文档对于这部分好像是没有任何说明(我不知道是不是我没有找到还是怎么的),我输入我个人的域名,然后输入随便输入了32位的token,然后点击随机生成EncodingAESKey,最后选择加密模式,然后点击提交,最后发现微信提示token验证失败,试过好多次,也从微信官方文档查询token这是个什么东西,最后却只得到token是一个随机的字符串,可以*输入,结果却可想而知。
原因!
百度之后得到,之前输入的url,微信会对这个url发出一个http请求,而这个url,需要正确的对于这个微信的请求作出正确的响应,这样才算验证成功,这下总算弄明白了
由于我已经有了公网的域名,也有了自己的服务器(没有服务器,没有域名的,只要申请一个空间,就可以了,空间会送一个三级域名),所以就开始写代码,这里是一个servlet,你们只要把这个servlet拷贝过去,就可以验证了,下面列出代码:
import java.io.IOException; import java.util.Arrays; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.codec.digest.DigestUtils; @WebServlet("/validateWeiXin.do") public class ValidateWeiXin extends HttpServlet { private static final long serialVersionUID = 1L; private String TOKEN = "这里随便填入32位以内的数字英文,也就是token"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain;charset=utf-8"); // 微信加密签名 String signature = request.getParameter("signature"); // 随机字符串 String echostr = request.getParameter("echostr"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); String[] str = { TOKEN, timestamp, nonce }; Arrays.sort(str); // 字典序排序 String bigStr = str[0] + str[1] + str[2]; // SHA1加密,我这里用的是common-codec的jar包,你们也可以用java自带的消息消息摘要来写,只不过要多写几行代码,但结果都一样的 DigestUtils.sha1Hex(bigStr); String digest = DigestUtils.sha1Hex(bigStr); // 确认请求来至微信 if (digest.equals(signature)) { response.getWriter().print(echostr); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
有自己服务器的,就可以验证成功了