Пример #1
0
        /// <summary>
        /// 通过OpenId群发文本消息
        /// </summary>
        /// <param name="content"></param>
        /// <param name="accessToken"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task <dynamic> SendTextMessageByOpenIdAsync(string content, string accessToken,
                                                                 params string[] user)
        {
            JObject root = new JObject();
            JObject text = new JObject {
                ["content"] = content
            };

            root["text"]    = text;
            root["msgtype"] = "text";
            root["touser"]  = new JArray(user);

            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/mass/send"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #2
0
        /// <summary>
        /// 发送连接消息
        /// </summary>
        /// <param name="linkUrl"></param>
        /// <param name="picUrl"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <param name="openId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task SendUrlMessageAsync(string linkUrl, string picUrl, string title, string description,
                                              string openId,
                                              string accessToken)
        {
            JObject root        = new JObject();
            JObject contentJson = new JObject();
            JObject articles    = new JObject();
            JArray  array       = new JArray {
                contentJson
            };

            articles["articles"]       = array;
            contentJson["url"]         = linkUrl;
            contentJson["pic_url"]     = picUrl;
            contentJson["title"]       = title;
            contentJson["description"] = description;
            root["touser"]             = openId;
            root["msgtype"]            = "news";
            root["news"] = articles;
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/custom/send"),
                new Dictionary <string, string>
            {
                {
                    "access_token", accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
Пример #3
0
        /// <summary>
        /// 上传永久素材视频
        /// </summary>
        /// <param name="fileType"></param>
        /// <param name="stream"></param>
        /// <param name="accessToken"></param>
        /// <param name="title"></param>
        /// <param name="desc"></param>
        /// <returns></returns>
        public async Task <dynamic> UploadPermanentFile(FileType fileType, FileStream stream, string accessToken,
                                                        string title, string desc)
        {
            var urlParam = new Dictionary <string, string>
            {
                {
                    WeChatParameterKey.Access_Token,
                    accessToken
                },
                {
                    "type",
                    fileType.ToString()
                },
                {
                    WeChatConstant.AccessToken, accessToken
                }
            };
            var bodyParam = new Dictionary <string, string>
            {
                { "title", title },
                { "introduction", desc }
            };

            var response = await _client.ExecuteUploadFileRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/material/add_material"), urlParam, bodyParam, stream);

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #4
0
        /// <summary>
        /// 发送视频
        /// </summary>
        /// <param name="videoMediaId">视频素材id</param>
        /// <param name="thumbMediaId">缩略图id</param>
        /// <param name="title">标题</param>
        /// <param name="description">描述</param>
        /// <param name="openId">接受消息的OpenId</param>
        /// <param name="accessToken">token</param>
        /// <returns></returns>
        public async Task SendVideoMessageAsync(string videoMediaId, string thumbMediaId, string title,
                                                string description, string openId, string accessToken)
        {
            JObject root        = new JObject();
            JObject contentJson = new JObject();

            contentJson["media_id"]       = videoMediaId;
            contentJson["title"]          = title;
            contentJson["thumb_media_id"] = thumbMediaId;
            contentJson["description"]    = description;
            root["touser"]  = openId;
            root["msgtype"] = "video";
            root["video"]   = contentJson;
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/custom/send"),
                new Dictionary <string, string>
            {
                {
                    "access_token", accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
Пример #5
0
        /// <summary>
        /// 获取关注和未关注的用户列表
        /// 最多拉取100条
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="openId"></param>
        /// <param name="lang"></param>
        /// <returns></returns>
        public async Task <dynamic> GetUserInfoListAsync(string accessToken, List <string> openId, string lang = "zh_CN")
        {
            var ids = new List <object>();

            foreach (var id in openId)
            {
                ids.Add(new
                {
                    openid = id,
                    lang
                });
            }
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/user/info/batchget"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                user_list = ids
            }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #6
0
        /// <summary>
        /// 通过标签群发文本消息
        /// </summary>
        /// <param name="all"></param>
        /// <param name="tagId"></param>
        /// <param name="content"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> SendTextMessageByLabelAsync(bool all, string tagId, string content,
                                                                string accessToken)
        {
            JObject root   = new JObject();
            JObject filter = new JObject();
            JObject text   = new JObject();

            filter["is_to_all"] = all;
            filter["tag_id"]    = tagId;
            text["content"]     = content;
            root["filter"]      = filter;
            root["text"]        = text;
            root["msgtype"]     = "text";

            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/mass/sendall"),
                new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #7
0
        /// <summary>
        /// 通过OpenId群发音频
        /// </summary>
        /// <param name="mediaId"></param>
        /// <param name="accessToken"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task <dynamic> SendVoiceMessageByOpenIdAsync(string mediaId, string accessToken,
                                                                  params string[] user)
        {
            JObject root   = new JObject();
            JObject filter = new JObject();
            JObject voice  = new JObject {
                ["media_id"] = mediaId
            };

            root["filter"]  = filter;
            root["voice"]   = voice;
            root["msgtype"] = "voice";
            root["touser"]  = new JArray(user);
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/mass/send"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #8
0
        public async Task <dynamic> PreviewAsync(string mediaId, string accessToken, string openId, int reprint = 0)
        {
            JObject root  = new JObject();
            JObject media = new JObject {
                ["media_id"] = mediaId
            };

            root["mpnews"]              = media;
            root["msgtype"]             = "mpnews";
            root["send_ignore_reprint"] = reprint;
            root["touser"]              = openId;
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/mass/preview"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken,
                    accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #9
0
        /// <summary>
        /// 通过标签群发文章
        /// </summary>
        /// <param name="all">是否群发</param>
        /// <param name="tagId"></param>
        /// <param name="mediaId">文档id</param>
        /// <param name="accessToken">token</param>
        /// <param name="reprint">被转载是是否继续群发</param>
        /// <returns></returns>
        public async Task <dynamic> SendArticleMessageByLabelAsync(bool all, string tagId, string mediaId,
                                                                   string accessToken,
                                                                   int reprint = 0)
        {
            JObject root   = new JObject();
            JObject filter = new JObject();
            JObject media  = new JObject();

            filter["is_to_all"]         = all;
            filter["tag_id"]            = tagId;
            media["media_id"]           = mediaId;
            root["filter"]              = filter;
            root["mpnews"]              = media;
            root["msgtype"]             = "mpnews";
            root["send_ignore_reprint"] = reprint;

            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/mass/sendall"),
                new Dictionary <string, string>
            {
                {
                    accessToken, accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #10
0
        /// <summary>
        /// 通过标签群视频
        /// </summary>
        /// <param name="all"></param>
        /// <param name="tagId"></param>
        /// <param name="mediaId"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> SendVideoMessageByLabelAsync(bool all, string tagId, string mediaId,
                                                                 string title, string description, string accessToken)
        {
            JObject root   = new JObject();
            JObject filter = new JObject();
            JObject video  = new JObject
            {
                ["media_id"]    = mediaId,
                ["title"]       = title,
                ["description"] = description
            };

            filter["is_to_all"] = all;
            filter["tag_id"]    = tagId;
            root["filter"]      = filter;
            root["mpvideo"]     = video;
            root["msgtype"]     = "mpvideo";

            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/message/mass/sendall"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #11
0
        /// <summary>
        /// 统计素材数量
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> CountFileAsync(string accessToken)
        {
            var response = await _client.ExecuteGetRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/material/get_materialcount"), new Dictionary <string, string>
            {
                { WeChatConstant.AccessToken, accessToken }
            });

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #12
0
        /// <summary>
        /// 删除菜单
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task DeleteMenuAsync(string accessToken)
        {
            var response = await _client.ExecuteGetRequest(WeChatHelper.GetWeChatApiDomain("/cgi-bin/menu/delete"),
                                                           new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            });

            JObject root = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(root);
        }
Пример #13
0
        /// <summary>
        /// 删除素材
        /// </summary>
        /// <param name="mediaId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task DeleteFileAsync(string mediaId, string accessToken)
        {
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/material/del_material"),
                new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new { media_id = mediaId }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
Пример #14
0
        /// <summary>
        /// 更新客服头像
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="account"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task UploadCustomerServiceAvatarAsync(FileStream stream, string account, string accessToken)
        {
            var response = await _client.ExecuteUploadFileRequest(
                WeChatHelper.GetWeChatApiDomain("/customservice/kfaccount/uploadheadimg"),
                new Dictionary <string, string>
            {
                { WeChatConstant.AccessToken, accessToken },
                { "kf_account", account }
            }, new Dictionary <string, string>(),
                stream);

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
        public void CheckResponseStatus()
        {
            JObject root = new JObject();

            root["errcode"] = "40012";
            root["errmsg"]  = "40012";
            try
            {
                WeChatHelper.CheckResponseStatus(root);
            }
            catch (WeChatApiException e)
            {
                Assert.True(e.Code == "40012", "e.Code == '40012' && e.Message == '40012'");
            }
        }
Пример #16
0
        /// <summary>
        /// 客服列表
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> CustomerServiceListAsync(string accessToken)
        {
            var response = await _client.ExecuteGetRequest(
                WeChatHelper.GetWeChatApiDomain("/customservice/kfaccount/getkflist"), new Dictionary <string, string>
            {
                {
                    "access_token", accessToken
                }
            });

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #17
0
        public async Task <string> GetAccessToken()
        {
            var str = await _client.ExecuteGetRequest("https://api.weixin.qq.com/cgi-bin/token",
                                                      new Dictionary <string, string>
            {
                { "appid", _appId },
                { "secret", _secret },
                { "grant_type", "client_credential" }
            });

            var root = JObject.Parse(str);

            WeChatHelper.CheckResponseStatus(root);
            return(root["access_token"].ToString());
        }
Пример #18
0
        /// <summary>
        /// 上传文章图片
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> UploadArticleImageAsync(FileStream stream, string accessToken)
        {
            var response = await _client.ExecuteUploadFileRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/media/uploadimg"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            },
                new Dictionary <string, string>(), stream);

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #19
0
        /// <summary>
        /// 创建菜单
        /// </summary>
        /// <param name="menus"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> CreateMenuAsync(List <Menu> menus, string accessToken)
        {
            var menuNode = menus.MenuBuild();
            var response = await _client.ExecutePostRequest(WeChatHelper.GetWeChatApiDomain("/cgi-bin/menu/create"),
                                                            new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, menuNode.ToString());

            JObject root = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(root);
            return(root.ToObject <dynamic>());
        }
        /// <summary>
        /// 获取模板消息列表
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> Get(string accessToken)
        {
            var response = await _client.ExecuteGetRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/template/get_all_private_template"),
                new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            });

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result["template_list"].ToObject <dynamic>());
        }
Пример #21
0
        /// <summary>
        /// 打开评论
        /// </summary>
        /// <param name="messageId"></param>
        /// <param name="accessToken"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task CommentOpenedAsync(string messageId, string accessToken, int index = 0)
        {
            var response = await _client.ExecutePostRequest(WeChatHelper.GetWeChatApiDomain("/cgi-bin/comment/open"),
                                                            new Dictionary <string, string>
            {
                {
                    "access_token", accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                msg_data_id = messageId, index
            }));

            JObject root = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(root);
        }
Пример #22
0
        /// <summary>
        /// 根据的OpenId加入黑名单
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task OpenIdByJoinBlackAsync(List <string> openId, string accessToken)
        {
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/tags/members/batchblacklist"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                openid_list = openId
            }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
        /// <summary>
        /// 删除模板消息
        /// </summary>
        /// <param name="templateId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task DeleteAsync(string templateId, string accessToken)
        {
            var root = new JObject {
                ["template_id"] = templateId
            };
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/template/del_private_template"),
                new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, root.ToString());

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
Пример #24
0
        /// <summary>
        /// 批量取消用户标签
        /// </summary>
        /// <param name="labelId"></param>
        /// <param name="accessToken"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        public async Task BatchCancelLabelForUserAsync(string labelId, string accessToken, List <string> openId)
        {
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/tags/members/batchuntagging"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                openid_list = openId,
                tagid       = labelId
            }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
Пример #25
0
        /// <summary>
        /// 更新用户备注
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="name"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task UpdateRemarkForUserAsync(string openId, string name, string accessToken)
        {
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/user/info/updateremark"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                openid = openId,
                remark = name
            }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
        }
Пример #26
0
        /// <summary>
        /// 获取关注的用户
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="nextOpenId">上次拉取用户的最后的一个openId</param>
        /// <returns></returns>
        public async Task <dynamic> GetWatchOpenIdListAsync(string accessToken, string nextOpenId = "")
        {
            var response = await _client.ExecuteGetRequest(WeChatHelper.GetWeChatApiDomain("/cgi-bin/user/get"),
                                                           new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                },
                {
                    "next_openid", nextOpenId
                }
            });

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #27
0
        /// <summary>
        /// 获取黑名单
        /// </summary>
        /// <param name="nextOpenId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> GetBlackListAsync(string accessToken, string nextOpenId = "")
        {
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/tags/members/getblacklist"), new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                begin_openid = nextOpenId
            }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result.ToObject <dynamic>());
        }
Пример #28
0
        /// <summary>
        /// 根据标签获取关注的用户
        /// </summary>
        /// <param name="labelId"></param>
        /// <param name="accessToken"></param>
        /// <param name="nextOpenId"></param>
        /// <returns></returns>
        public async Task <JObject> FindFansByLabelAsync(string labelId, string accessToken, string nextOpenId = "")
        {
            var response = await _client.ExecutePostRequest(WeChatHelper.GetWeChatApiDomain("/cgi-bin/user/tag/get"),
                                                            new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(new
            {
                tagId       = labelId,
                next_openid = nextOpenId
            }));

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result);
        }
Пример #29
0
        /// <summary>
        /// 删除个性化菜单
        /// </summary>
        /// <param name="menuId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task DeleteConditionMenuAsync(string menuId, string accessToken)
        {
            var jsonObject = new
            {
                menuid = menuId
            };
            var response = await _client.ExecutePostRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/menu/delconditional"),
                new Dictionary <string, string>
            {
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, JsonConvert.SerializeObject(jsonObject));

            JObject root = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(root);
        }
Пример #30
0
        /// <summary>
        /// 上传永久素材
        /// </summary>
        /// <param name="fileType"></param>
        /// <param name="stream"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public async Task <dynamic> UploadPermanentFile(FileType fileType, FileStream stream, string accessToken)
        {
            var response = await _client.ExecuteUploadFileRequest(
                WeChatHelper.GetWeChatApiDomain("/cgi-bin/material/add_material"), new Dictionary <string, string>
            {
                {
                    "type",
                    fileType.ToString().ToLower()
                },
                {
                    WeChatConstant.AccessToken, accessToken
                }
            }, null, stream);

            JObject result = JObject.Parse(response);

            WeChatHelper.CheckResponseStatus(result);
            return(result);
        }