微信普通消息类型

接收普通消息

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

具体有以下类型的消息类型

  • 文本消息
  • 图片消息
  • 语音消息
  • 视频消息
  • 小视频消息
  • 地理位置消息
  • 链接消息

下面简单介绍各种消息包含数据字段和数据实体封装

文本消息

<xml>
<ToUserName><![CDATA[gh_47bd9550a0a1]]></ToUserName>
<FromUserName><![CDATA[oFTYt0l9wQDDhwmx1js_d1T6zZkw]]></FromUserName>
<CreateTime>1530689641</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[文本消息]]></Content>
<MsgId>6574261948839470964</MsgId>
</xml>
参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypetext
Content文本消息内容
MsgId消息id,64位整型
public class TextData extends WeixinData {
    private String Content;      //文本消息内容
    private String MsgId;        //消息id,64位整型

    public TextData(){}

    public TextData(String toUserName, String fromUserName, String content) {
        super(toUserName, fromUserName, "text");
        Content = content;
    }

    public String getContent() {
        return Content;
    }

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

    public String getMsgId() {
        return MsgId;
    }

    public void setMsgId(String msgId) {
        MsgId = msgId;
    }
}

图片消息

<xml>
<ToUserName><![CDATA[gh_47bd9550a0a1]]></ToUserName>
<FromUserName><![CDATA[oFTYt0l9wQDDhwmx1js_d1T6zZkw]]></FromUserName>
<CreateTime>1530689943</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz_jpg/T85yfKllsbIWj3WwiaaDGkysmbNYo80JtffEwIvKj3dkDfm2NfuqZJ34wJNKdYwn7wQ5V9g5JHv5mCe9jqEvtcA/0]]></PicUrl>
<MsgId>6574263245919594391</MsgId>
<MediaId><![CDATA[SRazYKH_aw5nACnUdjwexDcc9WmPAuJVV8_u6Fa5-79WzpiQtoScKljpG8musls2]]></MediaId>
</xml>

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypeimage
PicUrl图片链接(由系统生成)
MediaId图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId消息id,64位整型
public class ReceivedImageData extends WeixinData {
    private String PicUrl;        //图片链接(由系统生成)
    private String MediaId;       //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
    private String MsgId;         //消息id,64位整型

    public ReceivedImageData(String toUserName, String fromUserName){
        super(toUserName, fromUserName, "image");
    }

    public String getPicUrl() {
        return PicUrl;
    }

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

    public String getMediaId() {
        return MediaId;
    }

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

    public String getMsgId() {
        return MsgId;
    }

    public void setMsgId(String msgId) {
        MsgId = msgId;
    }
}

语音消息

<xml>
<ToUserName><![CDATA[gh_47bd9550a0a1]]></ToUserName>
<FromUserName><![CDATA[oFTYt0l9wQDDhwmx1js_d1T6zZkw]]></FromUserName>
<CreateTime>1530689999</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[e2D0kI4d9xvcJMT2TDbg3e-W3muya6eKG_lje_gw9-3dkqCIO6-bZ-DgDEK8SLwK]]></MediaId>
<Format><![CDATA[amr]]></Format>
<MsgId>6574263486437762981</MsgId>
<Recognition><![CDATA[]]></Recognition>
</xml>

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType语音为voice
MediaId语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
Format语音格式,如amr,speex等
MsgID消息id,64位整数

public class ReceivedVoiceData extends WeixinData {
    private String MediaId;//语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
    private String Format;//语音格式,如amr,speex等
    private String MsgID;//消息id,64位整型

    public ReceivedVoiceData(String toUserName, String fromUserName){
        super(toUserName, fromUserName, "voice");
    }

    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 getMsgID() {
        return MsgID;
    }

    public void setMsgID(String msgID) {
        MsgID = msgID;
    }
}
视频消息
<xml>
<ToUserName><![CDATA[gh_47bd9550a0a1]]></ToUserName>
<FromUserName><![CDATA[oFTYt0l9wQDDhwmx1js_d1T6zZkw]]></FromUserName>
<CreateTime>1530690073</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[g-ycQ1lYkP4VFmsnlI9g4R_RKhljGLUVR40EdReW0wyf45KxJEbvv8AiMr5JxTSd]]></MediaId>
<ThumbMediaId><![CDATA[riUl68vupZ9q0LEyG-ltqPcS-AXhd9hlcsGayGixxd6-OWkCkxJKOihrqkAVRaYX]]></ThumbMediaId>
<MsgId>6574263804265342892</MsgId>
</xml>

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType视频为video
MediaId视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId消息id,64位整型
public class ReceivedVideoData extends WeixinData {
    private String MediaId;          //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
    private String ThumbMediaId;     //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
    private String MsgId;            //消息id,64位整型
    
