创建一个Java Web工程,命名任意, 代码如下

1 package com.javen.course.servlet; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 11 import com.javen.course.service.CrazyService;12 import com.javen.course.util.SignUtil;13 14 /**15  * 核心请求处理类

16  * @author 简爱微萌17  * @Email zyw205@gmail.com18  *

19  */20 public class CrazyServlet extends HttpServlet {21 22     private static final long serialVersionUID = -5021188348833856475L;23     @Override24     protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {25         // 微信加密签名  26         String signature = request.getParameter("signature");

27         // 时间戳  28         String timestamp = request.getParameter("timestamp");

29         // 随机数  30         String nonce = request.getParameter("nonce");

31         // 随机字符串  32         String echostr = request.getParameter("echostr");

33         PrintWriter out = response.getWriter();

34         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  35         if (SignUtil.checkSignature(signature, timestamp, nonce)) {

36             out.print(echostr);

37         }

38         out.close();39         out = null;40     }41     42     43     @Override44     protected void doPost(HttpServletRequest request, HttpServletResponse response)45             throws ServletException, IOException {46         // TODO 消息的接收、处理、响应  47     }48 }

代码中只完成了doGet方法,它的作用正是确认请求是否来自于微信服务器;而doPost方法这里验证不需要我们先放着。

在doGet方法中调用了SignUtil.java 实现代码如下1 package com.javen.course.util;

1 package com.javen.course.util; 2  3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 import java.util.Arrays; 6  7 /** 8  * 请求校验工具类 9  *

10  * @author 简爱微萌11  * @Email zyw205@gmial.com12  *

13  */14 public class SignUtil {15     // 与接口配置信息中的Token要一致16     private static String token = "Javen";17 18     /**19      * 验证签名20      *

21      * @param signature22      * @param timestamp23      * @param nonce24      * @return25      */26     public static boolean checkSignature(String signature, String timestamp,27             String nonce) {28         String[] arr = new String[] { token, timestamp, nonce };29         // 将token、timestamp、nonce三个参数进行字典序排序30         //Arrays.sort(arr);31         sort(arr);32         StringBuilder content = new StringBuilder();33         for (int i = 0; i

56      * @param byteArray57      * @return58      */59     private static String byteToStr(byte[] byteArray) {60         String strDigest = "";61         for (int i = 0; i

70      * @param mByte71      * @return72      */73     private static String byteToHexStr(byte mByte) {74         char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',75                 'B', 'C', 'D', 'E', 'F' };76         char[] tempArr = new char[2];77         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];78         tempArr[1] = Digit[mByte & 0X0F];79 80         String s = new String(tempArr);81         return s;82     }83 84     public static void sort(String a[]) {85         for (int i = 0; i

注意:SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边要保持一致

最后再来看一下CoreServlet是怎么配置的,web.xml中的配置代码如下:

1 <?xml  version="1.0" encoding="UTF-8"?> 2  3    4    5     CrazyServlet 6        7             com.javen.course.servlet.CrazyServlet

8          9   15 16   17     CrazyServlet18     /Javen19   20   24   25     index.jsp26   27

到目前为止,所有编码都完成了,就是这么简单。接下来就是将工程发布到公网服务器上,如果没有公网服务器环境,可以去了解下BAE、SAE或者租赁一个服务器。发布到服务器上后,我们在浏览器里访http://你服务器的Ip或者域名/Javen(项目名)/Javen,如果看到如下界面就表示我们的代码没有问题:

PS:在浏览器中直接访问就相当于提交的是GET请求,而我们什么参数都没有传,在验证的时候当然会报空指针异常。

java字符串用0X0F分割_微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java...相关推荐

  1. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装

    本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用  官方文档 接下来要做的就是将消息请求.回复中定义的消息进行封装,建立与之对应的Java类(Java是一门面向 ...

  2. 微信公众帐号开发教程第2篇-开发模式启用及接口配置

    编辑模式与开发模式 微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在"高级功能"里进行配置,点击"高级功能",将看到如下界面: 从上图中可以看到,高级 ...

  3. [027] 微信公众帐号开发教程第3篇-开发模式启用及接口配置

    编辑模式与开发模式 微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在"高级功能"里进行配置,点击"高级功能",将看到如下界面: 从上图中可以看到,高级 ...

  4. [041] 微信公众帐号开发教程第17篇-应用实例之智能翻译

    内容概要 本篇文章为大家演示怎样在微信公众帐号上实现"智能翻译",本例中翻译功能是通过调用"百度翻译API"实现的.智能翻译是指用户随意输入想要翻译的内容(单词 ...

  5. 微信公众帐号开发教程第17篇-应用实例之智能翻译

    内容概要 本篇文章为大家演示如何在微信公众帐号上实现"智能翻译",本例中翻译功能是通过调用"百度翻译API"实现的.智能翻译是指用户任意输入想要翻译的内容(单词 ...

  6. 微信公众帐号开发教程第13篇-图文消息全攻略

    引言及内容概要 已经有几位读者抱怨"柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用",好吧,我错了,原本以为把基础API封装完.框架搭建好,再给出一个文本 ...

  7. 微信公众帐号开发教程第11篇-符号表情的发送(上)

    题外话(可以略过) 相信这篇文章已经让大家等的太久了,不是我故弄玄虚.吊大家胃口,而是写一篇文章真的需要花太多的时间.也许一篇文章,你们花3-5分钟就看完了.就学会掌握了,而我却要花2-3个小时的时间 ...

  8. 微信公众帐号开发教程第9篇-QQ表情的发送与接收

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是如何在微信公众平台使用QQ表情, ...

  9. [11] 微信公众帐号开发教程第11篇-符号表情的发送(上)

    题外话(可以略过) 相信这篇文章已经让大家等的太久了,不是我故弄玄虚.吊大家胃口,而是写一篇文章真的需要花太多的时间.也许一篇文章,你们花3-5分钟就看完了.就学会掌握了,而我却要花2-3个小时的时间 ...

最新文章

  1. IE9浏览器更像一个互联网舞台
  2. 网络工程师常用英文简写
  3. ync 小技巧-14-为用户启用统一的联系人存储库-Lync-无联系人
  4. 一次难忘的产品发布经历
  5. 华为鸿蒙用户体验计划怎样关闭,华为用户要注意,手机关闭这3个“默认选项”,还能流畅再用2年...
  6. java referencequeue_java源代码 Reference和ReferenceQueue分析
  7. 文本删除空行_Word的空行、空格、页眉线删不了?8秒一次性处理,教你删掉它们...
  8. 为什么有时候NSData转换成NSString的时候返回nil
  9. php网站 只显示sinsiu_sinsiu_cms_1_0_10
  10. 84直方图最大矩形覆盖 · Largest Rectangle in Histogram
  11. cocos2dx视频教程进阶篇--第1天--吃西瓜游戏。
  12. python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法...
  13. 《高性能MYSQL》
  14. win7打开win10共享计算机要凭据,win10打开共享文件夹后要求凭证怎么办
  15. 5G技术—5G网络架构及关键技术详述测试题目
  16. 六面体单元的体积计算方法
  17. 用C语言实现移位密码加密与解密
  18. 我的世界回连Center
  19. 大一新生必会的c语言五子棋!PVP,PVE,EVE模式都有,还有智能的AI部分,复盘等内容!一看就会的五子棋教程,确定不来看看吗?
  20. bitbake-2-poky系统结构

热门文章

  1. mysql 多表查询 优化_MySql多表查询优化
  2. [2012山东ACM省赛] Fruit Ninja II (三重积分,椭球体积)
  3. 大数据图书分享-Python数据可视化实战课程
  4. intellij idea中设置mybatis的xml配置文件的背景色
  5. 花火4G聚合路由器无线网络支持5G户外直播应急通讯工作
  6. 精英845主板问题!
  7. python发送邮件(一)
  8. 06_权限管理(黑)
  9. ubuntu系统查询硬盘的品牌、型号、序列号
  10. AI溃败,被Dota2职业战队打蠢!独家专访OpenAI:我们发现一个Bug