您的位置:首页 > 移动开发 > 微信开发

微信小程序消息推送服务器接入

2018-03-05 14:56 447 查看
1、消息转发地址填写,需要注意的是token和encodingaeskey要和项目中配置一致



2、URL要实现两个路由相同的方法但是一个需要时GET另一个是POST,如下 @ResponseBody
@RequestMapping(method=RequestMethod.GET,produces= "text/plain;charset=utf-8")
public void authGet(@RequestParam(name = "signature", required = false) String signature,
@RequestParam(name = "timestamp", required = false) String timestamp,
@RequestParam(name = "nonce", required = false) String nonce,
@RequestParam(name = "echostr", required = false) String echostr,HttpServletResponse response) throws Exception {
this.logger.info("\n接收到来自微信服务器的认证消息:[{}, {}, {}, {}]", signature, timestamp, nonce, echostr);

if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
throw new IllegalArgumentException("请求参数非法,请核实!");
}

String[] str = { TOKEN, timestamp, nonce };
Arrays.sort(str); // 字典序排序
String bigStr = str[0] + str[1] + str[2];
// SHA1加密
SHA1 sha1= new SHA1();
String digest =sha1.gen(str);

// 确认请求来至微信
if (digest.equals(signature)) {
response.getWriter().print(echostr);
}
}
/**
* POST请求:
* 接收客服消息;
* 此处的value值也就是往微信公众平台要配置的请求的地址
*/
@ResponseBody
@RequestMapping(method=RequestMethod.POST)
public JSONObject doMessagePost(HttpServletRequest request,HttpServletResponse response) {
try {
ServletInputStream stream = request.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = new String("");
while((line = reader.readLine()) != null){
buffer.append(line);
}
JSONObject jsonObject = JSONObject.fromObject(buffer.toString());

String to=jsonObject.getString("ToUserName");
String from=jsonObject.getString("FromUserName");
String time=jsonObject.getString("CreateTime");
String sessionFrom=jsonObject.getString("SessionFrom");
String msgType=jsonObject.getString("MsgType");

PrintWriter out=response.getWriter();

String msg="<xml>\r\n" +
"     <ToUserName><![CDATA["+to+"]]></ToUserName>\r\n" +
"     <FromUserName><![CDATA["+from+"]]></FromUserName>\r\n" +
"     <CreateTime>"+time+"</CreateTime>\r\n" +
"     <MsgType><![CDATA[transfer_customer_service]]></MsgType>\r\n" +
" </xml>";

out.print(msg);

if("event".equals(msgType)&&"follow".equals(sessionFrom)) {
pushService.setSendCustomerMsgLink(from);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
第一个方法用于验证,第二个方法用于接收消息转发和其他业务逻辑实现,方法二中也实现了接收到的客服消息转发给客服,关键点在于
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
至此也就全部完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息