金蝶推送消息到企业微信原创
金蝶云社区-云社区用户E11u1291
云社区用户E11u1291
6人赞赏了该文章 1,214次浏览 未经作者许可,禁止转载编辑于2022年07月19日 10:11:23

前提,企业有自己的企业微信



using System;

using System.Text;

using Kingdee.BOS.Core.Bill.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Core.SqlBuilder;

using Kingdee.BOS.Core.Metadata;

using System.ComponentModel;

using System.Net;

using System.IO;

using Newtonsoft.Json.Linq;

using Newtonsoft.Json;

using Kingdee.BOS.App.Data;



   

 [Kingdee.BOS.Util.HotUpdate]

    [Description("企业微信群发表单插件")]

    public class QYWXQFEdit : AbstractBillPlugIn

    {

        string access_token = "";

        public string ERPmsecret = "这里要填自己家企业微信的自建应用的secret";

       

        public string secret = "";

        public string h = "";

        int errnum = 0;

        /// <summary>

        /// 初始化,对其他界面传来的参数进行处理,对控件某些属性进行处理

        /// 这里不宜对数据DataModel进行处理

        /// </summary>

        /// <param name="e"></param>

        /// 


        public override void AfterBarItemClick(AfterBarItemClickEventArgs e)

        {

            base.AfterBarItemClick(e);

            switch (e.BarItemKey.ToUpper())

            {//我是做了个按钮,点击按钮,列表里有工号GH、内容NR,循环取,循环执行QunFa()一般400人十几秒发送完成,这里是为了给每个人推送内容不同,实际上直接看QunFa()和如何获取accesstoken;

                case "S":

                    getAccessToken();

                    int n=this.View.Model.GetEntryRowCount("F_PJQF_WXQFMX");

                    for (int i = 0; i < n; i++)

                    {

                        string gh = this.View.Model.GetValue("F_PJQF_GH", i).ToString();

                        string nr = this.View.Model.GetValue("F_PJQF_NR", i).ToString();

                        QunFa(gh, nr);

                    }

                    this.View.ShowMessage("发送" + n.ToString() + "条," + "失败" + errnum.ToString() + "条.");

                    break;


            }

       

        }

        public void QunFa(string gh,string nr)

        {

            //-------------------发送消息到企业微信begin


            string touser = gh;//群发消息必须使用企业微信的工号--企业微信的唯一值

            string toparty = "";

            string totag = "";

            string msgtype = "text";//发送文本样式的消息,具体参考企业微信api帮助;

            string agentid = "1000113";//自建应用id

            string text = "大家好!为了更好地保护地球,爱护环境,大家在去年7月份根据SDGs写下了自己的行动目标:\n----您的行动目标:-----\n" +

               nr+

                "\n----------------\n迄今已过去一年,现收集个人目标的达成,请根据这一年的实绩认真如实地填写下面地目标达成。" 

                + "\n<a href=\\\"doc.weixin.qq.com/forms/AEwAvQcqAAgAH4AKAatAKwVbHjQpU8S2f\\\">请点击链接填写:S D Gs个人行动目标达成</a>"

                +"\n已经填写的请忽略";

            string safe = "";

            string enable_id_trans = "";

            string enable_duplicate_check = "";

            string duplicate_check_interval = "";


            string jsonInfo = "{\"touser\" : \"" + touser + "\"," +

                                    "\"toparty\" : \"" + toparty + "\"," +

                                    "\"totag\" : \"" + totag + "\"," +

                                    "\"msgtype\" : \"" + msgtype + "\"," +

                                    "\"agentid\" : " + agentid + "," +

                                    "\"text\" : {" +

                                    "\"content\" : \"" + text + "\"" +

                                        "}," +

                                    " \"safe\":" + safe + "," +

                                    "\"enable_id_trans\": " + enable_id_trans + "," +

                                    " \"enable_duplicate_check\": " + enable_duplicate_check + "," +

                                    "\"duplicate_check_interval\": " + duplicate_check_interval + "}";//post请求参数。JSON格式,,其中的变量自己定义值

 //var access_token = CacheHelper.GetObject<string>("access_token");//拿到缓存中的token

//这个if是缓存中的token时效过了之后需要重新获取的方法

 //if (string.IsNullOrEmpty(access_token))

 //{

 //    bookBorrowBusiness.GetTokenByEnterpriseWechat();

 //    access_token = CacheHelper.GetObject<string>("access_token");

 //}

            var url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + access_token;

            UTF8Encoding encoding = new UTF8Encoding();//编码模式,防止中文乱码

            byte[] data = encoding.GetBytes(jsonInfo);

            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);


            myRequest.Method = "POST";

            myRequest.ContentType = "application/json;charset=utf-8";

            myRequest.ContentLength = data.Length;

            Stream newStream = myRequest.GetRequestStream();

            newStream.Write(data, 0, data.Length);

            newStream.Close();

            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);

            string content = reader.ReadToEnd();

            reader.Close();

            JObject jo = (JObject)JsonConvert.DeserializeObject(content);

            int errcode = Convert.ToInt32(jo["errcode"].ToString());//如果发送成功,errcode返回0

            errnum = errnum + errcode;


            //--------------------发送消息到企业微信end

        }

        public void getAccessToken()

        {

            DateTime a = DateTime.Now.AddHours(-2);

            string sql = string.Format(@"select f_pjqf_token1,f_pjqf_token11 from PJQF_T_WXtoken where f_pjqf_id=1 and f_pjqf_dt>'{0}' and F_PJQF_secret='{1}'", a, secret);

            DynamicObjectCollection dt = DBUtils.ExecuteDynamicObject(this.Context, sql);

            if (dt.Count > 0)

            {

                access_token = dt[0]["F_PJQF_token1"].ToString() + dt[0]["F_PJQF_token11"].ToString();

                //   this.View.ShowMessage("sqlget:     " + access_token);

            }

            else

            {

                GetToken();

//这里之前不知道如何扩大字段数,所以用两个字段拼接的access token,这里肯定不能直接拿来用,下面的从数据库存取accestoken,企业微信是2小时失效,所以需要定期取

                string t1 = access_token.Substring(0, access_token.Length / 2);

                string t2 = access_token.Substring(access_token.Length / 2, access_token.Length / 2);

                string sqlupdate = string.Format(@"update PJQF_T_WXtoken set f_pjqf_dt='{0}',f_pjqf_token1='{1}',f_pjqf_token11='{2}' where F_PJQF_secret='{3}' ", DateTime.Now.ToString(), t1, t2, secret);

                DBUtils.Execute(this.Context, sqlupdate);

                // this.View.Model.SetValue("F_t1", access_token);

            }


        }

        public void GetToken()

        {

            //获取access_token 开始


            string corpid = "ww23aae6ad045a60be";

            string corpsecret = "";

            corpsecret = ERPmsecret;

          

            string urla = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;

            HttpWebRequest myRequesta = (HttpWebRequest)WebRequest.Create(urla);

            myRequesta.Method = "GET";

            HttpWebResponse myResponsea = (HttpWebResponse)myRequesta.GetResponse();

            StreamReader readera = new StreamReader(myResponsea.GetResponseStream(), Encoding.UTF8);

            string access_token_info = readera.ReadToEnd();//这里拿到我们get请求返回的参数,我们需要拿到token

            JObject joa = (JObject)JsonConvert.DeserializeObject(access_token_info);

            access_token = joa["access_token"].ToString();//这里把拿到的字符串消息转成JSON并且拿到其中的access_token

            readera.Close();

            //获取access_token 结束

        }

运行效果:

企业微信截图_16581329662811.png


赞 6