求教微信自动回复问题

首先这不是关于jfinal的问题,但是实在是找不到答案了,只能再次求助,望大佬们不吝赐教。

问题是这样的,我自己实现了微信公众号开发的相关代码(功能比较简单),做到自动回复这一块的时候发现了一个比较灵异的状况:关注事件、菜单点击事件、模板消息发送推送事件都可以正常响应,但是文本回复事件却得不到正常的响应。我打印出了我的返回值貌似也没有任何问题

<xml>
<ToUserName><![CDATA[o-uf2t6R0dVazSU1uzxGnNw4cu9U]]></ToUserName>
<FromUserName><![CDATA[gh_ae2e574e89a8]]></FromUserName>
<CreateTime>1572261071113</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

文本自动回复在关注事件里可以正常回复,普通文本就不行了,我在公众号发送一个“你好”,控制台也看也执行了,生成了xml,但公众号就是没反应

主要代码如下:

controller:

private void optionText(Map<String,String> msg) throws WxTokenException {
    System.out.println(msg.get("Content"));
    switch (msg.get("Content")){
        case "模板列表"://发送文本分情况讨论
            //下面这句执行成功但公众号没有收到信息
            renderText(wxService.replyText(msg.get("FromUserName"),"已收到"+msg.get("Content")+"请求"));
            //下面这句发送模板成功
            wxService.sendTemplate(WxTemplateUtil.auditResultTemplate(msg.get("FromUserName"),"张三","2019-10-10 10:10:10",0,""));
            break;
        case "你好"://收到“你好”执行 成功,但是没有收到信息
            renderText(wxService.replyText(msg.get("FromUserName"),"你好"));
            break;
        default://随便输入东西也收不到信息
            renderText(wxService.replyText(msg.get("FromUserName"),"输入关键字有误"));
    }
}

WxService:

/**
 * 回复文本
 * @param openId 收消息的用户
 * @param text 文本内容
 * @return 返回微信支持的格式
 */
public String replyText(String openId,String text){
    String result = String.format(
            "<xml>" +
                    "<ToUserName><![CDATA[%s]]></ToUserName>" +
                    "<FromUserName><![CDATA[%s]]></FromUserName>" +
                    "<CreateTime>%s</CreateTime>" +
                    "<MsgType><![CDATA[text]]></MsgType>" +
                    "<Content><![CDATA[%s]]></Content>" +
                    "</xml>",
            openId, this.wxNo, new Date().getTime(),text);
    System.out.println(result);
    return result;
}


评论区

JFinal

2019-10-28 19:48

void processInTextMsg(InTextMsg inTextMsg) 这个方法是否被访问到了,这个是关键,要确保请求是存在的

抉择

2019-10-29 09:39

大佬,我没用咱们的jar包,初开始觉得简单就自己写了个方法,但是发现这种奇葩的事儿找不到原因了,我贴代码在上面吧,您帮我看看?

JFinal

2019-10-29 10:32

@抉择 发送消息如果失败,服务端貌似会回复一个状态码,根据状态码来处理一下

你碰到的是细节问题,需要通过单步调试来解决,肉眼去看是很难发现问题的,调试环境的搭建参考文档:
https://gitee.com/jfinal/jfinal-weixin/wikis/JFinal%20weixin%20demo%E5%92%8C%E8%B0%83%E8%AF%95?sort_id=10002

抉择

2019-11-02 10:49

@JFinal 乌龙了乌龙了,判断文本消息用的是switch case ,但是少了一个break,导致直接走到了default的空字符串返回,感谢大佬耐心回复。

JFinal

2019-11-02 14:45

@抉择 你的代码中貌似不缺 break, 后来补上去的?

抉择

2019-11-08 17:38

@JFinal 不是,缺break的那一行代码我没有贴上来,调用optionText的时候就缺了,尴尬

热门反馈

扫码入社