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的信息。
所以自動回復的時候上傳視頻素材這種做法是不合適的,視頻應該事先先上傳好,用戶發送'視頻',直接獲取事先上傳好的視頻信息,并回復用戶
