我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送、回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流。企业号具有关注安全、消息无限制等特点,很适合企业内部的环境。本文主要介绍如何利用企业号实现文本、图片、文件、语音、视频、图文消息等消息的发送操作。

1、企业号特点

对于企业号,有以下一些特点:

1)关注更安全

–只有企业通讯录的成员才能关注企业号,分级管理员、保密消息等各种特性确保企业内部信息的安全。

企业可以设置自行验证关注者身份,进行二次安全验证,保证企业信息使用和传递安全。

若员工离职,企业管理员可在通讯录中删除该成员,该成员即自动取消关注企业号,同时微信中的企业号历史记录也会被清除。

2)应用可配置

–企业可自行在企业号中可配置多个服务号,可以连接不同的企业应用系统,只有授权的企业成员才能使用相应的服务号。

3)消息无限制

–发送消息无限制,并提供完善的的管理接口及微信原生能力,以适应企业复杂、个性化的应用场景。

企业可以主动发消息给员工,消息量不受限制。

4)使用更便捷

–企业号在微信中有统一的消息入口,用户可以更方便地管理企业号消息。微信通讯录也可以直接访问企业号中的应用。

2、企业号的管理接口内容

目前企业号的内容可以用下面的分层图来展示,分别包含素材管理、被动响应消息、通讯录管理、自定义菜单等内容,详细可以看下面图示。

3、企业号消息和事件的处理

企业号和公众号一样,可以分为消息处理和事件处理,下面是他们两种类型的处理操作,也就发送的消息有文本消息、图片消息、文件消息、视频消息、语音消息、地理文字消息、图文和多媒体消息等。

事件处理主要就是关注、取消关注事件,以及菜单click类型和view类型两种操作,还有就是地理位置上报事件等。

两种类型的处理图如下所示。

4、企业号消息管理

在企业的管理后台,和公众号一样,可以看到对应信息交流记录,包括文字、图片、地理位置等等,如下所示。

由于消息分为几种类型,包括文本(Text)、图片(Image)、文件(File)、语音(Voice)、视频(Video)、图文消息等(News)、MpNews等。

因此我们需要分别对它们进行一定的定义和封装处理,如下是它们的信息对象设计图。

企业号发送消息的官方定义如下:

企业可以主动发消息给员工,消息量不受限制。

调用接口时,使用Https协议、JSON数据包格式,数据包不需做加密处理。

目前支持文本、图片、语音、视频、文件、图文等消息类型。除了news类型,其它类型的消息可在发送时加上保密选项,保密消息会被打上水印,并且只有接收者才能阅读。

我们以发送的文本消息为例进行说明,它的定义如下所示。text消息{

"touser": "UserID1|UserID2|UserID3",

"toparty": " PartyID1 | PartyID2 ",

"totag": " TagID1 | TagID2 ",

"msgtype": "text",

"agentid": "1",

"text": {

"content": "Holiday Request For Pony(http://www.php.cn/)"

},

"safe":"0"

}

参数必须说明

touser否UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送

toparty否PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数

totag否TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数

msgtype是消息类型,此时固定为:text

agentid是企业应用的id,整型。可在应用的设置页面查看

content是消息内容

safe否表示是否是保密消息,0表示否,1表示是,默认0

其中每种消息都会包含以下消息所示,也就是它们共同的属性:

touser": "UserID1|UserID2|UserID3", "toparty": " PartyID1 | PartyID2 ", "totag": " TagID1 | TagID2 ", "msgtype": "text", "agentid": "1",

因此我们可以定义一个基类用来方便承载这些共同的信息。

///

/// 企业号发送消息的基础消息内容 ///

public class CorpSendBase

{

///

/// UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送 ///

public string touser { get; set; } ///

/// PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数 ///

public string toparty { get; set; } ///

/// TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数 ///

public string totag { get; set; } ///

/// 消息类型 ///

public string msgtype { get; set; } ///

/// 企业应用的id,整型。可在应用的设置页面查看 ///

public string agentid { get; set; } ///

/// 表示是否是保密消息,0表示否,1表示是,默认0 ///

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string safe { get; set; }

}

