微信开发:事件处理

  • 概述
  • 文字处理
  • 语音处理
  • 其他事件
  • 附录

概述

原文链接http://blog.csdn.net/u011506468/article/details/47280443

公众号 SuperLishun,想要源码的可以关注公众号,给我留言。

微信服务器返回的数据都为如下格式

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml> 

先将其解析为java对象再处理,通过判断MsgType这个字段来判断消息的类型,进而进一步根据自己的需求进行处理。

/* type为上述MsgType */
switch (type)
                {
                    case "text":
                        oms = wechatService.textTypeMsg(msg, wechatUser);
                        break;
                    case "image":
                        oms = wechatService.imageTypeMsg(msg, wechatUser);
                        break;
                    case "voice":
                        oms = wechatService.voiceTypeMsg(msg, wechatUser);
                        break;
                    case "video":
                        oms = wechatService.videoTypeMsg(msg, wechatUser);
                        break;
                    case "location":
                        oms = wechatService.locationTypeMsg(msg, wechatUser);
                        break;
                    case "link":
                        oms = wechatService.linkTypeMsg(msg, wechatUser);
                        break;
                    case "event":
                        oms = wechatService.eventTypeMsg(msg, wechatUser);
                        break;
                    case "news":
                        oms = wechatService.eventNewsMsg(msg, wechatUser);
                        break;
                    default:
                        break;
                }

文字处理

通过msg的content内容获得输入的字符串,通过OutMessage对象的content字段将回复内容输出,InMessage和OutMessage的数据格式会在最下面给出。WeChatUser暂时不需要,为前面封装的微信用户信息对象。处理方法代码示例如下

   /**
     * 文字内容的消息处理
     * @param msg 接收信息
     * @param wechatUser 用户信息
     * @return 回复信息
     */
    public OutMessage textTypeMsg(InMessage msg, WechatUser wechatUser)
    {
        log.info(DateUtil.format(new Date(), DateUtil.FMT_S_TIMES)+"|" + msg.getContent() +"|文字内容的消息处理");
        OutMessage out = null;
        String str = msg.getContent().toLowerCase();
        out.setContent("您输入的是:" + str);
        return out;
    } 

语音处理

将微信开发者中心的语音识别接口开启,则可以接受已经被语音识别后的语音,代码差不多,只不过是接受输入字符串的变量变了,为recognition字段

   /**
     * 语音的消息处理
     * @param msg 接收信息
     * @param wechatUser 用户信息
     * @return 回复信息
     */
    public OutMessage textTypeMsg(InMessage msg, WechatUser wechatUser)
    {
        log.info(DateUtil.format(new Date(), DateUtil.FMT_S_TIMES)+"|" + msg.getContent() +"|语音内容的消息处理");
        OutMessage out = null;
        String str = msg.getRecognition().toLowerCase();
        out.setContent("您说的是:" + str);
        return out;
    } 

其他事件

有时间在写

附录

InMessage

import java.io.Serializable;

/**
 * 接收消息实体类
 * @author lishun
 *
 */
public class InMessage implements Serializable
{
    /**
     *
     */
    private static final long serialVersionUID = -2572635563423558942L;

    /** 开发者微信号  */
    private String ToUserName;

    //private String Encrypt;

    /** 发送方帐号OpenID */
    private String FromUserName;

    /** 消息创建时间  */
    private Long CreateTime;

    /** text,image,location,link,event,voice,video  */
    private String MsgType = "text";

    /** 消息ID  */
    private Long MsgId;

    /** 文本消息内容  */
    private String Content;

    /** 图片链接  */
    private String PicUrl;

    /** 地理位置纬度  */
    private String Location_X;

    /** 地理位置经度  */
    private String Location_Y;

    /** 地图缩放大小  */
    private Long Scale;

    /** 地理位置信息  */
    private String Label;

    /** 消息标题  */
    private String Title;

    /** 消息描述  */
    private String Description;

    /** 消息链接  */
    private String Url;

    /** subscribe,unsubscribe,subscribe,scan,location,click */
    private String Event;

    /** 事件KEY值,与自定义菜单接口中KEY值对应  */
    private String EventKey;

    /** 二维码的ticket,可用来换取二维码图片 */
    private String Ticket;

