微信公众平台开发(一)(配置)

来源:互联网 发布: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
原创粉丝点击