然后其他消息逐一继承这个基类即可,如下所示。

最终会构成下面这个继承关系图。

5、消息接口的定义和实现

定义好相关的发送对象后,我们就可以定义它的统一发送接口了,如下所示。

///

/// 企业号消息管理接口定义 ///

public interface ICorpMessageApi

{

///

/// 发送消息。 /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。 ///

///

///

CommonResult SendMessage(string accessToken, CorpSendBase data);

}

最终,文本等类型的消息会根据接口定义进行实现,实现代码如下所示。注意,发送过程不需要调用加密类进行加密。

///

/// 企业号消息管理实现类 ///

public class CorpMessageApi : ICorpMessageApi

{ ///

/// 发送消息。 /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。 ///

///

///

public CommonResult SendMessage(string accessToken, CorpSendBase data)

{

CommonResult result = new CommonResult(); string urlFormat = "http://www.php.cn/{0}"; var url = string.Format(urlFormat, accessToken); var postData = data.ToJson(); //数据不用加密发送

CorpSendResult sendResult = CorpJsonHelper.ConvertJson(url, postData); if (sendResult != null)

{

result.Success = (sendResult.errcode == CorpReturnCode.请求成功);

result.ErrorMessage = string.Format("invaliduser:{0},invalidparty:{1},invalidtag:{2}",

sendResult.invaliduser, sendResult.invalidparty, sendResult.invalidtag);

} return result;

}

}

6、消息的发送操作和实际效果

定义好相应的发送对象后,我们就可以进行统一的消息发送操作,包括文本、图片、文件、语音等等类型的消息,注意有些消息是需要上传到服务器上,然后在根据mediaId进行发送出去的。

发送文本和图片的操作代码如下所示。

private void btnSendText_Click(object sender, EventArgs e)

{ //发送文本内容

ICorpMessageApi bll = new CorpMessageApi();

CorpSendText text = new CorpSendText("API 中文测试(http://www.php.cn/)");

text.touser = "wuhuacong";

text.toparty = "4";//部门ID

text.totag = "0";

text.safe = "0";

text.agentid = "0";

CommonResult result = bll.SendMessage(token, text); if (result != null)

{

Console.WriteLine("发送消息:{0} {1} {2}", text.text.content, (result.Success ? "成功" : "失败"), result.ErrorMessage);

}

} private void btnSendImage_Click(object sender, EventArgs e)

{

btnUpload_Click(sender, e); if (!string.IsNullOrEmpty(image_mediaId))

{ //发送图片内容

ICorpMessageApi bll = new CorpMessageApi();

CorpSendImage image = new CorpSendImage(image_mediaId);

CommonResult result = bll.SendMessage(token, image); if (result != null)

{

Console.WriteLine("发送图片消息:{0} {1} {2}", image_mediaId, (result.Success ? "成功" : "失败"), result.ErrorMessage);

}

}

}

最后在微信企业号上截图效果如下所示,包括了文本测试、文件测试、图文测试、语音测试均正常。

更多C#开发微信门户及应用微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

