這裡所說的高階介面是指面向通過認證的服務號所開通的高階功能。
進階功能大致可以分類為:
使用者介面
#分組介面
客服介面(有別於先前介紹的多客服)
群發介面
多媒體介面
二維碼介面
範本訊息介面(不是所有帳號都可開通)
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); } } }
多媒體介面
原始程式碼中相關方法如下:
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/Media
原始程式碼中相關方法如下:
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/QrCode
原始程式碼中相關方法如下:
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); } } }
範本訊息介面
原文範本訊息類似於簡訊通知,它遵循一定的模板格式(和圖文資訊等不一樣),不是每個通過驗證的服務號碼都可以獲得。
原始檔案資料夾:Senparc.Weixin.MP/AdvancedAPIs/TemplateMessage
原始程式碼中相關方法如下:
rrreeeOAuth2.0介面
OAuth介面用於安全驗證使用微信內嵌瀏覽器存取的使用者的身分(例如取得OpenId)
# 來源檔案資料夾:Senparc.Weixin.MP/AdvancedAPIs/OAuth
#### 相比其他介面OAuth2.0略微複雜######更多微信公眾平台開發:高階介面說明相關文章請關注PHP中文網! ###