?微信官文文檔:
?注意事項
1、對于臨時素材,每個素材(media_id)會在開發(fā)者上傳或粉絲發(fā)送到微信服務(wù)器3天后自動刪除(所以用戶發(fā)送給開發(fā)者的素材,若開發(fā)者需要,應(yīng)盡快下載到本地),以節(jié)省服務(wù)器資源。
2、media_id是可復(fù)用的。
3、素材的格式大小等要求與公眾平臺官網(wǎng)一致。具體是,圖片大小不超過2M,支持png/jpeg/jpg/gif格式,語音大小不超過5M,長度不超過60秒,支持mp3/amr格式
4、需使用https調(diào)用本接口。
調(diào)用示例(使用curl命令,用FORM表單方式上傳一個多媒體文件):
curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"
根據(jù)微信的官方文檔開看,我們只需要傳三個參數(shù) access_token、type、@fileurl(絕對路徑)
所以筆者第一次就按照這個文檔來了,傳了三個參數(shù),但是上傳返回 48001 好吧接口未授權(quán),然后筆者去微信官方申請了一個測試號,錄入AppID和AppSecret 然后繼續(xù)重來,這次沒出現(xiàn) 48001 出現(xiàn)了一個 45001 重點來了,45001 看后面的英文意思就是媒體文件不存在,怎么可能不存在呢?返回代碼打印了文件路徑,發(fā)現(xiàn)路徑?jīng)]有任何問題,繼續(xù)重來還是45001。郁悶了,然后用命令進行測試看是否是問下的接口問題,curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE" 這行命令代碼換上正確的參數(shù)后 執(zhí)行 發(fā)現(xiàn)能正確返回media_id.
那么到底是什么問題呢?現(xiàn)在我們能確定兩點1:不是微信接口的問題,2:不是路徑問題,讓我不禁懷疑到curl函數(shù)的問題,剛開始沒懷疑它是因為這個函數(shù)能正確的獲取的access_token但是現(xiàn)在不得不懷疑是否上傳文件的時候要發(fā)生改變。好吧,咱們?nèi)グ俣萩url模擬上傳文件發(fā)現(xiàn)了一個很重要的問題
? ? ? ? PHP5.5以下是支持@+文件這種方式上傳文件
? ? ? ? PHP5.5以上是支持 new \CURLFile(文件) 這種方式上傳文件
然后筆者的卻是php7.0.7那么事不宜遲趕緊換方式上傳試試,改掉文件上傳的方式后,測試成功!
真是皇天不負有心人啊,說了這么多不如給大家分享點代碼,那么下面上代碼吧
總結(jié):總之微信的文檔不會寫的很詳細,這就需要我們一步步排查錯誤,大膽懷疑不能錯的地方。然后谷歌、百度看看大牛們都怎么處理的。祝你們能寫出一個完美的程序!