media data missing 微信公众号上传素材提示41005的问题处理

微信公众号上传素材提示41005的问题处理

{"errcode":41005,"errmsg":"media data missing hint: [9EgIfa06588236] rid: 604f738a-74205889-74579fe8"}

利用curl上传素材发现高版本的php出现上面的错误提示,无法成功上传素材。 查阅相关资料得知是php版本的影响,兼容处理如下:

/**
 * 上传临时素材:图片,语音,视频,缩略图
 * 储存到微信公众平台服务器,3天
 * 可通过上传后返回的media_id再次去取得该图片
 * @param $file
 * @param $type image|voice|video|thumb
 * @return mixed
 */
public function uploadTmp($file, $type)
{
    $url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $this->get_access_token() . '&type=' . $type;

    if (class_exists('\CURLFile')) {
        $data['media'] = new \CURLFile(realpath($file));
    } else {
        $data['media'] = '@'.realpath($file);
    }

    $result = $this->curl_post($url, $data);
    return  json_decode($result);
}

/**
 * post网络请求
 * @param $url
 * @param string $data
 * @param int $timeout
 * @return bool|string
 */
public function curl_post($url, $data = '', $timeout = 10)
{
    if ($url == "" || $timeout <= 0) {
        return false;
    }

    $con = curl_init($url);  
    curl_setopt($con, CURLOPT_HEADER, false);
    curl_setopt($con, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
    curl_setopt($con, CURLOPT_SSL_VERIFYPEER, false);//调试去掉ssl验证
    // POST数据
    curl_setopt($con, CURLOPT_POST, true);

    // 把post的变量加上
    curl_setopt($con, CURLOPT_POSTFIELDS, $data);

    return curl_exec($con);
}

上面核心的内容:

if (class_exists('\CURLFile')) {
        $data['media'] = new \CURLFile(realpath($file));
    } else {
        $data['media'] = '@'.realpath($file);
    }


调用:

$this->uploadTmp(DIR_LOG.'data/img/ac.png','image');

微信正常返回:

{"type":"image","media_id":"WZ_x7-RS5O3PHIWW6P5DAb_RaPkAWtASna1Fl41ehg2WfgQGCY-gLtd_KOnsk-N5","created_at":1615820789,"item":[]}


评论/留言