假设你已经拥有一个微信测试号,基本信息如下图所示:
编辑扣接口配置信息,URL为域名服务信息地址/项目名/controller中配置的requestmapping路径(个人开发测试的时候是用的NATAPP进行的内网穿透生成的访问路径,本人计算机基础比较差,说实话我还是不太理解什么原理,大神可以在下面指导一下)
接下来在java项目中编写入口controller,get请求用来接收微信服务器发送的验证请求,post用来接收微信端发过来的消息请求
package com.zhoumin.wechat.controller;
import com.zhoumin.wechat.service.MessageService;
import com.zhoumin.wechat.utils.SignUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
@RestController
@RequestMapping("/wechatEntrance")
public class WechatIndexController {
private static final Logger logger = LoggerFactory.getLogger(WechatIndexController.class);
@Autowired
private MessageService messageService;
@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) {
logger.error("IO异常",e.getMessage());
} finally {
out.close();
}
}
@RequestMapping(method = RequestMethod.POST)
public void post(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setCharacterEncoding("UTF-8");
// 调用核心业务类接收消息、处理消息
String respMessage = messageService.newMessageRequest(request);
// 响应消息
PrintWriter out = null;
try {
out = response.getWriter();
out.print(respMessage);
} catch (IOException e) {
logger.error("IO异常",e.getMessage());
} finally {
out.close();
}
}
}
以上搞好之后,点击接口配置提交按钮,显示配置成功就表示测试号已经配置好后台服务信息了,如果失败的话就要参考微信开发文档找找原因,笔者遇到基本上是服务器信息URL配置的问题。