這是添加素材的方法json
function addMaterial() { $file_info = array( 'name'=>'media', 'filename' => '/Public/qf1.png', //圖片相對於網站根目錄的路徑 'content-type' => 'image/png', //文件類型 'filelength' => '480' //圖文大小 ); $access_token = $this->getWxAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$access_token."&type=image"; $real_path = "{$_SERVER['DOCUMENT_ROOT']}{$file_info['filename']}"; $data = array("media" => "@{$real_path}", 'form-data' => $file_info); $postJson=json_encode( $data ); $res = $this->https_request( $url ,'post', 'json',$postJson); dump($res); }
說明:
1.上面url後面type的組裝,我看官網沒有,而後網上找的,有人說加上類型,但是也沒用。
返回報錯信息
2.file_info裏的 'name'=>'media',也是看別人說的要加上,可是也沒用api
報錯信息以下微信
array(2) { ["errcode"] => int(41005) ["errmsg"] => string(41) "media data missing hint: [cjkOBa0678e298]" }
請問哪裏出了問題了?網上看到有個說法,說是和PHP版本有關係?session
附1:調用接口的方法app
function https_request($url,$type="get",$res="json",$data = ''){ //1.初始化curl $curl = curl_init(); //2.設置curl的參數 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); if ($type == "post"){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } //3.採集 $output = curl_exec($curl); //4.關閉 curl_close($curl); if ($res == 'json') { return json_decode($output,true); } }
說明:curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2);//我這邊設置成false或者0會不起做用...curl
附2:得到微信的access_tokenpost
function getWxAccessToken(){ if ( $_SESSION['access_token'] && $_SESSION['expire_time'] > time() ) { //未過時 return $_SESSION['access_token']; }else { $appid = "個人id"; $appsecret = "個人appsecret "; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; $res =$this->https_request($url,'get','json'); $access_token = $res["access_token"]; //將從新獲取到的access_token存到session裏 $_SESSION['access_token']=$access_token; $_SESSION['expire_time']=time()+7200; return $access_token; } }