zoukankan      html  css  js  c++  java
  • Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明

        这里所说的高级接口是指面向通过认证的服务号开通的高级功能。

        高级功能大致可以分类为:

    • 用户接口
    • 分组接口
    • 客服接口(有别于之前介绍的多客服
    • 群发接口
    • 多媒体接口
    • 二维码接口
    • 模板消息接口(不是所有账号都可开通)
    • 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 lang = 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略微复杂,相关内容将在下一篇专门进行介绍:《Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

    系列教程索引

    地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

    1. Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
    2. Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者
    3. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
    4. Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
    5. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
    6. Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
    7. Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题
    8. Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
    9. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
    10. Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
    11. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
    12. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
    13. Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明
    14. Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
    15. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
    16. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
    17. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
    18. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
    19. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理
    20. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十):使用菜单消息功能
    21. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十一):在小程序中使用 WebSocket (.NET Core)
    22. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试
  • 相关阅读:
    POJ 1811 大整数素数判断 Miller_Rabin
    hdu 4940 无源汇有上下界最大流
    hdu 4975 最大流解决行列和求矩阵问题,用到矩阵dp优化
    hdu 4971 多校10最大权闭合图
    hdu 4888 最大流给出行列和求矩阵
    poj 3621最优比例生成环(01分数规划问题)
    poj 2728 最优比例生成树(01分数规划)模板
    最优比例生成树最优比率生成树 01分数规划问题
    poj 2553强连通+缩点
    poj 2831 次小生成树模板
  • 原文地址:https://www.cnblogs.com/szw/p/3764267.html
Copyright © 2011-2022 走看看