微信公众平台开发(一)(配置)
来源:互联网 发布:nginx 错误日志格式 编辑:程序博客网 时间:2024/04/25 14:32
1、获取微信服务器通过GET请求发过来的参数signature、timestamp、nonce、echostr;
2、将token、timestamp、nonce三个参数进行字典序排序(Arrays.sort);
3、排序后拼接成一个字符串,进行SHA1加密;
4、把加密后得到的string和signature进行比较,如果相等,则说明正确,输出echostr。
package com.tane.servlets;import java.io.IOException;import java.io.InputStream;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.jdom.JDOMException;import com.tane.biz.PushManage;import com.tane.util.SignUtil;/** * 核心请求处理类 * @author tane */public class WeiXinServlet 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 {//xxxxxxx}}
jdom包导入到lib下
package com.tane.util;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Arrays;/** * 请求校验工具类 * @author tane */public class SignUtil {// 与接口配置信息中的Token要一致private static String token = "xxxxxx";/** * 验证签名 * @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];<span style="white-space:pre"></span>//取出一个字节的高4位,转换成为16进制数tempArr[1] = Digit[mByte & 0X0F];String s = new String(tempArr);return s;}}
最后添加服务器,这里用的新浪云
创建应用后,把我们的代码打包成war,然后上传代码,转页面到微信公众平台上,填上新浪给我们的url地址,配置servlet时所用的请求
配置文件写在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>WeiXinServlet</servlet-name><servlet-class>com.tane.servlets.WeiXinServlet</servlet-class></servlet> <!-- url-pattern中配置的/WeiXinServlet用于指定该Servlet的访问路径 --> <servlet-mapping> <servlet-name>WeiXinServlet</servlet-name> <url-pattern>/WeiXinServlet.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list></web-app>
然后填上代码里面自己定义的token
URL:http://1.你的应用名称.sinaapp.com/WeiXinServlet.do
Token:你自己定义的token
0 0
- 微信公众平台开发(一)(配置)
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一)配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 微信公众平台开发(一) 配置接口
- 网络编程之Socket编程
- Java 递归实现汉诺塔问题
- Linux常用命令
- Intraweb 网页图标(shortcut icon)替换
- 颠倒的价牌
- 微信公众平台开发(一)(配置)
- sort的具体用法
- Audio 音频总线
- Java异常处理机制
- Number of Islands
- size classes 和sb
- Centos7安装cairo-dock,像苹果mac一样的桌面插件
- C++ STL编程初步摘抄笔记:using stl/30分钟学会STL
- mips cpu低版本gcc编译lua问题总结