    /** 语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体  */
    private String MediaId;

    /** 语音格式:amr  */
    private String Format;

    /** 语音识别结果,UTF8编码  */
    private String Recognition;

    /** 消息id,64位整型  */
    private String MsgID;

    private String KfAccount;

    private String FromKfAccount;

    private String ToKfAccount;

    public String getFromKfAccount() {
        return FromKfAccount;
    }
    public void setFromKfAccount(String fromKfAccount) {
        FromKfAccount = fromKfAccount;
    }
    public String getToKfAccount() {
        return ToKfAccount;
    }
    public void setToKfAccount(String toKfAccount) {
        ToKfAccount = toKfAccount;
    }
    private TransInfo TransInfo;

    public String getToUserName() {
        return ToUserName;
    }
    public void setToUserName(String toUserName) {
        this.ToUserName = toUserName;
    }
    public String getFromUserName() {
        return FromUserName;
    }
    public void setFromUserName(String fromUserName) {
        this.FromUserName = fromUserName;
    }
    public Long getCreateTime() {
        return CreateTime;
    }
    public void setCreateTime(Long createTime) {
        this.CreateTime = createTime;
    }
    public String getMsgType() {
        return MsgType;
    }
    public void setMsgType(String msgType) {
        this.MsgType = msgType;
    }
    public Long getMsgId() {
        return MsgId;
    }
    public void setMsgId(Long msgId) {
        this.MsgId = msgId;
    }
    public String getContent() {
        return Content;
    }
    public void setContent(String content) {
        this.Content = content;
    }
    public String getPicUrl() {
        return PicUrl;
    }
    public void setPicUrl(String picUrl) {
        this.PicUrl = picUrl;
    }
    public String getLocation_X() {
        return Location_X;
    }
    public void setLocation_X(String location_X) {
        this.Location_X = location_X;
    }
    public String getLocation_Y() {
        return Location_Y;
    }
    public void setLocation_Y(String location_Y) {
        this.Location_Y = location_Y;
    }
    public Long getScale() {
        return Scale;
    }
    public void setScale(Long scale) {
        this.Scale = scale;
    }
    public String getLabel() {
        return Label;
    }
    public void setLabel(String label) {
        this.Label = label;
    }
    public String getTitle() {
        return Title;
    }
    public void setTitle(String title) {
        this.Title = title;
    }
    public String getDescription() {
        return Description;
    }
    public void setDescription(String description) {
        this.Description = description;
    }
    public String getUrl() {
        return Url;
    }
    public void setUrl(String url) {
        this.Url = url;
    }
    public String getEvent() {
        return Event;
    }
    public void setEvent(String event) {
        this.Event = event;
    }
    public String getEventKey() {
        return EventKey;
    }
    public void setEventKey(String eventKey) {
        this.EventKey = eventKey;
    }
    public String getTicket() {
        return Ticket;
    }
    public void setTicket(String ticket) {
        Ticket = ticket;
    }
    public String getMediaId() {
        return MediaId;
    }
    public void setMediaId(String mediaId) {
        MediaId = mediaId;
    }
    public String getFormat() {
        return Format;
    }
    public void setFormat(String format) {
        Format = format;
    }
    public String getRecognition() {
        return Recognition;
    }
    public void setRecognition(String recognition) {
        Recognition = recognition;
    }
    public String getMsgID() {
        return MsgID;
    }
    public void setMsgID(String msgID) {
        MsgID = msgID;
    }
    public TransInfo getTransInfo() {
        return TransInfo;
    }
    public void setTransInfo(TransInfo transInfo) {
        TransInfo = transInfo;
    }
    public String getKfAccount() {
        return KfAccount;
    }
    public void setKfAccount(String kfAccount) {
        KfAccount = kfAccount;
    }
//  public String getEncrypt() {
//      return Encrypt;
//  }
//  public void setEncrypt(String encrypt) {
//      Encrypt = encrypt;
//  }
}

OutMessage

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 回复消息实体类
 * @author lishun
 *
 */
public class OutMessage implements Serializable
{
    /** 接收方帐号OpenID  */
    private String ToUserName;

    /** 开发者微信号  */
    private String FromUserName;

