node.js - Nodejs微信开发,视频上传成功,但是不返回给用户
问题描述
用nodejs进行微信开发上传的是临时素材对视频的回复机制如下:
if(content === ’视频’){var data = yield wechatApi.uploadMaterial(’video’,__dirname+’publicvideo3.mp4’)console.log(’data’)console.log(data)reply = { type:’video’, title:’回复的视频’, description:’视频描述’, mediaId:data.media_id} }
在手机微信客户端输入“视频”后,后台的显示如下:
出现这样的代码,应该就是上传成功了吧?但是,手机上显示的是该公众号暂时无法提供服务,请稍后再试?这是为什么?ps:又发现上传的时候,上传了三次?只发了一个'视频',怎么会上传三次?上传的代码如下:
Wechat.prototype.uploadMaterial = function(type,filepath){var that = this;var form = { media: fs.createReadStream(filepath)}return new Promise(function(resolve,reject){ that .fetchAccessToken() .then(function(data){console.log(data);var url = api.upload +’access_token=’+data.access_token + ’&type=’+type; request({method:’POST’,url:url,formData:form,json:true}).then(function(response){var _data = response.body;//console.log(data);if(_data){ resolve(_data)}else{ throw new Error(’upload Material fail’)} }) .catch(function(err){reject(err) }) })}) }
至于上传的接口是这样的:var wechatApi = new Wechat(config.wechat)这个就是对上面的实例化,具体实例化需要的数据从config里面获取。在上传的时候,使用wechatApi.uploadMaterial()这个方法来实现。
问题解答
回答1:1.为什么微信为什么返回公众号暂时无法提供服务 微信的机制是 用户发送给公众号信息后,服务器5秒内没有返回则提示该公众号暂时无法提供服务
5秒的机制是可以用别的方式解决的, 先返回给微信空内容为了不提示, 等程序处理完再给微信返回一个正确的 响应内容
2.上传三次的问题需要你贴上传接口的代码和上传处理的代码,然后我们在说怎么解决
回答2:这个问题在我开发的时候也遇到了,当用户发送“视频”两个字后,后台确实是在上传视频素材(上传的代码写得没有问题),但是视频上传的时间由于网络或者微信后台本身的原因有时会超过5秒(大一点的视频在测试账号都超5秒),这时服务器就直接返回提示信息:该公众号暂时无法提供服务。需要过一会儿,程序才打印出你截图的data和xml的信息。
所以自动回复的时候上传视频素材这种做法是不合适的,视频应该事先先上传好,用户发送'视频',直接获取事先上传好的视频信息,并回复用户