node.js - Nodejs微信開發,影片上傳成功,但不回傳給用戶
过去多啦不再A梦
过去多啦不再A梦 2017-06-30 09:57:20
0
2
1117

用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()這個方法來實作。

过去多啦不再A梦
过去多啦不再A梦

全部回覆(2)
typecho

1.為什麼微信為什麼返回公眾號暫時無法提供服務
微信的機制是 用戶發送給公眾號信息後,伺服器5秒內沒有返回則提示該公眾號暫時無法提供服務

5秒的機制是可以用別的方式解決的, 先返回給微信空內容為了不提示, 等程序處理完再給微信返回一個正確的
響應內容

2.上傳三次的問題需要你貼上上傳介面的程式碼和上傳處理的程式碼,然後我們在說怎麼解決

滿天的星座
  • 這個問題在我開發的時候也遇到了,當用戶發送“視頻”兩個字後,後台確實是在上傳視頻素材(上傳的代碼寫得沒有問題),但是視頻上傳的時間由於網絡或者微信後臺本身的原因有時會超過5秒(大一點的影片在測試帳號都超5秒),這時伺服器就直接回傳提示訊息:該公眾號暫時無法提供服務。需要過一會兒,程式才會列印出你截圖的data和xml的資訊。

  • 所以自動回复的時候上傳視頻素材這種做法是不合適的,視頻應該事先先上傳好,用戶發送"視頻",直接獲取事先上傳好的視頻信息,並回復用戶

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!