    public ReceivedVideoData(String toUserName, String fromUserName){
        super(toUserName, fromUserName, "video");
    }

    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 getMsgId() {
        return MsgId;
    }

    public void setMsgId(String msgId) {
        MsgId = msgId;
    }
}

小视频消息

<xml>
<ToUserName>< ![CDATA[toUser] ]></ToUserName>
<FromUserName>< ![CDATA[fromUser] ]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType>< ![CDATA[shortvideo] ]></MsgType>
<MediaId>< ![CDATA[media_id] ]></MediaId>
<ThumbMediaId>< ![CDATA[thumb_media_id] ]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>
参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType小视频为shortvideo
MediaId视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId消息id,64位整型

地理位置消息

<xml>
<ToUserName><![CDATA[gh_47bd9550a0a1]]></ToUserName>
<FromUserName><![CDATA[oFTYt0l9wQDDhwmx1js_d1T6zZkw]]></FromUserName>
<CreateTime>1530690166</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>40.054329</Location_X>
<Location_Y>116.303307</Location_Y>
<Scale>16</Scale>
<Label><![CDATA[北京市海淀区西二旗]]></Label>
<MsgId>6574264203697301436</MsgId>
</xml>

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypelocation
Location_X地理位置维度
Location_Y地理位置经度
Scale地图缩放大小
Label地理位置信息
MsgId消息id,64位整型
public class ReceivedLocationData extends WeixinData {
    private String Location_X;       //	地理位置维度
    private String Location_Y;       //	地理位置经度
    private String Scale;            //	地图缩放大小
    private String Label;            //	地理位置信息
    private String MsgId;            //	消息id,64位整型
    
    public ReceivedLocationData(String toUserName, String fromUserName){
        super(toUserName, fromUserName, "location");
    }

    public String getLocation_X() {
        return Location_X;
    }

    public void setLocation_X(String location_X) {
        Location_X = location_X;
    }

    public String getLocation_Y() {
        return Location_Y;
    }

    public void setLocation_Y(String location_Y) {
        Location_Y = location_Y;
    }

    public String getScale() {
        return Scale;
    }

    public void setScale(String scale) {
        Scale = scale;
    }

    public String getLabel() {
        return Label;
    }

    public void setLabel(String label) {
        Label = label;
    }

    public String getMsgId() {
        return MsgId;
    }

    public void setMsgId(String msgId) {
        MsgId = msgId;
    }
}

链接消息

<xml>
<ToUserName>< ![CDATA[toUser] ]></ToUserName>
<FromUserName>< ![CDATA[fromUser] ]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType>< ![CDATA[link] ]></MsgType>
<Title>< ![CDATA[公众平台官网链接] ]></Title>
<Description>< ![CDATA[公众平台官网链接] ]></Description>
<Url>< ![CDATA[url] ]></Url>
<MsgId>1234567890123456</MsgId>
</xml>

参数描述
ToUserName接收方微信号
FromUserName发送方微信号,若为普通用户,则是一个OpenID
CreateTime消息创建时间
MsgType消息类型,link
Title消息标题
Description消息描述
Url消息链接
MsgId消息id,64位整型
public class ReceivedLinkData extends WeixinData {
    private String Title;            //	消息标题
    private String Description;      //	消息描述
    private String Url;              //	消息链接
    private String MsgId;            //	消息id,64位整型

    public ReceivedLinkData(String toUserName, String fromUserName){
        super(toUserName, fromUserName, "link");
    }

    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 getUrl() {
        return Url;
    }

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

    public String getMsgId() {
        return MsgId;
    }

    public void setMsgId(String msgId) {
        MsgId = msgId;
    }
}

将普通消息中公有的数据抽取出来封装成底层的基类WeixinData

public class WeixinData {

