`
ileson
  • 浏览: 215551 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

spring mvc 接入微信公众平台 注解方式的写法

    博客分类:
  • Java
阅读更多
package com.meiparty.controller;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.wechat.model.WeChat;
import com.wechat.service.CoreService;
import com.wechat.util.SignUtil;

/**
 * 微信核心 web 入口
 * 
 * @author leson
 * @see 用户微信接口的相关接入工作。
 */
@Controller
@RequestMapping("wechat")
public class WeChatController {
	private Logger log = Logger.getLogger(WeChatController.class);

	/**
	 * 校验信息是否是从微信服务器发过来的。
	 * 
	 * @param weChat
	 * @param out
	 */
	@RequestMapping(method = { RequestMethod.GET }, produces = "application/json;charset=UTF-8")
	public void valid(WeChat weChat, PrintWriter out) {
		String signature = weChat.getSignature(); // 微信加密签名
		String timestamp = weChat.getTimestamp(); // 时间戳
		String nonce = weChat.getNonce();// 随机数
		String echostr = weChat.getEchostr();// 随机字符串

		// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
		if (SignUtil.checkSignature(signature, timestamp, nonce)) {
			out.print(echostr);
		} else {
			System.out.println("不是微信服务器发来的请求,请小心!");
		}
		out.flush();
		out.close();
	}

	/**
	 * 微信消息的处理
	 * 
	 * @param request
	 * @param out
	 * @throws IOException
	 */
	@RequestMapping(method = { RequestMethod.POST }, produces = "application/xml;charset=UTF-8")
	public void dispose(HttpServletRequest request, HttpServletResponse response)
			throws IOException {
		/* 消息的接收、处理、响应 */

		// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");

		// 调用核心业务类接收消息、处理消息
		String respMessage = CoreService.processRequest(request);
		log.info(respMessage);
		// 响应消息
		PrintWriter out = response.getWriter();
		out.print(respMessage);
		out.close();
	}

}





当然,你也可以将方法上加个路径,只要保证这两个方法,路径一样就行,否则微信服务器是无法给你指定的url 发请求的。
  • 大小: 11 KB
分享到:
评论
2 楼 l379101003 2017-05-19  
引用
[code="java"]
1 楼 jtmjx 2016-12-30  
你好,我也做了一个,可是Get与微信对接校验的可以,但是POST 的方法无法接收微信发送的消息,直接没有调用,请问一下您有没有遇到这个问题?应该如何解决?谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics