用nodejs進行微信開發
上傳的是臨時素材
對影片的回覆機制如下:
if(content === '视频'){
var data = yield wechatApi.uploadMaterial('video',__dirname+'\public\video\3.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.為什麼微信為什麼返回公眾號暫時無法提供服務
微信的機制是 用戶發送給公眾號信息後,伺服器5秒內沒有返回則提示該公眾號暫時無法提供服務
5秒的機制是可以用別的方式解決的, 先返回給微信空內容為了不提示, 等程序處理完再給微信返回一個正確的
響應內容
2.上傳三次的問題需要你貼上上傳介面的程式碼和上傳處理的程式碼,然後我們在說怎麼解決
這個問題在我開發的時候也遇到了,當用戶發送“視頻”兩個字後,後台確實是在上傳視頻素材(上傳的代碼寫得沒有問題),但是視頻上傳的時間由於網絡或者微信後臺本身的原因有時會超過5秒(大一點的影片在測試帳號都超5秒),這時伺服器就直接回傳提示訊息:該公眾號暫時無法提供服務。需要過一會兒,程式才會列印出你截圖的data和xml的資訊。
所以
自動回复的時候上傳視頻素材
這種做法是不合適的,視頻應該事先先上傳好,用戶發送"視頻",直接獲取事先上傳好的視頻信息,並回復用戶