init
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
package com.yupi.springbootinit.controller;
|
||||
|
||||
import com.yupi.springbootinit.wxmp.WxMpConstant;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.chanjar.weixin.common.api.WxConsts.MenuButtonType;
|
||||
import me.chanjar.weixin.common.bean.menu.WxMenu;
|
||||
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
|
||||
import me.chanjar.weixin.common.error.WxErrorException;
|
||||
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
|
||||
import me.chanjar.weixin.mp.api.WxMpService;
|
||||
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
|
||||
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 微信公众号相关接口
|
||||
*
|
||||
* @author <a href="https://github.com/liyupi">程序员鱼皮</a>
|
||||
* @from <a href="https://yupi.icu">编程导航知识星球</a>
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping("/")
|
||||
@Slf4j
|
||||
public class WxMpController {
|
||||
|
||||
@Resource
|
||||
private WxMpService wxMpService;
|
||||
|
||||
@Resource
|
||||
private WxMpMessageRouter router;
|
||||
|
||||
@PostMapping("/")
|
||||
public void receiveMessage(HttpServletRequest request, HttpServletResponse response)
|
||||
throws IOException {
|
||||
response.setContentType("text/html;charset=utf-8");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
// 校验消息签名,判断是否为公众平台发的消息
|
||||
String signature = request.getParameter("signature");
|
||||
String nonce = request.getParameter("nonce");
|
||||
String timestamp = request.getParameter("timestamp");
|
||||
if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
|
||||
response.getWriter().println("非法请求");
|
||||
}
|
||||
// 加密类型
|
||||
String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ? "raw"
|
||||
: request.getParameter("encrypt_type");
|
||||
// 明文消息
|
||||
if ("raw".equals(encryptType)) {
|
||||
return;
|
||||
}
|
||||
// aes 加密消息
|
||||
if ("aes".equals(encryptType)) {
|
||||
// 解密消息
|
||||
String msgSignature = request.getParameter("msg_signature");
|
||||
WxMpXmlMessage inMessage = WxMpXmlMessage
|
||||
.fromEncryptedXml(request.getInputStream(), wxMpService.getWxMpConfigStorage(), timestamp,
|
||||
nonce,
|
||||
msgSignature);
|
||||
log.info("message content = {}", inMessage.getContent());
|
||||
// 路由消息并处理
|
||||
WxMpXmlOutMessage outMessage = router.route(inMessage);
|
||||
if (outMessage == null) {
|
||||
response.getWriter().write("");
|
||||
} else {
|
||||
response.getWriter().write(outMessage.toEncryptedXml(wxMpService.getWxMpConfigStorage()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
response.getWriter().println("不可识别的加密类型");
|
||||
}
|
||||
|
||||
@GetMapping("/")
|
||||
public String check(String timestamp, String nonce, String signature, String echostr) {
|
||||
log.info("check");
|
||||
if (wxMpService.checkSignature(timestamp, nonce, signature)) {
|
||||
return echostr;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置公众号菜单
|
||||
*
|
||||
* @return
|
||||
* @throws WxErrorException
|
||||
*/
|
||||
@GetMapping("/setMenu")
|
||||
public String setMenu() throws WxErrorException {
|
||||
log.info("setMenu");
|
||||
WxMenu wxMenu = new WxMenu();
|
||||
// 菜单一
|
||||
WxMenuButton wxMenuButton1 = new WxMenuButton();
|
||||
wxMenuButton1.setType(MenuButtonType.VIEW);
|
||||
wxMenuButton1.setName("主菜单一");
|
||||
// 子菜单
|
||||
WxMenuButton wxMenuButton1SubButton1 = new WxMenuButton();
|
||||
wxMenuButton1SubButton1.setType(MenuButtonType.VIEW);
|
||||
wxMenuButton1SubButton1.setName("跳转页面");
|
||||
wxMenuButton1SubButton1.setUrl(
|
||||
"https://yupi.icu");
|
||||
wxMenuButton1.setSubButtons(Collections.singletonList(wxMenuButton1SubButton1));
|
||||
|
||||
// 菜单二
|
||||
WxMenuButton wxMenuButton2 = new WxMenuButton();
|
||||
wxMenuButton2.setType(MenuButtonType.CLICK);
|
||||
wxMenuButton2.setName("点击事件");
|
||||
wxMenuButton2.setKey(WxMpConstant.CLICK_MENU_KEY);
|
||||
|
||||
// 菜单三
|
||||
WxMenuButton wxMenuButton3 = new WxMenuButton();
|
||||
wxMenuButton3.setType(MenuButtonType.VIEW);
|
||||
wxMenuButton3.setName("主菜单三");
|
||||
WxMenuButton wxMenuButton3SubButton1 = new WxMenuButton();
|
||||
wxMenuButton3SubButton1.setType(MenuButtonType.VIEW);
|
||||
wxMenuButton3SubButton1.setName("编程学习");
|
||||
wxMenuButton3SubButton1.setUrl("https://yupi.icu");
|
||||
wxMenuButton3.setSubButtons(Collections.singletonList(wxMenuButton3SubButton1));
|
||||
|
||||
// 设置主菜单
|
||||
wxMenu.setButtons(Arrays.asList(wxMenuButton1, wxMenuButton2, wxMenuButton3));
|
||||
wxMpService.getMenuService().menuCreate(wxMenu);
|
||||
return "ok";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user