[升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)
? ?升级内容:添加根据标签群发接口,重构原根据分组群发接口 ? ?参考微信文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1481187827_i0l21 ? ?说明: ? ? 之前 SDK 只提供了根据用户组群发的方法: 1 GroupMessageApi.SendGroupMessageByGroupId();
? ? 由于根据分组和标签群发两种情况,逻辑基本一致,只有一个filter参数不同,因此我们创建了?BaseGroupMessageDataByFilter 基类,用于支持?GroupMessageByGroupId 和?GroupMessageByTagId。 ? ? BaseGroupMessageByFilter 代码如下: 1 using System; 2 System.Collections.Generic; 3 System.Linq; 4 System.Text; 5 System.Threading.Tasks; 6 7 namespace Senparc.Weixin.MP.AdvancedAPIs.GroupMessage 8 { 9 /// <summary> 10 /// 根据筛选条件(GroupId、TagId)群发消息数据的基类 11 </summary> 12 public abstract class BaseGroupMessageByFilter 13 { 14 bool is_to_all { get; set; } 15 } 16 17 18 BaseGroupMessageDataByFilter 19 20 public BaseGroupMessageByFilter filter { 21 22 string msgtype { 23 24 25 群发接口新增 send_ignore_reprint 参数,开发者可以对群发接口的 send_ignore_reprint 参数进行设置,指定待群发的文章被判定为转载时,是否继续群发。 26 当 send_ignore_reprint 参数设置为1时,文章被判定为转载时,且原创文允许转载时,将继续进行群发操作。 27 当 send_ignore_reprint 参数设置为0时,文章被判定为转载时,将停止群发操作。 28 send_ignore_reprint 默认为0。 29 30 int send_ignore_reprint { 31 32 33 34 GroupMessageByFilter_MediaId 35 36 string media_id { 37 38 39 GroupMessageByFilter_Content 40 41 string content { 42 43 44 GroupMessageByFilter_WxCard 45 46 string card_id { 47 48 49 GroupMessageByFilter_VoiceData : BaseGroupMessageDataByFilter 50 51 public GroupMessageByGroupId_MediaId voice { 52 53 54 GroupMessageByFilter_ImageData : BaseGroupMessageDataByFilter 55 56 public GroupMessageByGroupId_MediaId image { 57 58 59 GroupMessageByFilter_TextData : BaseGroupMessageDataByFilter 60 61 public GroupMessageByGroupId_Content text { 62 63 64 GroupMessageByFilter_MpNewsData : BaseGroupMessageDataByFilter 65 66 public GroupMessageByGroupId_MediaId mpnews { 67 68 69 GroupMessageByFilter_MpVideoData : BaseGroupMessageDataByFilter 70 71 public GroupMessageByGroupId_MediaId mpvideo { 72 73 74 GroupMessageByFilter_WxCardData : BaseGroupMessageDataByFilter 75 76 public GroupMessageByGroupId_WxCard wxcard { 77 78 } ? ? ? GroupMessageByTagId 代码如下: Senparc.Weixin.MP.AdvancedAPIs.GroupMessage { <summary> 根据 TagId 群发筛选 </summary> GroupMessageByTagId : BaseGroupMessageByFilter { string tag_id { ; } } } ? ? ??GroupMessageByGroupId 代码如下(包含已经弃用的代码),为了保障向下兼容性,标记了[Obsolete]特性: 3 4 根据GroupId群发筛选 5 6 GroupMessageByGroupId : BaseGroupMessageByFilter 8 string group_id { 9 10 11 #region 已废弃 12 13 [Obsolete("请使用GroupMessageByGroupId")] 14 GroupMessageByGroupId_GroupId : BaseGroupMessageByFilter 16 17 18 19 20 根据GroupId群发消息筛选 21 22 [Obsolete(请使用BaseGroupMessageDataByFilter23 BaseGroupMessageDataByGroupId : BaseGroupMessageDataByFilter 24 25 26 27 28 [Obsolete(请使用GroupMessageByFilter_MediaId29 GroupMessageByGroupId_MediaId 30 31 32 34 [Obsolete(35 GroupMessageByGroupId_Content 36 37 38 39 40 [Obsolete(41 GroupMessageByGroupId_WxCard 43 44 45 46 [Obsolete(47 GroupMessageByGroupId_VoiceData : BaseGroupMessageDataByGroupId 48 49 51 52 [Obsolete(53 GroupMessageByGroupId_ImageData : BaseGroupMessageDataByGroupId 54 55 56 57 58 [Obsolete( GroupMessageByGroupId_TextData : BaseGroupMessageDataByGroupId 64 [Obsolete(65 GroupMessageByGroupId_MpNewsData : BaseGroupMessageDataByGroupId 66 67 68 69 70 [Obsolete(71 GroupMessageByGroupId_MpVideoData : BaseGroupMessageDataByGroupId 73 74 75 76 [Obsolete(77 GroupMessageByGroupId_WxCardData : BaseGroupMessageDataByGroupId 78 79 80 81 82 #endregion 83 84 } ? ? ? 在?GroupMessageApi 中的使用上同样保持了向下兼容,根据 GroupId 和 TagId 群发的接口分别为?SendGroupMessageByGroupId() 以及?SendGroupMessageByTagId(),底层共同调用同一个私有方法?SendGroupMessageByFilter() : 1 2 根据分组或标签进行群发【订阅号与服务号认证后均可用】 3 /// 4 请注意: 5 1、该接口暂时仅提供给已微信认证的服务号 6 2、虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,请小心测试 7 3、无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败。 8 4、群发视频时需要先调用GetVideoMediaIdResult接口获取专用的MediaId然后进行群发 9 10 11 <param name="accessTokenOrAppId">AccessToken或AppId(推荐使用AppId,需要先注册)</param> 12 <param name="groupId">群发到的分组的group_id,参见用户管理中用户分组接口,若is_to_all值为true,可不填写group_id;如果groupId和tagId同时填写,优先使用groupId;groupId和tagId最多只能使用一个 13 <param name="tagId">群发到的标签的tag_id,若is_to_all值为true,可不填写tag_id;如果groupId和tagId同时填写,优先使用groupId;groupId和tagId最多只能使用一个 14 <param name="value">群发媒体文件时传入mediaId,群发文本消息时传入content,群发卡券时传入cardId 15 <param name="type"></param> 16 <param name="isToAll">用于设定是否向全部用户发送,值为true或false,选择true该消息群发给所有用户,选择false可根据group_id发送给指定群组的用户 17 <param name="sendIgnoreReprint">待群发的文章被判定为转载时,是否继续群发 18 <param name="timeOut">代理请求超时时间(毫秒) 19 <returns></returns> 20 private static SendResult SendGroupMessageByFilter(string accessTokenOrAppId,string groupId,1)">string tagId,1)">string value,GroupMessageType type,1)">bool isToAll = false,1)">bool sendIgnoreReprint = int timeOut = Config.TIME_OUT) 21 { 22 return ApiHandlerWapper.TryCommonApi(accessToken => 23 { 24 string urlFormat = Config.ApiMpHost + /cgi-bin/message/mass/sendall?access_token={0}; 25 26 BaseGroupMessageDataByFilter baseData = null 27 BaseGroupMessageByFilter filter = 28 if (groupId.IsNullOrEmpty()) 29 { 30 filter = new GroupMessageByGroupId() 31 { 32 group_id = groupId, 33 is_to_all = isToAll,1)"> 34 }; 35 } 36 else 37 38 filter = GroupMessageByTagId() 39 40 tag_id = tagId,1)"> 41 is_to_all = 42 43 44 45 switch (type) 46 47 case GroupMessageType.image: 48 baseData = GroupMessageByFilter_ImageData() 49 { 50 filter = filter,1)"> 51 image = GroupMessageByGroupId_MediaId() 52 { 53 media_id = value 54 },1)"> 55 msgtype = image" 56 }; 57 break 58 GroupMessageType.voice: 59 baseData = GroupMessageByFilter_VoiceData() 60 61 filter = 62 voice = 63 64 media_id = 65 66 msgtype = voice 67 68 69 GroupMessageType.mpnews: 70 baseData = GroupMessageByFilter_MpNewsData() 71 72 filter = 73 mpnews = 74 75 media_id = 76 77 msgtype = mpnews 78 79 80 GroupMessageType.video: 81 baseData = GroupMessageByFilter_MpVideoData() 82 83 filter = 84 mpvideo = 85 86 media_id = 87 88 msgtype = mpvideo 89 90 91 GroupMessageType.wxcard: 92 baseData = GroupMessageByFilter_WxCardData() 93 94 filter = 95 wxcard = GroupMessageByGroupId_WxCard() 96 97 card_id = 98 99 msgtype = wxcard100 101 102 GroupMessageType.text: 103 baseData = GroupMessageByFilter_TextData() 104 105 filter =106 text = GroupMessageByGroupId_Content() 107 108 content =109 110 msgtype = text111 112 113 default: 114 throw new Exception(参数错误。); 115 //break; 116 117 118 baseData.send_ignore_reprint = sendIgnoreReprint ? 0 : 1;待群发的文章被判定为转载时,是否继续群发 119 120 return CommonJsonSend.Send<SendResult>(accessToken,urlFormat,baseData,timeOut: timeOut); 121 122 },accessTokenOrAppId); 123 } ? ? ? 本次更新同时更新了对应的异步方法。 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |