zoukankan      html  css  js  c++  java
  • 微信--企业会话--示例

    这里不做讲解,只是记录下自己做过的一个功能案例:如何在.net后台中创建企业会话并发送消息?

       #region 微信
    
            //微信企业Id
            private static string Corpid = "微信企业号ID";
            //微信管理组的凭证密钥
            private static string Corpsecret = "微信企业号密匙";
            /// <summary>
            /// 获取token--微信
            /// </summary>
            /// <returns></returns>
            private static string GetAccessTokenForWeiXin()
            {
                string getUrl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", Corpid, Corpsecret);
                string result = HttpGet(getUrl);
                dynamic data = JsonConvert.DeserializeObject<dynamic>(result);
                return data.access_token;
            }
    
            /// <summary>
            /// 创建企业会话--微信
            /// </summary>
            /// <param name="chatid">会话id。字符串类型,最长32个字符。</param>
            /// <param name="name">会话标题</param>
            /// <param name="owner">管理员userid,必须是该会话userlist的成员之一</param>
            /// <param name="userlist">["zhangsan","lisi","wangwu"]会话成员列表,成员用userid来标识。会话成员必须在3人或以上,2000人以下</param>
            /// <returns></returns>
            public static bool CreateCompanyDialogForWeiXin(string chatid, string name, string owner, string[] userlist)
            {
                if (userlist.Length < 3)
                {
                    throw new Exception("会话成员必须在3人或以上");
                }
                string token = GetAccessTokenForWeiXin();
                if (token.IsEmptyOrNull())
                {
                    throw new Exception("无法获取微信token");
                }
                string postUrl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/chat/create?access_token={0}", token);
                dynamic postData = new
                {
                    chatid = chatid,
                    name = name,
                    owner = owner,
                    userlist = userlist
                };
                string result = HttpPost(postUrl, postData);
                dynamic data = JsonConvert.DeserializeObject<dynamic>(result);
                if (data.errmsg == "ok")
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 修改企业会话--微信
            /// </summary>
            /// <param name="chatid">会话id。字符串类型,最长32个字符。</param>
            /// <param name="op_user">操作人userid</param>
            /// <param name="name">会话标题</param>
            /// <param name="owner">管理员userid,必须是该会话userlist的成员之一</param>
            /// <param name="add_user_list">["zhaoli"]会话新增成员列表,成员用userid来标识</param>
            /// <param name="del_user_list">["zhangsan"]会话退出成员列表,成员用userid来标识</param>
            /// <returns></returns>
            public static bool UpdateCompanyDialogForWeiXin(string chatid, string op_user, string name = "", string owner = "", string[] add_user_list = null, string[] del_user_list = null)
            {
                string token = GetAccessTokenForWeiXin();
                if (token.IsEmptyOrNull())
                {
                    throw new Exception("无法获取微信token");
                }
                string postUrl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/chat/update?access_token={0}", token);
                dynamic postData = new
                {
                    chatid = chatid,
                    op_user = op_user,
                    add_user_list = add_user_list == null ? new string[] { } : add_user_list,
                    del_user_list = del_user_list == null ? new string[] { } : del_user_list,
                };
    
                string result = HttpPost(postUrl, postData);
                dynamic data = JsonConvert.DeserializeObject<dynamic>(result);
                if (data.errmsg == "ok")
                {
                    return true;
                }
                return false;
            }
    
            /// <summary>
            /// 群组发消息--微信
            /// </summary>
            /// <param name="type">接收人类型:single|group,分别表示:群聊|单聊</param>
            /// <param name="id">接收人的值,为userid|chatid,分别表示:成员id|会话id</param>
            /// <param name="sender">发送人</param>
            /// <param name="msgtype">消息类型,此时固定为:text</param>
            /// <param name="content">消息内容</param>
            /// <returns></returns>
            public static bool SendMessageDialogForWeiXin(string type, string id, string sender, string msgtype, string content)
            {
                string token = GetAccessTokenForWeiXin();
                if (token.IsEmptyOrNull())
                {
                    throw new Exception("无法获取微信token");
                }
                string postUrl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/chat/send?access_token={0}", token);
                dynamic postData = new
                {
                    receiver = new { type = type, id = id },
                    sender = sender,
                    msgtype = msgtype,
                    text = new { content = content }
                };
                string result = HttpPost(postUrl, postData);
                dynamic data = JsonConvert.DeserializeObject<dynamic>(result);
                if (data.errmsg == "ok")
                {
                    return true;
                }
                else
                {
                    Log.WriteLog("发送企业会话消息error:" + JsonConvert.SerializeObject(data));
                    throw new Exception("发送企业会话消息error:" + JsonConvert.SerializeObject(data));
                }
                //return false;
            }
            #endregion
    微信相关方法
    #region 辅助方法
            public static string HttpGet(string url)
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
    
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                return responseString;
            }
            /// <summary>
            /// httpPost请求--参数为object
            /// </summary>
            /// <param name="url">地址</param>
            /// <param name="postObject">Post参数传输为对象</param>
            /// <returns></returns>
            public static string HttpPost(string url, object postObject)
            {
                string result = string.Empty;
    
                try
                {
                    var request = (HttpWebRequest)WebRequest.Create(url);
                    var postData = JsonConvert.SerializeObject(postObject);
    
                    var data = Encoding.UTF8.GetBytes(postData);  //uft-8支持中文
                    request.Method = "POST";
                    //request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentType = "application/json;charset=UTF-8";
                    request.ContentLength = data.Length;
    
                    using (var stream = request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
    
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                    result = new StreamReader(response.GetResponseStream()).ReadToEnd();
                }
                catch (Exception ex)
                {
                    result = ex.Message;
                }
                Log.WriteLog("发送消息结果:" + result);
                return result;
            }
            /// <summary>
            /// httpPost请求--参数为string
            /// </summary>
            /// <param name="url">地址</param>
            /// <param name="postString">post参数参数为字符串</param>
            /// <returns></returns>
            public static string HttpPost(string url, string postString)
            {
                string result = string.Empty;
    
                try
                {
                    var request = (HttpWebRequest)WebRequest.Create(url);
    
                    var data = Encoding.UTF8.GetBytes(postString);  //uft-8支持中文
                    request.Method = "POST";
                    //request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentType = "application/json;charset=UTF-8";
                    request.ContentLength = data.Length;
    
                    using (var stream = request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
    
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                    result = new StreamReader(response.GetResponseStream()).ReadToEnd();
                }
                catch (Exception ex)
                {
                    result = ex.Message;
                    Log.WriteLog("同步签到大屏发送消息error:" + result);
                }
    
                return result;
            }
            #endregion
    Http请求封装
     /// <summary>
            /// 创建会议企业会话
            /// </summary>
            /// <param name="conferenceID">会议编码</param>
            public static void CreateConferenceDialog(string conferenceID, string conferenceName)
            {
                //创建会话数据
    
                //会话类型集合
                DialogTypeCollection dtColl = DialogTypeAdapter.Instance.GetTColl();
                //会话内容类型集合
                DialogContentTypeCollection dctColl = DialogContentTypeAdapter.Instance.GetTColl();
                //会议企业会话集合
                ConferenceCompanyDialogCollection ccdColl = new ConferenceCompanyDialogCollection();
                dtColl.ForEach(dt =>
                {
                    dctColl.ForEach(dct =>
                    {
                        string id = Guid.NewGuid().ToString("N");
                        ConferenceCompanyDialog ccd = new ConferenceCompanyDialog()
                        {
                            ID = id,
                            DialogCode = id,
                            ConferenceID = conferenceID,
                            DialogContentTypeID = dct.ID,
                            DialogTypeID = dt.ID
                        };
                        ccdColl.Add(ccd);
                    });
                });
                ccdColl.ForEach(ccd =>
                {
                    DialogContentType dctModel = dctColl.Find(dct => dct.ID == ccd.DialogContentTypeID);
                    string userlist = ConfigurationManager.AppSettings["ConferenceCompanyDialogUser"];
    
                    bool result = true;
    
                    #region 微信
                    //群组名称
                    string dialogName = conferenceName.Substring(0, conferenceName.Length > 10 ? 10 : conferenceName.Length) + "_" + dctModel.Name;
                    if (ccd.DialogTypeName == "WeiXin")
                    {
                        //添加微信企业号数据
                        result = ConferenceCompanyDialogHelp.CreateCompanyDialogForWeiXin(ccd.DialogCode, dialogName, userlist.Split(',')[0], userlist.Split(','));
                    }
                    #endregion
    
                    #region IM????
                    else if (ccd.DialogTypeName == "IM")
                    {
                        //由于IM还没有实现群组推送消息,所以,目前将IM的群组创建和推送即时消息暂推至以后处理???
    
                        #region IM创建群组临时代码
                        //string appId = ConferenceCompanyDialogHelp.GetAppID("远薪移动办公");
                        ////操作人userid(loginName)--暂取会话管理人
                        //string[] allUserLoginName = ConfigurationManager.AppSettings["ConferenceCompanyDialogUser"].Split(',');
                        //string op_user = allUserLoginName[0];
                        //AttendeeConllection attColl = AttendeeAdapter.Instance.GetAttendeeConllectionByConference(conferenceID);
                        //string opUserCode = attColl.Find(att => att.LoginName == op_user).AttendeeID;
                        //string adminIMCode = ConferenceCompanyDialogHelp.GetIMUserID(opUserCode, appId).ToString();
                        //int[] members = new int[allUserLoginName.Length];
                        //for (int i = 0; i < allUserLoginName.Length; i++)
                        //{
                        //    string userCode = attColl.Find(att => att.LoginName == allUserLoginName[i]).AttendeeID;
                        //    int userIMCode = ConferenceCompanyDialogHelp.GetIMUserID(userCode, appId);
                        //    members[i] = userIMCode;
                        //}
                        ////添加IM数据???????
                        //ConferenceCompanyDialogHelp.CreateCompanyDialogForIM(appId, adminIMCode, dialogName, members);
                        #endregion
                    }
                    #endregion
    
                    if (result)
                    {
                        //添加数据库数据
                        ConferenceCompanyDialogAdapter.Instance.Update(ccd);
                    }
                });
            }
    创建会话案例
    /// <summary>
            /// 现场服务推送消息
            /// </summary>
            /// <param name="conferenceID">会议编码</param>
            /// <param name="attendeeID">参会人编码</param>
            /// <param name="siteServiceID">会务服务编码</param>
            public static void SendMessage(string conferenceID, string attendeeID, string siteServiceID)
            {
                ConferenceCompanyDialogCollection diaColl = ConferenceCompanyDialogAdapter.Instance.LoadByConferenceID(conferenceID);
                if (diaColl.Count == 0)
                {
                    throw new Exception("该会议下没有任何企业会话");
                }
    
                SiteServiceModel siteModel = SiteServiceAdapter.Instance.LoadByID(siteServiceID);
    
                //操作人userid(loginName)--暂取会话管理人
                string op_user = ConfigurationManager.AppSettings["ConferenceCompanyDialogUser"].Split(',')[0];
                if (op_user.IsEmptyOrNull())
                {
                    throw new Exception("请先配置会话管理人员");
                }
                AttendeeModel attModel = AttendeeAdapter.Instance.LoadByID(attendeeID);
                if (attModel == null)
                {
                    throw new Exception("该会议下没有找到参会人编码为:" + attendeeID + "的参会人");
                }
    
                //张三(座位:3排5号,手机号:13652489652)申请饮用水 备注:WERThhjk
                string content = string.Format(@"{0}(座位:{1},手机号:{2})申请{3}"
                                                    , attModel.Name, attModel.SeatAddress, attModel.MobilePhone, siteModel.SiteServiceTypeName);
                content += "
    备注:" + ((siteModel.Remarks.IsEmptyOrNull() || siteModel.Remarks.Trim().ToLower() == "null") ? "" : siteModel.Remarks);   //换行符
    只能放在string里有效,且使用双引号包裹,不能使用string.Format,stringbuild等方法,它们会吧
    当初字符串处理
    
                diaColl.ForEach(dia =>
                {
                    #region 微信企业号推送消息
    
                    if (dia.DialogTypeName == "WeiXin" && dia.DialogContentTypeName == "现场服务")
                    {
                        try
                        {
                            ConferenceCompanyDialogHelp.SendMessageDialogForWeiXin("group", dia.DialogCode, op_user, "text", content);
                        }
                        catch (Exception e)
                        {
                            throw e;
                        }
    
                    }
                    #endregion
    
                    #region IM推送消息???
                    else if (dia.DialogTypeName == "IM" && dia.DialogContentTypeName == "现场服务")
                    {
    
                    }
                    #endregion
                });
            }
    发送消息案例
  • 相关阅读:
    如何解决多进程或多线程并发的问题
    PHP 获取当前类名、方法名、URL地址
    MySQL查询小数点位数
    sql语句优化总结
    redis使用及配置之缓存详解
    系统每隔一段时间自动pull代码
    php BC 高精确度函数库
    SGDMA
    Pmon (LS1B)start.s
    FPGA时序约束和timequest timing analyzer
  • 原文地址:https://www.cnblogs.com/lxhbky/p/6605267.html
Copyright © 2011-2022 走看看