曾静的技术博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

微信企业号开发之消息发送

和服务号不同的是企业号中放开了发送消息的限制,将企业内部的业务需要和微信的消息体系结合起来可以带来更多的便利。在前面也介绍到了在响应用户的请求的时候如果无法及时回应可以直接返回空的消息体,然后调用主动发送消息的接口进行消息的发送来解决这个问题。

###发送消息的类型及数据格式

1、text消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": "PartyID1|PartyID2 ",
   "totag": "TagID1|TagID2",
   "msgtype": "text",
   "agentid": "1",
   "text": {
       "content": "消息内容"
   },
   "safe":"0"
}

参数说明:

wechat_msg_send_text.png

2、image消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "msgtype": "image",
   "agentid": "1",
   "image": {
       "media_id": "MEDIA_ID"
   },
   "safe":"0"
}

参数说明:

wechat_msg_send_image.png

3、voice消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "voice",
   "agentid": "1",
   "voice": {
       "media_id": "MEDIA_ID"
   },
   "safe":"0"
}

参数说明:

wechat_msg_send_voice.png

4、video消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "video",
   "agentid": "1",
   "video": {
       "media_id": "MEDIA_ID",
       "title": "Title",
       "description": "Description"
   },
   "safe":"0"
}

参数说明:

wechat_msg_send_video.png

5、file消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "file",
   "agentid": "1",
   "file": {
       "media_id": "MEDIA_ID"
   },
   "safe":"0"
}

参数说明:

wechat_msg_send_file.png

6、news消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "news",
   "agentid": "1",
   "news": {
       "articles":[
           {
               "title": "Title",
               "description": "Description",
               "url": "URL",
               "picurl": "PIC_URL"
           },
           {
               "title": "Title",
               "description": "Description",
               "url": "URL",
               "picurl": "PIC_URL"
           }    
       ]
   }
}

参数说明:

wechat_msg_send_news.png

7、mpnews消息

消息数据格式:

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": "PartyID1|PartyID2",
   "totag": "TagID1|TagID2",
   "msgtype": "mpnews",
   "agentid": "1",
   "mpnews": {
       "articles":[
           {
               "title": "Title",
               "thumb_media_id": "id",
               "author": "Author",
               "content_source_url": "URL",
               "content": "Content",
               "digest": "Digest description",
               "show_cover_pic": "0"
           },
           {
               "title": "Title",
               "thumb_media_id": "id",
               "author": "Author",
               "content_source_url": "URL",
               "content": "Content",
               "digest": "Digest description",
               "show_cover_pic": "0"
           }
       ]
   }
   "safe":"0"
}

参数说明:

wechat_msg_send_mpnews.png

###发送消息处理示例

1、获取AccessToken

AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。AccessToken需要用CorpID和Secret来换取,不同的Secret会返回不同的AccessToken。正常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果,并自动续期。

(1)获取CorpID和Secret

CorpID是企业号的标识,每个企业号拥有一个唯一的CorpID,Secret是管理组凭证密钥,可以在设置权限管理中获取如下图所示:

corpid_secrect.jpg

申请的超级管理员账号不能获取到Secret,必须指定成员作为管理员进行开发,然后配置相应的权限即可。

(2)向微信请求生成AccessToken

String corpid = "CorpID";
String secret = "Secret";
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + secret;
String jsonStr = WeChatHTTPClient.get(url);//发起HTTP请求,获取返回的JSON字符串
Map<String, Object> map = JSONObject.parseObject(jsonStr);//解析JSON字符串
String accessToken = map.get("access_token").toString();//获取access_token

2、发送消息

(1)消息发送的接口说明

发送消息前需要向https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN(ACCESS_TOKEN指的是前面获取到的AccessToken)这个URL发送HTTPS,POST请求的消息体是前面介绍的不同的JSON格式的数据。

请求的

(2)封装消息发送的接口

public static boolean sendMessage(String token, String json) {
	try {
		String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token;
		String jsonStr = WeChatHTTPClient.post(url, json, true);//向接口发起POST请求
		Map<String, Object> map = JSONObject.parseObject(jsonStr);//解析JSON数据
		if(Integer.parseInt(map.get("errcode").toString()) == 0) {
			return true;
		} else {
			return false;
		}
	} catch (Exception e) {
		e.printStackTrace();
		return false;
	}
}

(3)示例

String token = "通过前面的方式获取到的Token";
String json = "{\"touser\":\"@all\",\"msgtype\":\"text\",\"agentid\":\"1\",\"text\":{\"content\":\"消息内容\"},\"safe\":\"0\"}";
sendMessage(token, json);

###参考资料

1、《发送接口说明》

2、《消息类型及数据格式》

3、《C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)》

最近的文章

iOS8中使用TouchID校验用户身份

在iOS8中,开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证部分。相当一部分的APP(如印象笔记、新版QQ)以及在升级后采用了Touch ID来验证用户身份,用以替代过去使用一般密码或者PIN码,如下图所示:(1)新版QQ:(2)印象笔记高级版本:本文主要介绍如何在应用中集成Touch ID来校验用户的身份。###集成步骤1、环境要求(1)开发环境:Xcode 6(iOS8 SDK)(2)设备要求:iPhone 5s、iPhone ...…

iOS继续阅读
更早的文章

微信企业号开发之消息与事件的被动响应

企业号是微信为企业客户提供的移动应用入口。它帮助企业建立员工、上下游供应链与企业IT系统间的连接。利用企业号,企业或第三方合作伙伴可以帮助企业快速、低成本的实现高质量的移动轻应用,实现生产、管理、协作、运营的移动化。本文重点介绍接收到用户的消息请求后如何给用户响应消息。###消息与事件的类型1、text消息消息的明文XML结构:<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <...…

WeChat继续阅读