zoukankan      html  css  js  c++  java
  • C#——企业微信一般操作之一

    1.获取微信访问凭证

            public static string GetAccessToken()
            {
                string _AccessToken = "";//存储微信访问凭证
                DateTime _lastGetTimeOfAccessToken;//ACCESS_TOKEN最后一次更新时间
    
                string corpId = "XXXXX";// 填入企业的corpId
                string corpsecret = "XXXX";// 填入Secret
    
                try
                {
                    string sqlstring = "SELECT count(*)  FROM [Booking].[dbo].[WX_GetAccessCredentials] "
                        + " WHERE WX_LastGetTimeOfAccessToken> GETDATE(); ";
                    DataTable dt = DBUtility.DbHelperSQL.Query(sqlstring);
    
                    if (dt.Rows[0][0].ToString() == "0") //_lastGetTimeOfAccessToken < DateTime.Now
                    {
                        string serviceAddress = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", corpId, corpsecret);
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress);
                        request.Method = "GET";
                        request.ContentType = "text/html;charset=UTF-8";
                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                        Stream myResponseStream = response.GetResponseStream();
                        StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
                        string retString = myStreamReader.ReadToEnd();
                        myStreamReader.Close();
                        myResponseStream.Close();
    
                        var rsEntity = new { access_token = "", expires_in = 0, errcode = 0, errmsg = "" };
                        dynamic en = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType<object>(retString, rsEntity); // Newtonsoft.Json提供的匿名类反序列化
                        _lastGetTimeOfAccessToken = DateTime.Now.AddSeconds((double)en.expires_in - 300);
                        _AccessToken = en.access_token;//GetAccessToken
    
                        string sqlstring1 = "insert into [Booking].[dbo].[WX_GetAccessCredentials] ([WX_LastGetTimeOfAccessToken],[WX_AccessToken],[Create_Date])"
                            + "VALUES('" + _lastGetTimeOfAccessToken + "','" + _AccessToken + "',GETDATE())";
    
                        var result = DBUtility.DbHelperSQL.ExecuteSql(sqlstring1);
                    }
    
                    string sqlstring3 = "SELECT [WX_LastGetTimeOfAccessToken],[WX_AccessToken],[Create_Date]  FROM [Booking].[dbo].[WX_GetAccessCredentials] "
                        + " WHERE WX_LastGetTimeOfAccessToken> GETDATE(); ";
                    DataTable dt3 = DBUtility.DbHelperSQL.Query(sqlstring3);
                    _AccessToken = dt3.Rows[0][1].ToString();
    
                    return _AccessToken;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    

    2.将某成员信息用GET请求方式导出,抓取avatar属性值——头像url,图片保存在项目下

                //获取图片路径
                var t1 = retString.IndexOf("http://");
                var t2 = retString.IndexOf("","status"");
                retString = retString.Substring(t1, t2 - t1);
    
                //下载图片
                string newname = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
                string datePath = System.Web.HttpContext.Current.Server.MapPath("/") + "Upload/Test/" + newname;
                using (System.Net.WebClient wc = new System.Net.WebClient())
                {
                    wc.Headers.Add("User-Agent", "Chrome");
                    wc.DownloadFile(retString, @"" + datePath + "");
                    //wc.DownloadFile(retString, @"d:mobile.gif");//保存到本地的文件名和路径,请自行更改
                }
    

    3.获取图片路径,使用WebClient类来上传文件,并读取返回值media_id

                //图片处理
                string PhotoName = "1.jpg";
                string filepath= System.Web.HttpContext.Current.Server.MapPath("/") + "Upload/Test/" + PhotoName;
                MediaType mt = MediaType.image;
                string media_id = WxUpLoad(filepath, mt);
    //下面是获取media_id的方法 /// <summary> /// topic:用WebClient类来上传文件,并读出返回值media_id /// </summary> /// <param name="filepath">文件绝对路径</param> /// <param name="mt">文件类型</param> public string WxUpLoad(string filepath, MediaType mt) { string media_id = ""; string token = GetAccessToken(); using (WebClient client = new WebClient()) { byte[] b = client.UploadFile(string.Format("https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", token, mt.ToString()), filepath);//调用接口上传文件 string retdata = Encoding.Default.GetString(b);//获取返回值 if (retdata.Contains("media_id"))//判断返回值是否包含media_id,包含则说明上传成功,然后将返回的json字符串转换成json { media_id=JsonConvert.DeserializeObject<UpLoadInfo>(retdata).media_id; return media_id; } else {return null;} } } //里面有枚举 /// <summary> /// topic:媒体文件的类型定义为枚举 /// </summary> public enum MediaType { /// <summary> /// 图片(image):2MB,支持JPG,PNG格式 /// </summary> image, /// <summary> /// 语音(voice) :2MB,播放长度不超过60s,仅支持AMR格式 /// </summary> voice, /// <summary> /// 视频(video):10MB,支持MP4格式 /// </summary> video, /// <summary> /// 普通文件(file):20MB /// </summary> file }

    4.using的三种用法:

    //1.在文件顶部引用命名空间
    //2.为命名空间或类型定义别名
    //3.使用using,定义范围,在该范围结束时回收资源
    

      

    备注:代码暂不完美,只是学习记录一下,欢迎大佬提意见,请勿喷,谢谢!

  • 相关阅读:
    C++ XML文件解析
    coco2d-x create tableView
    cocos2d-x button setTitleLabel
    cocos2d-X create std colorlayer
    Windows cmd "tree"
    C/C++ std::function && std::bind
    C/C++ “std::invoke”: 未找到匹配的重载函数
    31 迭代器 Iterator 是什么?
    30 哪些集合类是线程安全的?
    02 rpx 与 px
  • 原文地址:https://www.cnblogs.com/tinaliu/p/7697850.html
Copyright © 2011-2022 走看看