node.js - Nodejs微信開(kāi)發(fā),視頻上傳成功,但是不返回給用戶
問(wèn)題描述
用nodejs進(jìn)行微信開(kāi)發(fā)上傳的是臨時(shí)素材對(duì)視頻的回復(fù)機(jī)制如下:
if(content === ’視頻’){var data = yield wechatApi.uploadMaterial(’video’,__dirname+’publicvideo3.mp4’)console.log(’data’)console.log(data)reply = { type:’video’, title:’回復(fù)的視頻’, description:’視頻描述’, mediaId:data.media_id} }
在手機(jī)微信客戶端輸入“視頻”后,后臺(tái)的顯示如下:
出現(xiàn)這樣的代碼,應(yīng)該就是上傳成功了吧?但是,手機(jī)上顯示的是該公眾號(hào)暫時(shí)無(wú)法提供服務(wù),請(qǐng)稍后再試?這是為什么?ps:又發(fā)現(xiàn)上傳的時(shí)候,上傳了三次?只發(fā)了一個(gè)'視頻',怎么會(huì)上傳三次?上傳的代碼如下:
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)這個(gè)就是對(duì)上面的實(shí)例化,具體實(shí)例化需要的數(shù)據(jù)從config里面獲取。在上傳的時(shí)候,使用wechatApi.uploadMaterial()這個(gè)方法來(lái)實(shí)現(xiàn)。
問(wèn)題解答
回答1:1.為什么微信為什么返回公眾號(hào)暫時(shí)無(wú)法提供服務(wù) 微信的機(jī)制是 用戶發(fā)送給公眾號(hào)信息后,服務(wù)器5秒內(nèi)沒(méi)有返回則提示該公眾號(hào)暫時(shí)無(wú)法提供服務(wù)
5秒的機(jī)制是可以用別的方式解決的, 先返回給微信空內(nèi)容為了不提示, 等程序處理完再給微信返回一個(gè)正確的 響應(yīng)內(nèi)容
2.上傳三次的問(wèn)題需要你貼上傳接口的代碼和上傳處理的代碼,然后我們?cè)谡f(shuō)怎么解決
回答2:這個(gè)問(wèn)題在我開(kāi)發(fā)的時(shí)候也遇到了,當(dāng)用戶發(fā)送“視頻”兩個(gè)字后,后臺(tái)確實(shí)是在上傳視頻素材(上傳的代碼寫得沒(méi)有問(wèn)題),但是視頻上傳的時(shí)間由于網(wǎng)絡(luò)或者微信后臺(tái)本身的原因有時(shí)會(huì)超過(guò)5秒(大一點(diǎn)的視頻在測(cè)試賬號(hào)都超5秒),這時(shí)服務(wù)器就直接返回提示信息:該公眾號(hào)暫時(shí)無(wú)法提供服務(wù)。需要過(guò)一會(huì)兒,程序才打印出你截圖的data和xml的信息。
所以自動(dòng)回復(fù)的時(shí)候上傳視頻素材這種做法是不合適的,視頻應(yīng)該事先先上傳好,用戶發(fā)送'視頻',直接獲取事先上傳好的視頻信息,并回復(fù)用戶
