准备用Java做一个微信二次开发项目,把流程写在这里吧。

第一天,做微信请求验证

需要导入库:servlet-api.jar

第一步:新建包com.wtz.service,新建类LoginServlet.java

 package com.wtz.service;

 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 com.wtz.util.ValidationUtil; /**
*   @author wangtianze QQ:864620012
* @date 2017年4月17日 下午8:11:32
* <p>version:1.0</p>
* <p>description:微信请求验证类</p>
*/
public class LoginServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("get请求。。。。。。"); //1.获得微信签名的加密字符串
String signature = request.getParameter("signature"); //2.获得时间戳信息
String timestamp = request.getParameter("timestamp"); //3.获得随机数
String nonce = request.getParameter("nonce"); //4.获得随机字符串
String echostr = request.getParameter("echostr"); System.out.println("获得微信签名的加密字符串:"+signature);
System.out.println("获得时间戳信息:"+timestamp);
System.out.println("获得随机数:"+nonce);
System.out.println("获得随机字符串:"+echostr); PrintWriter out = response.getWriter(); //验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败
if(ValidationUtil.checkSignature(signature, timestamp, nonce)){
out.print(echostr);
} out.close();
out = null;
}
}

第二步:新建包com.wtz.util,新建类Validation.java

 package com.wtz.util;

 import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays; /**
* @author wangtianze QQ:864620012
* @date 2017年4月17日 下午8:35:57
* <p>version:1.0</p>
* <p>description:微信请求校验工具类</p>
*/
public class ValidationUtil {
private static String token = "wangtianze"; public static boolean checkSignature(String signature,String timestamp,String nonce){
//1.将token,timestamp,nonce三个参数进行排序
String[] str = new String[]{token,timestamp,nonce};
Arrays.sort(str); //2.将三个参数字符串拼接成一个字符串
StringBuilder buff = new StringBuilder();
for(int i=0;i<buff.length();i++){
buff.append(str[i]);
} //3.进行sha1加密
MessageDigest md = null;
String result = "";
try {
md = MessageDigest.getInstance("SHA-1");
byte[] data = md.digest(buff.toString().getBytes()); //将字节数组转换成字符串
result = bytesToString(data); System.out.println("加密后的字符串为:"+result); } catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return result!=null?(result.equals(signature.toUpperCase())):false;
} /**
* 将字节数组转换成十六进制字符串
* @param byteArray
* @return
*/
private static String bytesToString(byte[] byteArray){
String stringDigest = "";
for(int i=0;i<stringDigest.length();i++){
stringDigest += byteToHexString(byteArray[i]);
}
return stringDigest;
} /**
* 将一个字节转换为十六进制字符串
* @param mByte
* @return
*/
private static String byteToHexString(byte mByte){
char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] temp = new char[2]; temp[0] = digit[(mByte>>>4) & 0X0F];
temp[1] = digit[mByte & 0X0F]; String str = new String(temp);
return str;
}
}

第一天就做了这些,完成了微信请求验证的功能

Java微信二次开发(一)的更多相关文章

  1. Java微信二次开发(五)

    消息加密 需要到入库:commons-io-2.4.jar,commons-codec-1.9.jar(在官网的Java微信加密demo下) 第一步:访问https://mp.weixin.qq.co ...

  2. Java微信二次开发(十)

    生成带参数的二维码以及长链接转短链接 第一步:找到包com.wtz.vo,新建类WeixinQRCode.java package com.wtz.vo; /** * @author wangtian ...

  3. Java微信二次开发(七)

    自定义菜单 第一步:新建包com.wtz.menu,新建类Button.java package com.wtz.menu; /** * @author wangtianze QQ:864620012 ...

  4. Java微信二次开发(九)

    多媒体文件上传与下载 第一步:找到包com.wtz.vo,新建类WeixinMedia.java package com.wtz.vo; /** * @author wangtianze QQ:864 ...

  5. Java微信二次开发(八)

    高级接口,先做了两个(获取用户信息和获取关注者列表) 第一步:找到包com.wtz.vo,新建类UserInfo.java package com.wtz.vo; /** * @author wang ...

  6. Java微信二次开发(六)

    Token定时获取 需要导入库:添加log4j(slf4j-api-1.5.10.jar,slf4j-log4j12-1.5.10.jar,log4j-1.2.15.jar,并且在src下添加log4 ...

  7. Java微信二次开发(三)

    各种类型消息的封装 第一步:找到com.wtz.message.response包,新建类Image.java package com.wtz.message.response; /** * @aut ...

  8. Java微信二次开发(二)

    第二天,做微信文本消息接口请求与发送 需要导入库:dom4j-1.6.1.jar,xstream-1.3.1.jar 第一步:新建包com.wtz.message.response,新建类BaseMe ...

  9. Java微信二次开发(四)

    自定义文字菜单,暂时先实现一个根据用户输入城市名称来查询邮政编码和查询区号的功能 需要导入库:mysql-connector-java-5.0.8-bin.jar 第一步:利用Navicat新建一个用 ...

随机推荐

  1. Jquery基础知识点

    1.选择器:查找和过滤 查找:向下查找用find(),  向上查找用parent(),  同级查找用next(),  prev() 过滤:和函数式编程的map.filter类似,jQuery对象也有类 ...

  2. oracle 将字符串转化为数值型to_number()

    select to_number('22.222') from dual

  3. 「PKUSC2018」最大前缀和 LOJ#6433&BZOJ5369

    分析: 这个题非常的棒,目测如果去了能AC... 我们考虑一个序列是如何构成的——一个后缀>0的序列,和一个前缀<0的序列 问题可以简化为求出当前缀和为状态S的所有数的和的时候,S满足后缀 ...

  4. 20155304《网络对抗》MSF基础应用

    20155304<网络对抗>MSF基础应用 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_ ...

  5. mfc CString,string,char* 之间的转换

    知识点: CString转char*,string string转char*,CString char* 转CString,string 一.CString转char*,string //字串转换测试 ...

  6. Tomcat 基础二

    1.Tomcat 实现了一个新的Servlet容器Catalina: 2.Tomcat:         ROOT         |         |____      /             ...

  7. 11、Dockerfile实战-Tomcat

    一.编写Dockerfile 具体步骤这里不再细说,直接看Dockerfile文件: FROM centos:7 MAINTAINER QUNXUE ENV VERSION=8.0.46 RUN yu ...

  8. ABPZERO介绍

    内容 首先我们创建一个名为"Acme.PhoneBook"的项目. 本文档是指南会同步开发您的项目. 我们建议你在开发之前准备备份下这份初始项目. 因为abpZero是基于abp的 ...

  9. JavaScript 为什么不要使用 eval

    本文内容 eval 隐藏的 eval 安全问题 结论 参考资料   eval eval 函数是一个高等级的函数,它与任何对象都无关.其参数,如果是一个字符串表达式,那么该函数计算表达式的值:如果是一个 ...

  10. mount命令详解及常见问题汇总

    一 .mount命令(用来挂载硬盘或镜像等) 用法:mount [-t vfstype] [-o options] device dir1.-t vfstype 指定文件系统的类型,通常不必指定.mo ...