Beispiel #1
0
 /// <summary>
 /// 根据标签 ID,更新指定的标签名称。
 /// </summary>
 /// <param name="tagId">标签的唯一 ID。</param>
 /// <param name="name">新的标签名称。</param>
 public Task <OfficialCommonResponse> UpdateAsync(long tagId, string name)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(UpdateApiUrl,
                                                                             HttpMethod.Post,
                                                                             new UpdateUserTagRequest(tagId, name)
                                                                             ));
 }
Beispiel #2
0
 /// <summary>
 /// 获取标签下粉丝列表。
 /// </summary>
 /// <param name="tagId">标签的唯一 ID。</param>
 /// <param name="firstOpenId">起始粉丝的 OPENID,将会从指定的 OPENID 往后拉取粉丝数据。</param>
 public Task <GetUsersByTagResponse> GetUsersByTagAsync(long tagId, string firstOpenId = null)
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetUsersByTagResponse>(GetUsersByTagApiUrl,
                                                                            HttpMethod.Post,
                                                                            new GetUsersByTagRequest(tagId, firstOpenId)
                                                                            ));
 }
Beispiel #3
0
 /// <summary>
 /// 创建新的用户标签。
 /// </summary>
 /// <param name="name">标签名称。</param>
 public Task <CreateUserTagResponse> CreateAsync(string name)
 {
     return(WeChatOfficialApiRequester.RequestAsync <CreateUserTagResponse>(CreateApiUrl,
                                                                            HttpMethod.Post,
                                                                            new CreateUserTagRequest(name)
                                                                            ));
 }
Beispiel #4
0
 /// <summary>
 /// 批量为用户取消标签。
 /// </summary>
 /// <param name="tagId">需要取消的标签 ID。</param>
 /// <param name="openIds">需要取消标签的用户 OPEN ID 集合。</param>
 public Task <OfficialCommonResponse> BatchUnTaggingAsync(long tagId, List <string> openIds)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(BatchUnTaggingApiUrl,
                                                                             HttpMethod.Post,
                                                                             new BatchTagOperationRequest(tagId, openIds)
                                                                             ));
 }
Beispiel #5
0
 /// <summary>
 /// 获取用户身上的标签列表。
 /// </summary>
 /// <param name="openId">需要查询用户的 OPENID。</param>
 public Task <GetTagsByUserResponse> GetTagsByUserAsync(string openId)
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetTagsByUserResponse>(GetTagsByUserApiUrl,
                                                                            HttpMethod.Post,
                                                                            new GetTagsByUserRequest(openId)
                                                                            ));
 }
Beispiel #6
0
 /// <summary>
 /// 根据标签 ID,删除指定的标签。
 /// </summary>
 /// <param name="tagId">标签的唯一 ID。</param>
 public Task <OfficialCommonResponse> DeleteAsync(long tagId)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(DeleteApiUrl,
                                                                             HttpMethod.Post,
                                                                             new DeleteUserTagRequest(tagId)
                                                                             ));
 }
 /// <summary>
 /// 根据指定的参数创建自定义菜单,本方法相当于全量覆盖,执行之后微信公众号的原有菜单信息将会被覆盖。
 /// </summary>
 /// <param name="customButtons">最新的自定义菜单集合。</param>
 public Task <OfficialCommonResponse> CreateCustomMenuAsync(List <CustomButton> customButtons)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(CreateApiUrl, HttpMethod.Post,
                                                                             new CreateCustomMenuRequest
     {
         Buttons = customButtons
     }));
 }
Beispiel #8
0
        /// <summary>
        /// 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。
        /// </summary>
        /// <param name="appId">公众号 appId</param>
        /// <param name="appSecret">公众号 appSecret</param>
        /// <param name="code">登录时获取的 code</param>
        /// <param name="grantType">授权类型,此处只需填写 authorization_code</param>
        public Task <Code2AccessTokenResponse> Code2SessionAsync(string appId, string appSecret, string code, string grantType = "authorization_code")
        {
            const string targetUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?";

            var request = new Code2AccessTokenRequest(appId, appSecret, code, grantType);

            return(WeChatOfficialApiRequester.RequestAsync <Code2AccessTokenResponse>(targetUrl, HttpMethod.Get, request, false));
        }
