微信开发模式启用及接口配置Java
来源:互联网 发布:lb网络用语 编辑:程序博客网 时间:2024/06/05 21:07
微信开发模式启用及接口配置Java
转载出处:http://www.cnblogs.com/zyw-205520/p/3581250.html
1、编辑模式请看:http://www.cnblogs.com/zyw-205520/p/3516495.html
2、开发模式
1)PHP开发者接入:http://www.cnblogs.com/zyw-205520/p/3500761.html
2)Java开发者接入如下 详细的接口文档说明:微信接口文档
package com.javen.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 com.javen.course.service.CrazyService;import com.javen.course.util.SignUtil;/** * 核心请求处理类 * @author 简爱微萌 * @Email zyw205@gmail.com * */public class CrazyServlet extends HttpServlet { private static final long serialVersionUID = -5021188348833856475L; @Override protected 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; } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 消息的接收、处理、响应 }}
代码中只完成了doGet方法,它的作用正是确认请求是否来自于微信服务器;而doPost方法这里验证不需要我们先放着。
在doGet方法中调用了SignUtil.java 实现代码如下 1 package com.javen.course.util;
package com.javen.course.util;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Arrays;/** * 请求校验工具类 * * @author 简爱微萌 * @Email zyw205@gmial.com * */public class SignUtil { // 与接口配置信息中的Token要一致 private static String token = "Javen"; /** * 验证签名 * * @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); 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; } public static void sort(String a[]) { for (int i = 0; i < a.length - 1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[j].compareTo(a[i]) < 0) { String temp = a[i]; a[i] = a[j]; a[j] = temp; } } } }}
注意:SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边要保持一致
最后再来看一下CoreServlet是怎么配置的,web.xml中的配置代码如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <servlet> <servlet-name>CrazyServlet</servlet-name> <servlet-class> com.javen.course.servlet.CrazyServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>CrazyServlet</servlet-name> <url-pattern>/Javen</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
到目前为止,所有编码都完成了,就是这么简单。
0 0
- 微信开发模式启用及接口配置Java
- 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java
- 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java
- 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置(java版)
- 4_微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java
- [027] 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- [027] 微信公众帐号开发教程第3篇-开发模式启用及接口配置 .
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置 .
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置(转载)
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- 微信公众帐号开发教程第3篇-开发模式启用及接口配置
- JS两种function声明的区别
- H5\web轻应用,限制手机系统字体大小对应用的影响方法
- Spring 事物机制总结
- nginx搭建rtmp协议流媒体服务器总结 遇到的问题
- 一千行MySQL学习笔记
- 微信开发模式启用及接口配置Java
- Android6.0 PackageManagerService dex优化
- FFT算法实现——基于GPU的基2快速傅里叶变换
- LLVM
- Eclipse 下的HTML 新手安装使用教程
- 关于float与double的精度问题
- python time库
- OMNET++ 运行出现的环境变量问题
- viso与word中的字号对应