微信公众平台开发:高级接口说明
这里所说的高级接口是指面向通过认证的服务号开通的高级功能。
高级功能大致可以分类为:
用户接口
分组接口
客服接口(有别于之前介绍的多客服)
群发接口
多媒体接口
二维码接口
模板消息接口(不是所有账号都可开通)
OAuth2.0(相对比较复杂,后面会有专门介绍)
以上所有的接口都包含在Senparc.Weixin.MP.AdvancedAPIs命名空间下。
一些共同的操作
几乎所有的高级接口都需要用到AccessToken来通讯(注意,下面如果没有特殊说明的接口都需要这个AccessToken,但并非所有),因此多数会有一个AccessToken参数传入,有关AccessToken获取和操作的方式见Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明。
用户接口
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/User
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{//接口详见:http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF/// <summary>/// 用户接口/// </summary>public static class User{/// <summary>/// 获取用户信息/// </summary>/// <param name="accessToken">调用接口凭证</param>/// <param name="openId">普通用户的标识,对当前公众号唯一</param>/// <param name="lang">返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语</param>/// <returns></returns>public static UserInfoJson Info(string accessToken, string openId, Language.zh_CN){string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang={2}",accessToken, openId, lang.ToString());return HttpUtility.Get.GetJson<UserInfoJson>(url);//错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误)://{"errcode":40013,"errmsg":"invalid appid"}}/// <summary>/// 获取关注着OpenId信息/// </summary>/// <param name="accessToken"></param>/// <param name="nextOpenId"></param>/// <returns></returns>public static OpenIdResultJson Get(string accessToken, string nextOpenId){string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/get?access_token={0}",accessToken);if (!string.IsNullOrEmpty(nextOpenId)){url += "&next_openid=" + nextOpenId;}return HttpUtility.Get.GetJson<OpenIdResultJson>(url);}}}分组接口
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/Groups
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{/// <summary>/// 用户组接口/// </summary>public static class Groups{/// <summary>/// 创建分组/// </summary>/// <returns></returns>public static CreateGroupResult Create(string accessToken, string name){var urlFormat = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token={0}";var data = new{group = new{name = name}};return CommonJsonSend.Send<CreateGroupResult>(accessToken, urlFormat, data);}/// <summary>/// 发送文本信息/// </summary>/// <param name="accessToken"></param>/// <returns></returns>public static GroupsJson Get(string accessToken){var urlFormat = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token={0}";var url = string.Format(urlFormat, accessToken);return HttpUtility.Get.GetJson<GroupsJson>(url);}/// <summary>/// 获取用户分组/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <returns></returns>public static GetGroupIdResult GetId(string accessToken, string openId){var urlFormat = "https://api.weixin.qq.com/cgi-bin/groups/getid?access_token={0}";var data = new { openid = openId };return CommonJsonSend.Send<GetGroupIdResult>(accessToken, urlFormat, data);}/// <summary>/// 创建分组/// </summary>/// <param name="accessToken"></param>/// <param name="id"></param>/// <param name="name">分组名字(30个字符以内)</param>/// <returns></returns>public static WxJsonResult Update(string accessToken, int id, string name){var urlFormat = "https://api.weixin.qq.com/cgi-bin/groups/update?access_token={0}";var data = new{group = new{id = id,name = name}};return CommonJsonSend.Send(accessToken, urlFormat, data);}/// <summary>/// 移动用户分组/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="toGroupId"></param>/// <returns></returns>public static WxJsonResult MemberUpdate(string accessToken, string openId, int toGroupId){var urlFormat = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token={0}";var data = new{openid = openId,to_groupid = toGroupId};return CommonJsonSend.Send(accessToken, urlFormat, data);}}}客服接口
说明一下,这里的客服接口和之前的“多客服”是有差别的,之前介绍的多客服是把用户对话状态切换到多客服客,消息发送到专门的多客服户端,这个对话是由用户主动发起的。而这里的“客服”实际上是指在任意时间,主动推送消息给指定过的用户(用户在48小时内有过互动),对话不需要由用户主动发起。
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/Custom
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{/// <summary>/// 客服接口/// </summary>public static class Custom{private const string URL_FORMAT = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}";/// <summary>/// 发送文本信息/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="content"></param>/// <returns></returns>public static WxJsonResult SendText(string accessToken, string openId, string content){var data = new{touser = openId,msgtype = "text",text = new{content = content}};return CommonJsonSend.Send(accessToken, URL_FORMAT, data);}/// <summary>/// 发送图片消息/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="mediaId"></param>/// <returns></returns>public static WxJsonResult SendImage(string accessToken, string openId, string mediaId){var data = new{touser = openId,msgtype = "image",image = new{media_id = mediaId}};return CommonJsonSend.Send(accessToken, URL_FORMAT, data);}/// <summary>/// 发送语音消息/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="mediaId"></param>/// <returns></returns>public static WxJsonResult SendVoice(string accessToken, string openId, string mediaId){var data = new{touser = openId,msgtype = "voice",voice = new{media_id = mediaId}};return CommonJsonSend.Send(accessToken, URL_FORMAT, data);}/// <summary>/// 发送视频消息/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="mediaId"></param>/// <param name="thumbMediaId"></param>/// <returns></returns>public static WxJsonResult SendVideo(string accessToken, string openId, string mediaId, string thumbMediaId){var data = new{touser = openId,msgtype = "video",video = new{media_id = mediaId,thumb_media_id = thumbMediaId}};return CommonJsonSend.Send(accessToken, URL_FORMAT, data);}/// <summary>/// 发送音乐消息/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="title">音乐标题(非必须)</param>/// <param name="description">音乐描述(非必须)</param>/// <param name="musicUrl">音乐链接</param>/// <param name="hqMusicUrl">高品质音乐链接,wifi环境优先使用该链接播放音乐</param>/// <param name="thumbMediaId">视频缩略图的媒体ID</param>/// <returns></returns>public static WxJsonResult SendMusic(string accessToken, string openId, string title, string description,string musicUrl, string hqMusicUrl, string thumbMediaId){var data = new{touser = openId,msgtype = "music",music = new{title = title,description = description,musicurl = musicUrl,hqmusicurl = hqMusicUrl,thumb_media_id = thumbMediaId}};return CommonJsonSend.Send(accessToken, URL_FORMAT, data);}/// <summary>/// 发送图文消息/// </summary>/// <param name="accessToken"></param>/// <param name="openId"></param>/// <param name="title">音乐标题(非必须)</param>/// <param name="description">音乐描述(非必须)</param>/// <param name="musicUrl">音乐链接</param>/// <param name="hqMusicUrl">高品质音乐链接,wifi环境优先使用该链接播放音乐</param>/// <param name="thumbMediaId">视频缩略图的媒体ID</param>/// <returns></returns>public static WxJsonResult SendNews(string accessToken, string openId, List<Article> articles){var data = new{touser = openId,msgtype = "news",news = new{articles = articles.Select(z => new{title = z.Title,description = z.Description,url = z.Url,picurl = z.PicUrl//图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80}).ToList()}};return CommonJsonSend.Send(accessToken, URL_FORMAT, data);}}}群发接口
这里的群发效果和登录微信后台群发是一样的。
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/GroupMessage
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{/// <summary>/// 高级群发接口/// </summary>public static class GroupMessage{/// <summary>/// 根据分组进行群发////// 请注意:/// 1、该接口暂时仅提供给已微信认证的服务号/// 2、虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,请小心测试/// 3、无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败。////// </summary>/// <param name="accessToken"></param>/// <param name="groupId">群发到的分组的group_id</param>/// <param name="mediaId">用于群发的消息的media_id</param>/// <returns></returns>public static SendResult SendGroupMessageByGroupId(string accessToken, string groupId, string mediaId){const string urlFormat = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token={0}";var data = new{filter = new{group_id = groupId},mpnews = new{media_id = mediaId},msgtype = "mpnews"};return CommonJsonSend.Send<SendResult>(accessToken, urlFormat, data);}/// <summary>/// 根据OpenId进行群发/// </summary>/// <param name="accessToken"></param>/// <param name="mediaId">用于群发的消息的media_id</param>/// <param name="openIds">openId字符串数组</param>/// <returns></returns>public static SendResult SendGroupMessageByOpenId(string accessToken, string mediaId, params string[] openIds){const string urlFormat = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token={0}";var data = new{touser = openIds,mpnews = new{media_id = mediaId},msgtype = "mpnews"};return CommonJsonSend.Send<SendResult>(accessToken, urlFormat, data);}/// <summary>/// 删除群发消息/// </summary>/// <param name="accessToken"></param>/// <param name="mediaId">发送出去的消息ID</param>/// <returns></returns>public static WxJsonResult DeleteSendMessage(string accessToken, string mediaId){//官方API地址为https://api.weixin.qq.com//cgi-bin/message/mass/delete?access_token={0},应该是多了一个/const string urlFormat = "https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token={0}";var data = new{msgid = mediaId};return CommonJsonSend.Send<WxJsonResult>(accessToken, urlFormat, data);}}}多媒体接口
多媒体接口用于上传图片、语音、图文消息等多媒体信息,一般这些信息都可以用于客服接口或群发。
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/Media
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{//接口详见:http://mp.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6/// <summary>/// 多媒体文件接口/// </summary>public static class Media{/// <summary>/// 上传媒体文件/// </summary>/// <param name="accessToken"></param>/// <param name="type"></param>/// <param name="file"></param>/// <returns></returns>public static UploadResultJson Upload(string accessToken, UploadMediaFileType type, string file){var url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", accessToken, type.ToString());var fileDictionary = new Dictionary<string, string>();fileDictionary["media"] = file;return HttpUtility.Post.PostFileGetJson<UploadResultJson>(url, null, fileDictionary, null);}/// <summary>/// 下载媒体文件/// </summary>/// <param name="accessToken"></param>/// <param name="mediaId"></param>/// <param name="stream"></param>public static void Get(string accessToken, string mediaId, Stream stream){var url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}",accessToken, mediaId);HttpUtility.Get.Download(url, stream);}/// <summary>/// 上传图文消息素材/// </summary>/// <param name="accessToken">Token</param>/// <param name="news">图文消息组</param>/// <returns></returns>public static UploadMediaFileResult UploadNews(string accessToken, params NewsModel[] news){const string urlFormat = "https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token={0}";var data = new{articles = news};return CommonJsonSend.Send<UploadMediaFileResult>(accessToken, urlFormat, data);}}}二维码接口
使用二维码接口可以方便地创建和验证二维码。所创建的二维码用于让用户关注或识别扫描的场景。
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/QrCode
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{//API:http://mp.weixin.qq.com/wiki/index.php?title=%E7%94%9F%E6%88%90%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81/// <summary>/// 二维码接口/// </summary>public static class QrCode{/// <summary>/// 创建二维码/// </summary>/// <param name="expireSeconds">该二维码有效时间,以秒为单位。 最大不超过1800。0时为永久二维码</param>/// <param name="sceneId">场景值ID,临时二维码时为32位整型,永久二维码时最大值为1000</param>/// <returns></returns>public static CreateQrCodeResult Create(string accessToken, int expireSeconds, int sceneId){var urlFormat = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";object data = null;if (expireSeconds > 0){data = new{expire_seconds = expireSeconds,action_name = "QR_SCENE",action_info = new{scene = new{scene_id = sceneId}}};}else{data = new{action_name = "QR_LIMIT_SCENE",action_info = new{scene = new{scene_id = sceneId}}};}return CommonJsonSend.Send<CreateQrCodeResult>(accessToken, urlFormat, data);}/// <summary>/// 获取二维码(不需要AccessToken)/// 错误情况下(如ticket非法)返回HTTP错误码404。/// </summary>/// <param name="ticket"></param>/// <param name="stream"></param>public static void ShowQrCode(string ticket, Stream stream){var urlFormat = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}";HttpUtility.Get.Download(string.Format(urlFormat, ticket), stream);}}}模板消息接口
模板消息类似于短信通知,它遵循一定的模板格式(和图文信息等不一样),不是每个通过验证的服务号都可以获取。
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/TemplateMessage
源代码中相关方法如下:namespace Senparc.Weixin.MP.AdvancedAPIs{/// <summary>/// 模板消息接口/// </summary>public static class Template{public static WxJsonResult SendTemplateMessage<T>(string accessToken, string openId, string templateId, string topcolor, T data){const string urlFormat = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";var msgData = new TempleteModel(){template_id = templateId,topcolor = topcolor,touser = openId,data = data};return CommonJsonSend.Send<WxJsonResult>(accessToken, urlFormat, msgData);}}}OAuth2.0接口
OAuth接口用于安全验证使用微信内嵌浏览器访问的用户的身份(例如获取OpenId)
源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/OAuth
相比其他接口OAuth2.0略微复杂
更多微信公众平台开发:高级接口说明相关文章请关注PHP中文网!