Beispiel #9
0
 /// <summary>
 /// 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)。
 /// </summary>
 /// <param name="mediaId"></param>
 /// <returns></returns>
 public Task <GetMediaResponse> GetMedia(string mediaId)
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetMediaResponse>(UploadMediaUrl,
                                                                       HttpMethod.Get,
                                                                       new GetMediaRequest()
     {
         MediaId = mediaId
     }));
 }
Beispiel #10
0
        /// <summary>
        /// 上传图文消息内的图片获取URL
        /// </summary>
        /// <param name="bytes"></param>
        /// <param name="contentName"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>

        public Task <UploadImageResponse> UploadImageAsync(byte[] bytes, string contentName, string fileName)
        {
            var content = new MultipartFormDataContent();

            content.Add(new ByteArrayContent(bytes), contentName, fileName);

            return(WeChatOfficialApiRequester.RequestAsync <UploadImageResponse>(UploadImgUrl,
                                                                                 HttpMethod.Post,
                                                                                 null, true, content));
        }
        /// <summary>
        /// 上传并新增临时素材。<br/>
        /// 注意:<br/>
        /// 1. 临时素材 media_id 是可复用的。<br/>
        /// 2. 媒体文件在微信后台保存时间为 3 天,即 3 天后 media_id 失效。<br/>
        /// 3. 上传临时素材的格式、大小限制与公众平台官网一致。
        /// </summary>
        /// <param name="fileData">需要上传的素材数据。</param>
        /// <param name="type">素材的类型,参考 <see cref="MediaType"/> 的定义。</param>
        /// <param name="fileName">素材的文件名。</param>
        public Task <UploadedTempMediaResponse> UploadTempMediaAsync(Stream fileData, string type, string fileName)
        {
            var postContent = new MultipartFormDataContent();

            postContent.AddV2(new StreamContent(fileData), fileName, fileName);

            return(WeChatOfficialApiRequester.RequestFromDataAsync <UploadedTempMediaResponse>(UploadTempMediaUrl,
                                                                                               postContent,
                                                                                               new UploadTempMediaRequest(type)));
        }
        /// <summary>
        /// 请求微信公众号的 API 发送指定的模板消息。
        /// </summary>
        /// <param name="openId">目标微信用户的 OpenId。</param>
        /// <param name="templateId">需要发送的模板消息 Id。</param>
        /// <param name="targetUrl">微信用户收到模板消息时,点击之后需要跳转的 Url。</param>
        /// <param name="templateMessage">需要发送的模板消息内容。</param>
        /// <param name="miniProgramRequest">模板关联的小程序参数,如果没有的话可以不用传递。</param>
        public Task <SendMessageResponse> SendMessageAsync(string openId, string templateId, string targetUrl, TemplateMessage templateMessage, MiniProgramRequest miniProgramRequest = null)
        {
            var request = new SendMessageRequest(openId,
                                                 templateId,
                                                 targetUrl,
                                                 templateMessage,
                                                 miniProgramRequest);

            return(WeChatOfficialApiRequester.RequestAsync <SendMessageResponse>(TargetUrl, HttpMethod.Post, request));
        }
 /// <summary>
 /// 设置指定用户的备注名,本接口仅开放给微信认证的服务号。
 /// </summary>
 /// <param name="openId">微信公众号的用户唯一标识。</param>
 /// <param name="remark">新的备注名,长度必须小于 30 字符。</param>
 public Task <OfficialCommonResponse> UpdateUserRemarkAsync(string openId, string remark)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(UpdateUserRemarkUrl,
                                                                             HttpMethod.Post,
                                                                             new UpdateUserRemarkRequest(openId, remark)));
 }
 /// <summary>
 /// 获取用户列表,公众号可通过本接口来获取帐号的关注者列表。<br/>
 /// 一次拉取调用最多拉取 10000 个关注者的 OpenID,可以通过多次拉取的方式来满足需求。
 /// </summary>
 /// <param name="firstOpenId">第一个拉取的OPENID,不填默认从头开始拉取。</param>
 public Task <OfficialUserListResponse> GetOfficialUserListAsync(string firstOpenId = null)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialUserListResponse>(GetOfficialUserListUrl,
                                                                               HttpMethod.Get,
                                                                               new GetOfficialUserListRequest(firstOpenId)));
 }
 /// <summary>
 /// 删除当前公众号所有自定义菜单。另请注意,在个性化菜单时,调用此接口会删除默认菜单及全部个性化菜单。
 /// </summary>
 /// <returns></returns>
 public Task <OfficialCommonResponse> DeleteCustomMenuAsync()
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(DeleteApiUrl, HttpMethod.Get));
 }
