湖北网站建设平台,响应式网站开发工具,企信网官网查询入口,律师行业协会网站建设前言这几天忙活着别的东西#xff0c;耽误了很长时间#xff0c;从文件操作完了之后就在考虑着下一步鼓捣点儿啥#xff0c;因为最开始的业务开发就是企业微信相关的#xff0c;这刚好来做个内部应用的小例子玩玩。企业微信前身是企业号#xff0c;当时微信主推的还是公众… 前言这几天忙活着别的东西耽误了很长时间从文件操作完了之后就在考虑着下一步鼓捣点儿啥因为最开始的业务开发就是企业微信相关的这刚好来做个内部应用的小例子玩玩。企业微信前身是企业号当时微信主推的还是公众号与服务号后续战略考虑到企业的OA了当然还是跟某个抢市场企业号应该是在16年还是具体啥时候出的刚出的时候也是问题不断一直在修复更新最近这两年基本上没咋关注企业微信了也都是偶尔上去看看有没有新东西啊什么的不过不得不说在这几年的成长中已经修复逐渐成为一个不错的产品了大厂的效率还是有的相对于公众号的开发为什么我选这个作为例子呢因为企业微信我可以通过个人来使用注册的早现在不清楚注册流程主要看是否需要企业认证个人开发者在不论啥时候啥平台都或多或少有些不友好当然认证了说明你是个好人为了信息安全都懂。开始注册企业微信的流程我就不多说了直接说注册完成之后我们来看下这个界面标注的就是我们需要的关键参数。记好这个东西之后我们转到应用管理。这个创建就是你添张图片打个名字而已不多说创建完成之后我们来看下图的标记。记好这两个参数OK下来我们就来看API吧这里我只是介绍下消息推送。注册账号这不废话么账号认证为了权限当然企业微信内部应用不需要服务域名确定好AppID、Secret等等的配置为了accesstoken几乎所有的接口都是先获取accesstoken相当于你在微信的登录根据接口文档来传参啊获取回调啊获取事件等等根据返回值来看看错误信息我这里不做服务端只是写个示例需要服务端什么的开发之类的可以给我联系互相学习。首先在我们的Util新建一个类QyThirdUtil名字感觉起的好没水平玩游戏止于起名字别人都10级了我还在想名字先把我们需要的配置信息搞了。 private static string _CorpID string.Empty;private static string _Secret string.Empty;private static string _AgentID string.Empty;public static string CorpID{get{if (string.IsNullOrEmpty(_CorpID)){_CorpID AprilConfig.Configuration[QyThird:CorpID];}return _CorpID;}}public static string Secret{get{if (string.IsNullOrEmpty(_Secret)){_Secret AprilConfig.Configuration[QyThird:Secret];}return _Secret;}}public static string AgentID{get{if (string.IsNullOrEmpty(_Secret)){_AgentID AprilConfig.Configuration[QyThird:AgentID];}return _AgentID;}}然后我们来划分下方法我们需要获取accesstoken需要执行发送消息的方法。 public static string GetAccessToken(){QyAccessToken accessToken null;bool isGet false;if (CacheUtil.Exists(QyAccessToken)){accessToken CacheUtil.Getlt;QyAccessTokengt;(QyAccessToken);if (accessToken.Expire_Time gt; DateTime.Now.AddMinutes(1)){isGet true;}}if (!isGet){string url $https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{CorpID}amp;corpsecret{Secret};string res RequestUtil.HttpGet(url);accessToken JsonConvert.DeserializeObjectlt;QyAccessTokengt;(res);if (accessToken ! null amp;amp; accessToken.ErrCode 0){accessToken.Expire_Time DateTime.Now.AddSeconds(accessToken.Expires_In);CacheUtil.Set(QyAccessToken, accessToken, new TimeSpan(2, 0, 0));}else{LogUtil.Error($获取accesstoken失败——{accessToken.ErrCode},{accessToken.ErrMsg});}}return accessToken.Access_Token;}这里用到了两个地方一个是微信端回调的对象实例QyAccessToken需要的朋友可以在源码里cv我这里就不贴出来了。另一个是HttpClient的简单封装请求方法RequestUtil看了有些博客说HttpClient的生命周期之类的有推荐直接实例化一个私有静态的也有做工厂模式创建的没细究这块儿要多注意下。 public class RequestUtil{public static string HttpPost(string url, string postData null, string contentType null, int timeOut 30){if (string.IsNullOrEmpty(postData)){postData ;}using (HttpClient client new HttpClient()){client.Timeout new TimeSpan(0, 0, timeOut);using (HttpContent httpContent new StringContent(postData, Encoding.UTF8)){if (contentType ! null)httpContent.Headers.ContentType new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);HttpResponseMessage response client.PostAsync(url, httpContent).Result;return response.Content.ReadAsStringAsync().Result;}}}public static async Tasklt;stringgt; HttpPostAsync(string url, string postData null, string contentType null, int timeOut 30){if (string.IsNullOrEmpty(postData)){postData ;}using (HttpClient client new HttpClient()){client.Timeout new TimeSpan(0, 0, timeOut);using (HttpContent httpContent new StringContent(postData, Encoding.UTF8)){if (contentType ! null)httpContent.Headers.ContentType new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);HttpResponseMessage response await client.PostAsync(url, httpContent);return await response.Content.ReadAsStringAsync();}}}public static string HttpGet(string url){using (HttpClient client new HttpClient()){return client.GetStringAsync(url).Result;}}public static async Tasklt;stringgt; HttpGetAsync(string url){using (HttpClient client new HttpClient()){HttpResponseMessage response await client.GetAsync(url);return await response.Content.ReadAsStringAsync();}}}然后我们来写个发送消息的方法SendMessage这里我只写了下普通文本推送。 public static bool SendMessage(string content, MessageRange range, AprilEnums.MessageType messageType){bool isSend false;if (string.IsNullOrEmpty(content) || content.Length gt; 2048 || rangenull){return false;}string accessToken GetAccessToken();if (string.IsNullOrEmpty(accessToken)){return false;}string url $https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token{accessToken};StringBuilder data new StringBuilder();bool isVaildRange false;if (range.IsAll){data.Append($\touser\:\all\);isVaildRange true;}else{if (range.Users ! null amp;amp; range.Users.Count gt; 0){data.AppendFormat(\touser\ : {0}, GetRangeValue(range.Users));isVaildRange true;}if (range.Tags ! null amp;amp; range.Tags.Count gt; 0){if (data.Length gt; 0){data.Append(,);}data.AppendFormat(\totag\ : {0}, GetRangeValue(range.Tags));isVaildRange true;}if (range.Departments ! null amp;amp; range.Departments.Count gt; 0){if (data.Length gt; 0){data.Append(,);}data.AppendFormat(\totag\ : {0}, GetRangeValue(range.Departments));isVaildRange true;}}if (!isVaildRange){return false;}data.AppendFormat(,\msgtype\:\{0}\, GetMessageType(messageType));data.AppendFormat(,\agentid\:\{0}\, AgentID);data.Append(,\text\: {);data.AppendFormat(\content\:\{0}\, content);data.Insert(0, {);data.Append(}});LogUtil.Debug($获取到发送消息请求{data.ToString()});string res RequestUtil.HttpPost(url, data.ToString(), application/json);LogUtil.Debug($获取到发送消息回调{res});return false;}简单说下消息推送第一个就是你的推送类型是普通文本还是啥文档都有我这净扯淡然后就是你的范围再然后就是你的推送内容了当然根据不同的推送类型你的内容参数也不同需要进一步封装的朋友可以去看下API。测试我们在控制器中不再说Values了加上消息推送的测试这里的范围可以在你自己的通讯录中查看。小结写到这里基本上都结束了为什么我特意拿出来企业微信的内部应用来写这篇呢其实是做下这个消息推送以后的自己的工程就可以写个这个然后做异常警告之类的东西这样想想这篇就不是废话了编程的奇淫技巧咳咳乐趣乐趣就在于此代码自己敲东西自己组全在于你自己怎么玩了。