• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >微信公众号 > 微信开发之被动回复和上传下载文件

微信开发之被动回复和上传下载文件

作者:匿名 字体:[增加 减小] 来源:互联网

匿名通过本文主要向大家介绍了微信开发,被动回复,上传下载文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
第五章已经讲了怎么处理用户发送的消息,本章就来讲讲怎么响应用户的请求。想必新手看到这个标题也就懵了,千万别懵,微信的接口就这样,在回复图片、音乐、语音等都需要将我们的媒体文件上传到微信的服务器才能使用。不知道这样的做法是出于什么考虑的,而且同是给用户回复消息,客服接口和群发接口发送的消息体格式竟然是不同的。估计是这几处接口不是同一个人写的,没有做好代码的统一,咱们屌丝开发者只能无力吐槽了。

在讲上传下载接口前,需要先将下先来讲讲access_token获取方法。在微信接口开发的过程access_token是至关重要的,是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。需要注意的时,一个公众号同时只存在一个有效的access_token,开发者需要在access_token过期前,刷新access_token。在刷新的过程中,公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡。

公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得(需要已经成为开发者,且帐号没有异常状态)。如下图:

image

获取access_token的接口地址是:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
将appid和secret替换成你自己的。

发送get请求到这个地址,返回的数据如下:

{"access_token":"eEd6dhp0s24JfWwDyGBbrvJxnhqHTSYZ8MKdQ7MuCGBKxAjHv-tEIwhFZzn102lGvIWxnjZZreT6C1NCT9fpS7NREOkEX42yojVnqKVaicg","expires_in":7200}
我们只需解析这个json,即可获取到我们所需的access_token.代码如下:
AccessToken实体类:
public class AccessToken
    {        public string token { get; set; }        public DateTime expirestime { get; set; }
    }

获取access token

/// <summary>
        /// 获取access token        /// </summary>
        /// <param name="appid">第三方用户唯一凭证</param>
        /// <param name="secret">第三方用户唯一凭证密钥,即appsecret</param>
        /// <returns>AccessToken对象,expirestime是过期时间</returns>
        public static AccessToken GetAccessToken(string appid, string secret)
        {            try
            {                string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret);                string retdata = Utils.HttpGet(url);                if (retdata.Contains("access_token"))
                {
                    JObject obj = (JObject)JsonConvert.DeserializeObject(retdata);                    string token = obj.Value<string>("access_token");                    int expirestime = obj.Value<int>("expires_in");                    return new AccessToken { token = token, expirestime = DateTime.Now.AddSeconds(expirestime) };
                }                else
                {
                    WriteBug(retdata);//写错误日志                }                return null;
            }            catch (Exception e)
            {
                WriteBug(e.ToString());//写错误日志
                return null;
            }

        }

access_token获取成功后,下面来讲上传下载多媒体文件吧。官方说,公众号在使用接口时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的(咱读书少,不明白为什么不能使用url,而要多此一举先上传到服务器在发送)。通过本接口,公众号可以上传或下载多媒体文件。但请注意,每个多媒体文件(media_id)会在上传、用户发送到微信服务器3天后自动删除,以节省服务器资源。

上传多媒体的接口地址是:

file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

其中access_token为调用接口凭证,type是媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

注意事项:

上传的多媒体文件有格式和大小限制,如下:

  • 图片(image): 1M,支持JPG格式

  • 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式

  • 视频(video):10MB,支持MP4格式

  • 缩略图(thumb):64KB,支持JPG格式

媒体文件在后台保存时间为3天,即3天后media_id失效。

为了方便调用,将媒体文件的类型定义为枚举,代码如下:

public enum MediaType
    {        /// <summary>
        /// 图片(image): 1M,支持JPG格式        /// </summary>        image,        /// <summary>
        /// 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式        /// </summary>        voice,        /// <summary>
        /// 视频(video):10MB,支持MP4格式        /// </summary>        video,        /// <summary>
        /// 缩略图(thumb):64KB,支持JPG格式        /// </summary>        thumb
    }

然后定义返回值的类型:

public class UpLoadInfo
    {        /// <summary>
        /// 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图)        /// </summary>
        public string type { get; set; }        /// <summary>
        /// 媒体文件上传后,获取时的唯一标识        /// </summary>
        public string media_id { get; set; }        /// <summary>
        /// 媒体文件上传时间戳        /// </summary>
        public string created_at { get; set; }
    }

最后使用WebClient类来上传文件,并读出返回值,代码如下:

/// <summary>
        /// 微信上传多媒体文件        /// </summary>
        /// <param name="filepath">文件绝对路径</param>
        public static ReceiveModel.UpLoadInfo WxUpLoad(string filepath, string token, MediaType mt)
        {            using (WebClient client = new WebClient())
            {                byte[] b = client.UploadFile(string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", token, mt.ToString()), filepath);//调用接口上传文件                string retdata = Encoding.Default.GetString(b);//获取返回值                if (retdata.Contains("media_id"))//判断返回值是否包含media_id,包含则说明上传成功,然后将返回的json字符串转换成json
                {                    return JsonConvert.DeserializeObject<UpLoadInfo>(retdata);
                }                else
                {//否则,写错误日志

                    WriteBug(retdata);//写错误日志
                    return null;
                }
            }
        }

至此,在讲回复消息之前,插入了两个基础支持接口,由于各位整理归纳能力太烂了,各位看官请多包涵,如有问题就留言和我交流。 下面正式开始讲回复消息。在看下面内容的时候,请大家结合第四,第五章进行阅读。

前面两章讲述了接收并处理用户发送的消息,讲到了一个消息基类BaseMessage,而不管我们接收到什么类型的消息,都需要可以调用方法,进行响应用户的请求,所以,用户回复用户请求的方法需要封装到基类中。下面先简单了解下公众号可以回复的消息类型,以及消息格式。

注意:

一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:

1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据,比如JSON数据等
回复文本消息
<xml><ToUserName><![CDATA[接收方帐号(收到的OpenID)]]></ToUserName>&



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 微信开发教程:自动回复消息和客服消息,文本带链接跳转
  • php 实现微信开发获取用户信息
  • 微信开发实战之模块化的实例详解
  • 微信开发之列表渲染多层嵌套循环
  • 总结一个微信开发的过程实例
  • 微信开发入门(jssdk开发)
  • 微信开发之介绍CreateTime
  • 微信公众号开发--解析CreateTime
  • 微信开发之微信支付
  • 详解微信开发中视图层(xx.xml)和逻辑层(xx.js)

相关文章

  • 用c#开发微信自定义菜单设置工具
  • 微信公众号-获取用户信息(网页授权获取)实现步骤
  • php微信公众平台开发回复功能实例代码
  • 微信开发之数据库操作
  • 微信小程序 WXML、WXSS 和JS介绍及详解
  • java微信开发API微信自定义个性化菜单实现实例代码
  • 微信开发入门(十)登录态维护
  • 关于支付开发的文章推荐10篇
  • 微信开发如何做本地调试
  • 微信二次开发之文本消息请求与发送

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 图文详解.Net语言Smobiler开发之如何仿微信朋友圈的消息样式
    • 微信公众号查看关注者接口的.NET实例教程
    • 微信公众平台开发数据库操作
    • 使用php微信开发获取用户信息实现代码详解
    • .NET C#使用微信公众号登录网站的实例解析
    • 关于技术窍门的详细介绍
    • 怎么创建微信公众号自定义菜单栏?这里给出了权威解答
    • 微信开发系列教程(2)
    • php微信公众号开发模式详细说明
    • NodeJs开发微信公众号微信事件交互实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有