Beispiel #16
0
 public Task <BatchGetMaterialResponse> BatchGetMaterialAsync(BatchgetMaterialRequest request)
 {
     return(WeChatOfficialApiRequester.RequestAsync <BatchGetMaterialResponse>(BatchGetMaterialUrl,
                                                                               HttpMethod.Post,
                                                                               request));
 }
Beispiel #17
0
 /// <summary>
 /// 根据短模版 Id 创建模版。
 /// </summary>
 /// <param name="templateShortId">模板库中模板的编号,有 "TM**" 和 "OPENTMTM**" 等形式。</param>
 public Task <CreateTemplateResponse> CreateTemplateAsync(string templateShortId)
 {
     return(WeChatOfficialApiRequester.RequestAsync <CreateTemplateResponse>(GetTemplateIdUrl,
                                                                             HttpMethod.Post,
                                                                             new CreateTemplateRequest(templateShortId)));
 }
Beispiel #18
0
 /// <summary>
 /// 获取设置的模版消息行业信息。
 /// </summary>
 /// <remarks>
 /// 获取帐号设置的行业信息。可登录微信公众平台,在公众号后台中查看行业信息。
 /// </remarks>
 public Task <GetIndustryResponse> GetIndustryAsync()
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetIndustryResponse>(GetIndustryUrl,
                                                                          HttpMethod.Get));
 }
Beispiel #19
0
 /// <summary>
 /// 设置模版消息的所属行业。<br/>
 /// 具体的行业代码可以参考 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#0。
 /// </summary>
 /// <remarks>
 /// 设置行业可在微信公众平台后台完成,每月可修改行业 1 次。<br/>
 /// 帐号仅可使用所属行业中相关的模板。
 /// </remarks>
 /// <param name="primaryIndustry">公众号模板消息所属行业编号。</param>
 /// <param name="secondaryIndustry">公众号模板消息所属行业编号。</param>
 public Task <OfficialCommonResponse> SetIndustryAsync(string primaryIndustry, string secondaryIndustry)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(SetIndustryUrl,
                                                                             HttpMethod.Post,
                                                                             new SetIndustryRequest(primaryIndustry, secondaryIndustry)));
 }
Beispiel #20
0
 /// <summary>
 /// 根据模版 Id 删除指定的模版。
 /// </summary>
 /// <param name="templateId">公众帐号下模板消息 ID。</param>
 public Task <OfficialCommonResponse> DeleteTemplateAsync(string templateId)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(DeletePrivateTemplateUrl,
                                                                             HttpMethod.Post,
                                                                             new DeleteTemplateRequest(templateId)));
 }
Beispiel #21
0
 /// <summary>
 /// 获取已添加至账号下所有模版列表。
 /// </summary>
 public Task <GetAllPrivateTemplateResponse> GetAllPrivateTemplateAsync()
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetAllPrivateTemplateResponse>(GetAllPrivateTemplateUrl,
                                                                                    HttpMethod.Get));
 }
