微信开发上传图文消息内的图片,报错41005 缺少多媒体文件数据?
高洛峰
高洛峰 2016-11-04 10:41:37
0
1
1011

这是添加素材的方法

    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; 
        }
    }


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
三叔

先确保curl没问题

122.png

这是上传 一定要确定图片能被获取到 看看图片的地址 确保没问题

122.png

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板