Maison > Questions et réponses > le corps du texte
这是添加素材的方法
function addMaterial() { $img_size=filesize("图片"); $file_info = array( /* 'name'=>'media', */ 'filename' => '/路径/Public/qf1.png', //图片相对于网站根目录的路径 'content-type' => 'image/png', //文件类型 'filelength' => $img_size //图文大小 ); $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',也是看别人说的要加上,但是也没用
3.去掉type和info里的name也一样。
报错信息如下
array(2) { ["errcode"] => int(41005) ["errmsg"] => string(41) "media data missing hint: [cjkOBa0678e298]" }
请问哪里出了问题了?网上看到有个说法,说是和PHP版本有关系?
附1:调用接口的方法
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会不起作用...、
附2:获得微信的access_token
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; } }