您好,欢迎访问一九零五行业门户网

微信公众平台开发:高级接口说明

这里所说的高级接口是指面向通过认证的服务号开通的高级功能。
高级功能大致可以分类为:
用户接口
分组接口
客服接口(有别于之前介绍的多客服)
群发接口
多媒体接口
二维码接口
模板消息接口(不是所有账号都可开通)
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略微复杂
更多微信公众平台开发:高级接口说明。
其它类似信息

推荐信息