微信企业号上传图片 php,C#开发微信门户及应用微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)...相关推荐

  1. Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

    通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈.在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例.但由于 ...

  2. 微信公众号订阅号开发的学习(二):获取用户发送的消息、简单的自动回复、自定义菜单

    获取用户发送的消息 基础 微信服务器会发送两种类型的消息给开发者服务器. get请求 验证服务器的有效性 post请求 微信服务器会将用户发送的数据转发到开发者服务器上 实现 基于微信公众号订阅号开发 ...

  3. 微信小程序全栈开发实践 第三章 微信小程序开发常用的API介绍及使用 -- 3.7 网络接口简介(七)学习EventChannel对象

    零.回顾 在之前我们自定义实现picker-view组件的时候, 曾经使用过一个pop-up的自定义组件, 这个组件可以在底部滑入一个面板, 现在我们把登录按钮放在底部滑入的面板之上, 然后在完成登录 ...

  4. 【微信小程序】uniapp开发小程序如何使用微信云托管或云函数进行云开发

    一. 申请微信云托管 这个不用说吧必须的,官方地址在这.直接进去申请就行. 但是前提是你得会创建docker file,学习掌握一些基本的docker知识,会让你创建环境变得简单一点.环境创建完成之后 ...

  5. 微信小程序全栈开发实践 第三章 微信小程序开发常用的API介绍及使用 -- 3.6 网络接口简介(六)关于Page页面隐藏代码执行及Promise对象catch处理的补充

    零.回顾 在上节课我们主要是基于 Promise 加 await.async关键字改写了登录模块代码, 但是我们在自动登录这一块的代码仍然有问题,这节课我们看一下, 如何在接口调用中实现微信用户的自动 ...

  6. 微信公众平台-第三方平台开发(二)接入微信平台服务器

    验证票据 验证票据(component_verify_ticket),在第三方平台创建审核通过后,微信服务器会向其 "授权事件接收URL" 每隔 10 分钟以 POST 的方式推送 ...

  7. 微信小程序全栈开发实践 第三章 微信小程序开发常用的API介绍及使用 -- 3.9 网络接口简介(九)扩展wxp模块的request3方法,实现用户登录的自动融合

    零.回顾 在上节课我们主要介绍了观察者模式, 并据此模式实现了一个event模块, 这节课我们基础用户登录的自动整合, 尝试在wxp模块当中扩展出一个request3这样的一个接口. 一.在wxp组件 ...

  8. 微信小程序全栈开发实践 第三章 微信小程序开发常用的API介绍及使用 -- 3.5 网络接口简介(五)基于Promise+await、async关键字改写登录模块

    零.回顾 在上节课我们主要实践练习了Promise的三个方法,包括any.all.race. 现在我们对Promise变成已经有了一个大致的了解. 这节课我们尝试将登录模块使用Promise编程方式进 ...

  9. 微信企业号开发之图文消息

    new消息发送格式 <xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName&g ...

  10. 微信企业号客服功能开发PHP

    微信企业号客服功能开发PHP 思路 回调模式 开启回调 菜单 在线客服 客服用户对话连接 接收文本信息 发送文本信息 多客服 思路 1.点击应用的菜单-在线客服-触发事件 $result1 = $th ...

最新文章

  1. SQLServer2000 数据库恢复模型详解
  2. linq学习笔记(2):DataContext
  3. datepicker 颜色 android,Android修改DatePicker字體顏色及分割線顏色
  4. UbuntuServer16.04LTS中安装Mysql并配置远程访问
  5. else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else
  6. Linux 命令之 deluser -- 删除用户
  7. Web前端笔记-element ui中table中某列添加a便签进行跳转
  8. 打码(C语言)常见粗心小错误 (前方高能,一定要点)
  9. MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...
  10. 如何站在双11的肩膀上 详解阿里云企业级互联网架构
  11. python 谷歌翻译
  12. 常用邮箱的服务器(SMTP/POP3)地址和端口整理
  13. 拥有一本CISP证书,我的工资会翻倍吗?
  14. 学习笔记——LED跑马灯
  15. mp4视频损坏无法播放如何修复?
  16. 背包问题不同要求下的初始化
  17. 代号Pie!Android 9.0那些开发者必须知道的事
  18. 新飞重整花落谁家? 多个“接盘侠”浮出水面
  19. 面试记录留给自己做纪念
  20. 计算机比较好的985 211大学,985院校和211院校名单

热门文章

  1. android js 双指事件,移动端touch事件--点击、双指与拖拽
  2. 混频器/变频器的原理及分类
  3. BFM-总线功能模型
  4. 爬取小说【含完整代码】
  5. MySQL(二) DDL、DML、DQL、DTL概述
  6. 表格中的斜线怎么弄?WPS最全技巧分享
  7. 微信小程序tab页面切换
  8. 蔡康永--说话之道(一)
  9. UI设计师福利之手把手打造SVG动画应用的微场景
  10. 联发科Helio X35细节曝光:采用10nm工艺