搜索
您的当前位置:首页正文

java web微信开发

来源:意榕旅游网


package com.ifp.weixin.controller;

import java.io.IOException; import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import com.ifp.weixin.biz.core.CoreService;

import com.ifp.weixin.util.SignUtil;

@Controller

@RequestMapping(\"/weixinCore\")

public class WeixinController {

@Resource(name=\"coreService\")

private CoreService coreService;

@RequestMapping(method = RequestMethod.GET)

public void get(HttpServletRequest request, HttpServletResponse response) {

// 微信加密

//签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

String signature = request.getParameter(\"signature\");

// 时间戳

String timestamp = request.getParameter(\"timestamp\"); // 随机数

String nonce = request.getParameter(\"nonce\"); // 随机字符串

String echostr = request.getParameter(\"echostr\");

PrintWriter out = null; try {

out = response.getWriter();

// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败

if (SignUtil.checkSignature(signature, timestamp, nonce)) {

out.print(echostr); }

} catch (IOException e) {

e.printStackTrace(); }

finally {

out.close();

out = null;

} }

@RequestMapping(method = RequestMethod.POST)

public void post(HttpServletRequest request, HttpServletResponse response)

{

//暂时空着,在这里可处理用户请求 } }

/**

*验证签

名 * @param signature * @param timestamp * @param nonce * @return */

public static boolean checkSignature(String signature, String timestamp, String nonce) {

String[] arr = new String[] { Constant.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];

tempArr[1] = Digit[mByte & 0X0F];

String s = new String(tempArr);

return s; } }

// 我们看到 checkSignature 这个方法里使用到了Constant.TOKEN ,这个token,我声明的//一个常量。

// 要与微信配置接口里面的token值一样

/**

* 与接口配置信息中的Token要一致 */

public static String TOKEN = \"infopower\";

也贴上web.xml的配置,我的后缀是.html 的请求都交给DispatcherServlet了。

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_3_0.xsd\">

weixinHelp

contextConfigLocation

classpath:/applicationContext.xml

log4jConfigLocation

classpath:/properties/log4j.properties

org.springframework.web.util.Log4jConfigListener

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

encodingFilter

/*

spring 容器的监听器

org.springframework.web.context.ContextLoaderListener

action

org.springframework.web.servlet.DispatcherServlet

action

*.html

index.jsp

因篇幅问题不能全部显示,请点此查看更多更全内容

Top