Beispiel #22
0
 public Task <GetAllCustomMenuResponse> GetAllCustomMenuAsync()
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetAllCustomMenuResponse>(GetDetailApiUrl, HttpMethod.Get));
 }
Beispiel #23
0
 public Task <GetMaterialCountResponse> GetMaterialCountAsync()
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetMaterialCountResponse>(GetMaterialCountUrl,
                                                                               HttpMethod.Post
                                                                               ));
 }
 /// <summary>
 /// 获取用户基本信息,公众号可通过本接口来获取帐号的关注者基本信息。
 /// </summary>
 /// <param name="openId">普通用户的标识,对当前公众号唯一。</param>
 /// <param name="language">返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语。</param>
 public Task <UnionUserInfoResponse> GetUserUnionInfoAsync(string openId, string language = null)
 {
     return(WeChatOfficialApiRequester.RequestAsync <UnionUserInfoResponse>(GetUserUnionInfoUrl,
                                                                            HttpMethod.Get,
                                                                            new GetUserUnionInfoRequest(openId, language)));
 }
Beispiel #25
0
 /// <summary>
 /// 新增永久图文素材
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public Task <AddNewsResponse> AddNews(AddNewsRequest request)
 {
     return(WeChatOfficialApiRequester.RequestAsync <AddNewsResponse>(UploadMediaUrl,
                                                                      HttpMethod.Post,
                                                                      request));
 }
Beispiel #26
0
 /// <summary>
 /// 获取当前公众号的所有用户标签列表。
 /// </summary>
 public Task <GetAllUserTagListResponse> GetCreatedTagsAsync()
 {
     return(WeChatOfficialApiRequester.RequestAsync <GetAllUserTagListResponse>(GetCreatedTagsApiUrl,
                                                                                HttpMethod.Get
                                                                                ));
 }
 /// <summary>
 /// 批量获取用户基本信息,公众号可通过本接口来批量获取用户基本信息。
 /// </summary>
 /// <param name="userIds">需要查询的用户 OPENID 列表,最多支持 100 个。</param>
 public Task <BatchUnionUserInfoResponse> BatchGetUserUnionInfoAsync(List <GetUserUnionInfoRequest> userIds)
 {
     return(WeChatOfficialApiRequester.RequestAsync <BatchUnionUserInfoResponse>(BatchGetUserUnionInfoUrl,
                                                                                 HttpMethod.Post,
                                                                                 new BatchGetUserUnionInfoRequest(userIds)));
 }
Beispiel #28
0
 /// <summary>
 /// 获取公众号的黑名单列表,接口每次最多拉取 10000 个黑名单用户。<br/>
 /// 当列表数量较多的时候,可以采用分批拉取的方式。
 /// </summary>
 /// <param name="beginOpenId">起始 OPENID,如果传递则从该 OPENID 往后拉取。默认则从头开始拉取。</param>
 public Task <OfficialUserListResponse> GetBlackListAsync(string beginOpenId = null)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialUserListResponse>(GetBlackListUrl,
                                                                               HttpMethod.Post,
                                                                               new GetBlackListRequest(beginOpenId)));
 }
Beispiel #29
0
 /// <summary>
 /// 取消拉黑指定用户,每次最多取消拉黑 20 个用户。
 /// </summary>
 /// <param name="openIds">需要取消拉黑的用户 OPENID。</param>
 public Task <OfficialCommonResponse> BatchUnBlackListAsync(List <string> openIds)
 {
     return(WeChatOfficialApiRequester.RequestAsync <OfficialCommonResponse>(BatchUnBlackListUrl,
                                                                             HttpMethod.Post,
                                                                             new BatchUnBlackListRequest(openIds)));
 }
Beispiel #30
0
 public Task <DelMediaResponse> UpdateNewsAsync(UpdateNewsRequest request)
 {
     return(WeChatOfficialApiRequester.RequestAsync <DelMediaResponse>(UpdateNewsUrl,
                                                                       HttpMethod.Post,
                                                                       request));
 }