1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        .NET Core 企業(yè)微信消息推送

        共 16543字,需瀏覽 34分鐘

         ·

        2022-06-24 14:43



        接口定義

        應用支持推送文本、圖片、視頻、文件、圖文等類型。

        請求方式:POST(HTTPS

        請求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

        參數說明:ACCESS_TOKEN 必填

        - 各個消息類型的具體POST格式請閱后續(xù)“消息類型”部分。- 如果有在管理端對應用設置“在微工作臺中始終進入主頁”,應用在微信端只能接收到文本消息,并且文本消息的長度限制為20字節(jié),超過20字節(jié)會被截斷。同時其他消息類型也會轉換為文本消息,提示用戶到企業(yè)微信查看。- 支持id轉譯,將userid/部門id轉成對應的用戶名/部門名,目前僅文本/文本卡片/圖文/圖文(mpnews)/任務卡片/小程序通知/模版消息/模板卡片消息這八種消息類型的部分字段支持。僅第三方應用需要用到,企業(yè)自建應用可以忽略。。- 支持重復消息檢查,當指定 "enable_duplicate_check": 1開啟: 表示在一定時間間隔內,同樣內容(請求json)的消息,不會重復收到;時間間隔可通過duplicate_check_interval指定,默認1800秒。- 從2021年2月4日開始,企業(yè)關聯(lián)添加的「小程序」應用,也可以發(fā)送文本、圖片、視頻、文件、圖文等各種類型的消息了。調用建議:大部分企業(yè)應用在每小時的0分或30分觸發(fā)推送消息,容易造成資源擠占,從而投遞不夠及時,建議盡量避開這兩個時間點進行調用。

        返回示例:

        {
          "errcode" : 0,
          "errmsg" : "ok",
          "invaliduser" : "userid1|userid2",
          "invalidparty" : "partyid1|partyid2",
          "invalidtag""tagid1|tagid2",
          "msgid""xxxx",
          "response_code""xyzxyz"
        }

        如果部分接收人無權限或不存在,發(fā)送仍然執(zhí)行,但會返回無效的部分(即invaliduser或invalidparty或invalidtag),常見的原因是接收人不在應用的可見范圍內。 

        如果全部接收人無權限或不存在,則本次調用返回失敗,errcode為81013。返回包中的userid,不區(qū)分大小寫,統(tǒng)一轉為小寫

        參數說明:


        消息類型


        文本消息


        請求示例:

        {
           "touser" : "UserID1|UserID2|UserID3",
           "toparty" : "PartyID1|PartyID2",
           "totag" : "TagID1 | TagID2",
           "msgtype" : "text",
           "agentid" : 1,
           "text" : {
               "content" : "你的快遞已到,請攜帶工卡前往郵件中心領取。\n出發(fā)前可查看<a href=\"http://work.weixin.qq.com\">郵件中心視頻實況</a>,聰明避開排隊。"
           },
           "safe":0,
           "enable_id_trans"0,
           "enable_duplicate_check"0,
           "duplicate_check_interval"1800
        }

        參數說明:

        碼示例

        配置Settings

        其中corpid為企業(yè)id corpsecret為應用的憑證密鑰

         "Wx": {
            "Baseurl""https://qyapi.weixin.qq.com/cgi-bin/",
            "TokenUrl""gettoken?corpid=xx&corpsecret=xx",
            "PushUrl""message/send?access_token={0}"
          },

        Startup設置

        public void ConfigureServices(IServiceCollection services)
        {
           services.AddHttpClient("WxClient", config =>
             {
                config.BaseAddress = new Uri(Configuration["Wx:baseurl"]);
                config.DefaultRequestHeaders.Add("Accept""application/json");
             });

           GlobalContext.Configuration = Configuration;
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
             GlobalContext.HttpClientFactory = app.ApplicationServices.GetService<IHttpClientFactory>();
        }

        Token返回實體

        public class GetTokenResult
        {

            /// <summary>
            /// 錯誤編號
            /// </summary>
            public int errcode { getset; }

            /// <summary>
            /// 錯誤信息
            /// </summary>
            public string errmsg { getset; }

            /// <summary>
            /// Token
            /// </summary>
            public string access_token { getset; }

            /// <summary>
            /// 過期時間
            /// </summary>
            public int expires_in { getset; }
        }

        推送方法

        GlobalContext提供了獲取Token方法,微信推送方法,獲取內容序列號字符串方法。GetContent中agentid 為應用id 按實際情況調整。

        using Microsoft.Extensions.Configuration;
        using Newtonsoft.Json;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Net.Http;
        using System.Text;
        using System.Threading.Tasks;

        namespace TaskScheduling.Wx
        {
            public class GlobalContext
            {
                public static IConfiguration Configuration { getset; }

                public static IHttpClientFactory HttpClientFactory { getset; }


                /// <summary>
                /// 過期時間
                /// </summary>
                public static DateTime TimeOutDate { getset; }

                /// <summary>
                /// Token
                /// </summary>
                public static string Token { getset; }


                /// <summary>
                /// 獲取Token
                /// </summary>
                /// <returns>Item1 Token;Item2 是否成功</returns>
                public static Tuple<stringboolGetToken()
                {
                    //判斷Token是否存在 以及Token是否在有效期內
                    if (string.IsNullOrEmpty(Token) || TimeOutDate > DateTime.Now)
                    {
                        //構造請求鏈接
                        var requestBuild = Configuration["Wx:TokenUrl"];
                        using (var wxClient = HttpClientFactory.CreateClient("WxClient"))
                        {
                            var httpResponse = wxClient.GetAsync(requestBuild).Result;
                            var dynamic = JsonConvert.DeserializeObject<GetTokenResult>(
                                                  httpResponse.Content.ReadAsStringAsync().Result
                                                  );
                            if (dynamic.errcode == 0)
                            {
                                Token = dynamic.access_token;
                                //過期5分鐘前刷新Token
                                var expires_in = Convert.ToDouble(dynamic.expires_in - 5 * 60);
                                TimeOutDate = DateTime.Now.AddSeconds(expires_in);
                                return Tuple.Create(Token, true);
                            }
                            else
                            {
                                return Tuple.Create($"獲取Token失敗,錯誤:dynamic.errmsg}"false);
                            }
                        }
                    }
                    else
                    {
                        return Tuple.Create(Token, true);
                    }
                }

                /// <summary>
                /// 推送MES
                /// </summary>
                /// <returns>Item1 Token;Item2 是否成功</returns>
                public static string WxPush(string content)
                {
                    //構造請求鏈接
                    var requestBuild = Configuration["Wx:PushUrl"];
                    var (token, issuccess) = GetToken();
                    if (!issuccess)
                        throw new Exception(token);
                    requestBuild = string.Format(requestBuild, token);
                    //建立HttpClient
                    using (var wxClient = HttpClientFactory.CreateClient("WxClient"))
                    {
                        byte[] data = Encoding.UTF8.GetBytes(content);
                        var bytearray = new ByteArrayContent(data);
                        var httpResponse = wxClient.PostAsync(requestBuild, bytearray).Result;
                        var dynamic = JsonConvert.DeserializeObject<dynamic>(
                                             httpResponse.Content.ReadAsStringAsync().Result
                                             );
                        if (dynamic.errcode == 0)
                            return "推送成功!";
                        else
                            throw new Exception($"推送失敗,原因:{JsonConvert.SerializeObject(dynamic) }");
                    }
                }

                /// <summary>
                /// 獲取發(fā)送內容
                /// </summary>
                /// <param name="userId"></param>
                /// <param name="Msg"></param>
                /// <returns></returns>
                public static string GetContent(string userId, string msg)
                {
                    var objText = new { content = msg };
                    string text = JsonConvert.SerializeObject(objText);
                    var obj = new
                    {
                        touser = userId,
                        toparty = "",
                        totag = "",
                        msgtype = "text",
                        agentid = 1000051,//應用id
                        text = objText,
                        safe = 0,
                        enable_id_trans = 0,
                        enable_duplicate_check = 0,
                        duplicate_check_interval = 1800
                    };
                    string strJson = JsonConvert.SerializeObject(obj);
                    return strJson;
                }
            }
        }

        調用

        string userid = "userid";
        var content1 = GlobalContext.GetContent(userid, "推送測試");
        return GlobalContext.WxPush(content1);

        截圖

        企業(yè)微信文檔鏈接 https://developer.work.weixin.qq.com/document/path/90236

        轉自:微風吹過~ 

        鏈接:cnblogs.com/zspwf/p/16241421.html

        瀏覽 35
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            午夜av影院| 一级女性全黄久久生活片免费 | 超碰香蕉 | 香蕉大香蕉久 | 亚洲精品乱码久久久久久蜜桃欧美 | 一道本一区二区视频 | 亚洲老少妇 | 丝袜高跟国产成人精品一区 | 操妹网 | 尤物视频yw.193.c㎝ |