/// <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>()); }
/// <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); }
/// <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>()); }
/// <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); }
/// <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>()); }
/// <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>()); }
/// <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>()); }
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>()); }
/// <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>()); }
/// <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>()); }
/// <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>()); }
/// <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); }
/// <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); }
/// <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'"); } }
/// <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>()); }
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()); }
/// <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>()); }
/// <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>()); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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>()); }
/// <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>()); }
/// <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); }
/// <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); }
/// <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); }