php5.6版本以上微信上傳臨時素材的問題

這兩天都在做微信的東西,整了一個測試號後開始慢慢弄,前面回覆消息都沒有什麼問題,雖然文檔裏面坑不少,單到了上傳素材這一塊,用之前的CURL返回的是
'errcode' => 41005,
'errmsg' => 'media data missing hint
查過網上的資料以後發現是因爲php5.6以上的版本去除了微信當中的那種CURL,不再支持@+地址這種需要開啓CURLOPT_SAFE_UPLOAD。
當想強行關閉CURLOPT_SAFE_UPLOAD時會直接提示不支持。下面是重點,用5.6以上版本時需要使用CURLFile這個方法,詳情可以去php的官網查一下。下面就直接把代碼貼出來
public static function newHttpsPost($url ='' , $path = '' ){
        $curl = curl_init();
        if (class_exists('\CURLFile')){
            curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
            $data = array('media' => new \CURLFile($path));//
        }
        else
        {
            curl_setopt($curl,CURLOPT_SAFE_UPLOAD,false);
            $data = array('media'=>'@'.$path);
        }

        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1 );
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
        $result = curl_exec($curl);
        $res=json_decode($result,true);
        return $res;
    }
這邊的$URL就是傳給微信的地址,$path則是你要上傳的圖片的路徑。如果你不確定這個路徑對的話可以去虛擬機那邊直接敲微信給出的那種格式的代碼,像CURL -F media=@路徑 地址,如果成功返回正確格式,說明這個路徑是對的。錯的話會提示是說明錯誤,對照微信文檔看下錯誤碼就行。
每個人環境不一定都一樣,要注意一下再複製。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章