这是添加素材的方法
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',也是看别人说的要加上,但是也没用
报错信息如下
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;
}
}