zoukankan      html  css  js  c++  java
  • wechat4j对于不需要处理的消息类型的处理

    wechat4j对微信公众平台的api文档时行了一系列的封装(Java SDK),只需调用方法就能实现对其方法的使用,项目地址为:wechat4j项目地址

    但是它将所有的类型都进行了重写,而对于不需要处理的消息类型,都有进行回复。而目前项目中只用到了自定义菜单的消息类型,而对于其它类型,wechat4j默认使用了文本类型进行回复,不符合我的需求。而微信官方规定,如果不需要处理,那么可以回复空串(空字符串指的是xml为“”,而不是文本内容为空)


    因此,我是这样处理的,如果大家有更好的办法,欢迎一起交流。

    wechat4j接收到消息后,它首先会解析接收的消息内容,然后根去消息类型进行不同消息类型的处理。然后再对消息进行响应,回复发送者的消息

    如图:


    1.在WechatSupport中定义一个变量

    protected static boolean responceNull = false;

    2.在dispatch()方法中,每次请求时将其设为false

    private String dispatch() {
    	String postDataStr = null;
    	responceNull = false;
    	try {
    		postDataStr = StreamUtils.streamToString(request.getInputStream());
    	} catch (IOException e) {
    		logger.error("post data deal failed!");
    		e.printStackTrace();
    	}
    	// 解析数据
    	setPostData(postDataStr);
    	// 消息分发处理
    	dispatchMessage();
    	// 响应事件
    	String result = response();
    	return result;
    }

    3.在response()方法中,根据responseNull的值,如果为true,直接让xml的值为""

    private String response(){
    	String result = null;
    		
    	if (responceNull) {
    		return "";
    	}
    	try {
    		JaxbParser jaxbParser = new JaxbParser(WechatResponse.class);
    		//设置
    		jaxbParser.setCdataNode(WechatResponse.CDATA_TAG);
    		result = jaxbParser.toXML(wechatResponse);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	return result;
    }

    4.这样在调用时,如果对于不需要处理的消息内容,直接将responseNull设为true即可

    /**
     * 文本消息
    */
    @Override
    protected void onText() {
    	responceNull = true;
    }


  • 相关阅读:
    python文件上传
    Django
    Python生产环境部署(fastcgi,uwsgi)
    tp3.2 自带的文件上传及生成缩略图功能
    图片上传--base64
    图片上传
    PHP处理大数据量老用户头像更新的操作--解决数据量大超时的问题
    mysql悲观锁处理赠品库存超卖的情况
    bzoj 3551: [ONTAK2010]Peaks加强版
    bzoj 4817: [Sdoi2017]树点涂色
  • 原文地址:https://www.cnblogs.com/dulinan/p/12033069.html
Copyright © 2011-2022 走看看