    private String ToUserName;        //开发者微信号
    private String FromUserName;      //发送方帐号(一个OpenID)
    private Long CreateTime;          //消息创建时间 (整型)
    private String MsgType;           //消息类型,event,text,image

    public WeixinData() {
    }

    public WeixinData(String toUserName, String fromUserName, String msgType) {
        ToUserName = toUserName;
        FromUserName = fromUserName;
        MsgType = msgType;
        this.CreateTime = System.currentTimeMillis();
    }

    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;
    }
}

微信官方文档 :https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453

### 使用Python实现向微信发送消息 #### 一、使用`itchat`库给个人或群聊发送消息 对于普通微信用户而言,可以借助第三方库 `itchat` 实现自动化操作。该库允许开发者登录网页版微信账号,并提供了一系列接口来处理聊天记录以及发送不同类型的信息。 安装依赖: ```bash pip install itchat ``` 下面是一段简单的例子展示怎样利用此库向指定联系人或者加入的群里广播信息[^1]: ```python import itchat # 自动登陆 itchat.auto_login(hotReload=True) # 获取好友列表 friends = itchat.get_friends(update=True)[0:] for friend in friends: userName = friend['UserName'] nickName = friend['NickName'] # 向每个好友发送问候语句 message = f'你好, {nickName}, 这里有一条来自机器人的温馨提醒!' itchat.send_msg(message, toUserName=userName) # 查找特定名称的群组并发送消息到群里 rooms = itchat.search_chatrooms(name='目标群名') if rooms is not None and len(rooms)>0 : room_name = rooms[0]['UserName'] msg = '这是测试消息' itchat.send(msg,toUserName=room_name) else: print('未找到对应群') # 登出 itchat.logout() ``` 需要注意的是,在实际应用过程中应当遵循官方规定,避免频繁调用API造成封号风险;同时也要考虑到隐私保护等问题。 #### 二、针对企业级用户的方案——通过企业微信API发送消息 如果是在工作场景下,则推荐采用更为正式可靠的方式即集成企业微信服务端SDK来进行开发。这种方式不仅安全性更高而且功能也更加全面稳定[^2]。 首先得注册成为企业成员获取相应的CorpID等参数,接着按照文档指引完成OAuth认证流程获得AccessToken之后便能轻松调用各种RESTful风格的服务接口了。具体步骤如下所示: - 访问 [企业微信开放平台](https://open.work.weixin.qq.com/) 注册账号; - 创建自定义应用拿到AgentId; - 根据官方指南编写相应逻辑代码片段; 这里给出一段简化版示范程序用于说明如何推送文本形式的通知至指定部门内的所有员工收件箱内: ```python from weixin import WeChatClient client = WeChatClient("corpid", "secret") agent_id = 1000002 message_type = "text" content = {"content": "这是一则重要公告"} party_ids = ["1"] # 部门id集合 response = client.message.send( agent_id, message_type=message_type, content=content, party_ids=party_ids ) print(response.json()) ``` 上述方法适用于大多数情况下的需求满足,但对于更复杂的应用场景可能还需要深入研究相关资料做进一步定制化调整。 #### 三、基于Windows UI Automation技术模拟真实交互行为 除了以上两种较为常见的途径之外还有一种思路就是模仿人类正常操作过程直接控制本地客户端界面元素从而达到目的。这种方法虽然绕过了网络协议层面但仍需谨慎行事以防违反条款被永久禁用账户权限[^3]。 项目地址:<https://github.com/yinkaisheng/Python-UIAutomation-for-Windows> 示例脚本展示了打开会话窗口输入文字后点击发送按钮的过程: ```python from uiautomation import WindowControl, ListControl, EditControl, ButtonControl wx_window = WindowControl(searchDepth=1, Name="微信") # 定位主面板对象实例 contact_list = wx_window.ListControl(Name="会话") # 找到左侧边栏容器组件 target_contact = contact_list.TextControl(Name="文件传输助手") # 锁定接收方节点位置 target_contact.Click() # 单击选中该项触发事件切换当前视图焦点过去 msg_input_area = wx_window.EditControl() # 寻找编辑框控件准备录入待传递的内容字符串 msg_input_area.SendKeys("hello world!") # 输入要发送的文字 send_btn = wx_window.ButtonControl(Name="发送(S)") # 最终定位提交按键执行动作完成整个流程闭环 send_btn.Click() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值