300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 微信公众平台服务器配置(自动回复)

微信公众平台服务器配置(自动回复)

时间:2022-02-24 04:57:12

相关推荐

微信公众平台服务器配置(自动回复)

创建下面两个文件即可

pom

<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.11.1</version></dependency>

1.WeChatController

@RestController@RequestMapping("/wx")public class WeChatController extends BaseController{//1.服务器配置@GetMapping("/check")public String checkSign(HttpServletRequest request, HttpServletResponse response) throws Exception {{try {String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");if (SignUtil.checkSignature(signature, timestamp, nonce)) {return echostr;}} catch (Exception e) {throw new Exception();}}return null;}//2.接受用户查询信息@PostMapping(value = "/check", produces = MediaType.APPLICATION_XML_VALUE)public String receiveWX(HttpServletRequest request, HttpServletResponse response) throws Exception {try {Marshaller marshaller;Unmarshaller unmarshal;//你要解析成哪个bean对象,newInstance的参数就是哪个对象JAXBContext jaxbContext = JAXBContext.newInstance(WXMessgeBean.class);unmarshal = jaxbContext.createUnmarshaller();//xml解码成bean对象WXMessgeBean wxMessgeBean = (WXMessgeBean) unmarshal.unmarshal(request.getInputStream());WXMessgeBean bean = new WXMessgeBean();//发送方openIdbean.setFromUserName(wxMessgeBean.getToUserName());bean.setToUserName(wxMessgeBean.getFromUserName());bean.setCreateTime(new Date().getTime());if ("text".equals(wxMessgeBean.getMsgType())){bean.setMsgType("text");//匹配答案bean.setContent("你好,欢迎浏览我的公众号");marshaller = jaxbContext.createMarshaller();StringWriter writer = new StringWriter();marshaller.marshal(bean,writer);return writer.toString();}else if ("image".equals(wxMessgeBean.getMsgType())){}else if("event".equals(wxMessgeBean.getMsgType())){//关注/取关if("subscribe".equals( wxMessgeBean.getEvent())){}else if("unsubscribe".equals( wxMessgeBean.getEvent())){}}} catch (Exception e) {e.printStackTrace();}return null;}}

2.SignUtil

public class SignUtil {private static String token = "123321";// 与微信公众号上的token一致,是服务器令牌(token),这里写什么。服务器就填什么/*** 校验签名** @param signature 签名* @param timestamp 时间戳* @param nonce随机数* @return 布尔值*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String checktext = null;if (null != signature) {//对ToKen,timestamp,nonce 按字典排序String[] paramArr = new String[]{token, timestamp, nonce};Arrays.sort(paramArr);//将排序后的结果拼成一个字符串String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);try {MessageDigest md = MessageDigest.getInstance("SHA-1");//对接后的字符串进行sha1加密byte[] digest = md.digest(content.toString().getBytes());checktext = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}//将加密后的字符串与signature进行对比return checktext != null ? checktext.equals(signature.toUpperCase()) : false;}/*** 将字节数组转化我16进制字符串** @param byteArrays 字符数组* @return 字符串*/private static String byteToStr(byte[] byteArrays) {String str = "";for (int i = 0; i < byteArrays.length; i++) {str += byteToHexStr(byteArrays[i]);}return str;}/*** 将字节转化为十六进制字符串** @param myByte 字节* @return 字符串*/private static String byteToHexStr(byte myByte) {char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};char[] tampArr = new char[2];tampArr[0] = Digit[(myByte >>> 4) & 0X0F];tampArr[1] = Digit[myByte & 0X0F];String str = new String(tampArr);return str;}}

3.WXMessgeBean

@XmlRootElement(name="xml")@XmlAccessorType(XmlAccessType.FIELD)@Datapublic class WXMessgeBean {private String FromUserName;private String ToUserName;private long CreateTime;private String MsgType;private String Event;private String EventKey;private String Content;private String Url;private String PicUrl;private String MediaId;private String Format;private String Recognition;private String ThumbMediaId;//地理位置private float Location_X;private float Location_Y;private float Scale;private long MsgId;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。