    /** 消息创建时间  */
    private Long CreateTime;

    /** text,image,voice,video,music,news */
    private String MsgType = "text";

    /** 消息ID  */
    private Long msgId;

    /** 回复的消息内容长度不超过2048字节  */
    private String Content;

    private int FuncFlag = 0;

    /** 通过上传多媒体文件得到的ID */
    public String MediaId;

    /** 缩略图的媒体ID通过上传多媒体文件得到的ID  */
    public String ThumbMediaId;

    /** 音乐链接  */
    private String MusicUrl;

    /** 高质量音乐链接  */
    private String HQMusicUrl;

    /** 图文消息个数限制为10条以内  */
    private Integer ArticleCount;

    /** 图文消息标题  */
    private String Title;

    /** 图文消息描述  */
    private String Description;

    /** 图片链接支持JPG、PNG格式较好的效果为大图640*320小图80*80  */
    private String PicUrl;

    /** 点击图文消息跳转链接  */
    private String Url;

    private TransInfo TransInfo;

    private List<Articles> Articles;

    public String getToUserName() {
        return ToUserName;
    }

    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }

    public String getFromUserName() {
        return FromUserName;
    }

    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }

    public Long getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(Long createTime) {
        CreateTime = createTime;
    }

    public String getMsgType() {
        return MsgType;
    }

    public void setMsgType(String msgType) {
        MsgType = msgType;
    }

    public Long getMsgId() {
        return msgId;
    }

    public void setMsgId(Long msgId) {
        this.msgId = msgId;
    }

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }

    public int getFuncFlag() {
        return FuncFlag;
    }

    public void setFuncFlag(int funcFlag) {
        FuncFlag = funcFlag;
    }

    public String getMediaId() {
        return MediaId;
    }

    public void setMediaId(String mediaId) {
        MediaId = mediaId;
    }

    public String getThumbMediaId() {
        return ThumbMediaId;
    }

    public void setThumbMediaId(String thumbMediaId) {
        ThumbMediaId = thumbMediaId;
    }

    public String getMusicUrl() {
        return MusicUrl;
    }

    public void setMusicUrl(String musicUrl) {
        MusicUrl = musicUrl;
    }

    public String getHQMusicUrl() {
        return HQMusicUrl;
    }

    public void setHQMusicUrl(String hQMusicUrl) {
        HQMusicUrl = hQMusicUrl;
    }

    public Integer getArticleCount() {
        return ArticleCount;
    }

    public void setArticleCount(Integer articleCount) {
        ArticleCount = articleCount;
    }

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        Description = description;
    }

    public String getPicUrl() {
        return PicUrl;
    }

    public void setPicUrl(String picUrl) {
        PicUrl = picUrl;
    }

    public String getUrl() {
        return Url;
    }

    public void setUrl(String url) {
        Url = url;
    }

    public List<Articles> getArticles() {
        return Articles;
    }

    public void setArticles(List<Articles> articles) {
        if (articles.size() > 10)
            articles = new ArrayList<Articles>(articles.subList(0, 10));
        this.Articles = articles;
    }

    public TransInfo getTransInfo() {
        return TransInfo;
    }
    public void setTransInfo(TransInfo transInfo) {
        TransInfo = transInfo;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 04:09:43

微信开发:事件处理的相关文章

【写给小部员的基础微信开发教程2】php介绍及基础

//深夜码字有点困- -. 前言:此为本人所写的第一篇教程,本人将尽可能保证文中相关名词的规范与准确,但由于本人技术知识所限,难免会有所错误,恳请各位读者批评指正,一起交流学习,谢谢. 注:本教程适用于已对 html有基础认知 以及学习过 c++或c或java等编程语言的 同学. 本次教程 php基础 的内容如下: 一.概述 二.应用场景 三.基础语法 以下为正文: 一.概述 php的定义:PHP(Hypertext Preprocessor 超文本预处理器) 是一种创建动态交互性站点的强有力的

Force.com微信开发系列(四)申请Access Token及自定义菜单之创建菜单

在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介绍如何获取Access Token,再介绍如何通过Access Token来在微信内添加自定义菜单(注意,开发者需要申请测试账号来测试自定义菜单,如何申请请参照前文). 申请Access Token 获取Access Token接口的网址如下: https://api.weixin.qq.com/c

《C#微信开发系列(4)-接收 / 返回文本消息》

4.0接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息微信开发文档,对微信的这种消息处理机制有一定了解之后再着手开发(微信开发接收普通消息开发文档) 注意点: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不

【微信开发】网页授权多域名解决方案

在做微信开发的时候,会遇到这样的场景:一个公众号,会有多个业务:官网.论坛.商城等等 网页授权是只能一个域名,那么问题来了?这怎么搞? 答案就是: 做一个中转服务! 域名1: www.test.com 域名2: bbs.test.com 这时候,再解析一个二级域名:code.test.com 作为中转授权域名 并在微信公众平台后台网页授权域名地方填写这个 中转域名 www.test.com   授权代码改为: header("location:http://code.test.com/code.

Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先设置一下授权回调域.这里瞬间想到之前做JSSDK的时候,也设置过一个域名.二者本质上都是设置可信域名. 当用户授权完毕之后,请求将重定向到此域名(或者子域名)下的执行者(jsp页面或者servlet等).如何设置授权回调域,请见第二节. 1.2 获取Code https://open.weixin.

夺命雷公狗---微信开发23----客服消息接口基础和推送文本

我们这边课程里面一共用到了三个文件,分别是WeChat.class.php和common.php以及index.php 我们在写这个功能之前也要学会查手册,手册我们可以在微信开发这里找到,如下所示: 点击进去后我们将会看到客服接口,我们可以点击下进去看看里面有什么动动 这里有一个发送文本消息的,我们点击进去看下 这里很明显就看到文本消息是通过一个json数据来进行实现的,废话不多说,开工 这里我们先来写一个WeChat.php的文件,这里作用主要适用于封装一个CURL上传类的,代码如下所示: <

微信开发学习总结(一)—微信开发环境搭建

目前移动App开发领域主要分为以下几种类型: 一.微信开发环境搭建 1.要有一个用来测试的公众号. 2.用来调式代码的开发环境 1.1.注册测试公众号 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发指的是订阅号和服务号. 关于订阅号和服务号的区别,官方是这样解释的 服务号:主要偏向于服务交互(功能类似12315,114,银行,提供绑定信息,服务交互),每月可群发4条消息:服务号适用人群:媒体.企业.政府或其他组织. 订阅号:

微信开发之如何使用开发工具--weixin-java-tools

一.前沿 微信公众平台由于没有提供针对语言的开发包,只公布了一个基于Http协议的接口和加解密的算法sdk,这样给微信公众号的开发者带来很多工作量,除了实现业务逻辑外,还需要自己处理底层的接口协议细节,因此选择一个良好的sdk能够节省这样的工作量,而目前已经有不少的开源sdk可供使用,java语言的微信公众号sdk也有不少,那么作为java开发者我们应该如何选择呢?我将带着各位对java开源的一些微信公众号的sdk进行各方面的对比分析,为读者选择适合自己的sdk包提供一些帮助. 二.为什么要用w

Java企业微信开发_03_通讯录同步

一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取或者编辑通讯录. 获取通讯录密钥的目的: 通过企业ID(CorpId)和 通讯录密钥可以获取通讯录相关接口的使用凭证(AccessToken).有了AccessToken,就可以使用通讯录相关接口了. 凭证的获取方式有两种(此处暂时存疑,以待勘误): 通讯录AccessToken:CorpId+通讯录密钥 其

微信开发束缚了你的思想

最近通过在新浪云上建立了自己的应用,进行了微信的开发.渐渐对微信开发由开始的好奇变成了一种轻视的态度(当然此处不乏装逼的嫌疑.)下面谈谈自己对微信开发的一点理解,希望对即将进行微信开发的人员有一点帮助. 微信开发的关键就是有一个可以线上调试的域名.空间.之前,在网上搜索各种免费的域名.空间啊,然后就是各种注册,最后还是没得到.有的获得了域名.空间,但是速度那是相当的慢啊.恰巧公司同事有在做微信开发的,下班的时候就询问了一下,如何获得域名.空间啊.然后就知道了新浪云,可以以较少的费用获取新浪云,当