PHP微信上传图片素材41005错误
错误信息:errcode":41005,“errmsg”:"media data missing hint
下面是微信给的接口信息:实际上我要传的参数就一个图片的绝对路径,一定要看好不是url而是绝对路径
报41005的错误大致就两个问题
- 参数错误:绝对路径不对,下方为我自己拼接的绝对路径
$media = dirname(dirname(__DIR__)).'/public/uploads/20200602/a.jpg;
- curl的写法问题:php5.5与php5.5以上的版本curl的写法也是不一样的
// 拼接绝对路径 D:/phpstudy_pro/WWW/tpdemo.top/public/uploads/20200602/a.jpg
$media = dirname(dirname(__DIR__)).'/public/uploads/20200602/a.jpg;
$token = "通过appid兑换的token";
$url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$token.'&type=image';
$data = array(
// php5.6版本以上
"media"=> new \CURLFile(realpath($media)),
// php5.5版本
// "media"=> '@' . realpath ( $media ),
);
// curl
$ch = curl_init();
if (class_exists('\CURLFile')) {
// php版本5.6以上
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
} else {
if (defined('CURLOPT_SAFE_UPLOAD')) {
// php5.5版本
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
}
}
curl_setopt_array(
$ch,
array(
// 路径
CURLOPT_URL => $url,
// 在http请求头中Referer的内容
CURLOPT_REFERER => $url,
// TRUE 时将根据 Location: 重定向时,自动设置 header 中的Referer:信息
CURLOPT_AUTOREFERER => true,
// 获取信息以字符串返回,不直接输出
CURLOPT_RETURNTRANSFER => true,
// 检查公用域名 0-不检查 1-检查SSL证书是否存在公用域名 2-检查公用域名是否与主机名匹配 默认为2
CURLOPT_SSL_VERIFYHOST => 0,
// 连接时间单位(秒)
CURLOPT_CONNECTTIMEOUT => 0,
// 允许 cURL 函数执行的最长秒数。
CURLOPT_TIMEOUT => 30,
// 在HTTP请求中包含一个"User-Agent: "头的字符串。
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36'
)
);
// 表单post提交
curl_setopt ( $ch, CURLOPT_POST, 1 );
// 验证证书
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
// 模拟post发送数据
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
$output = curl_exec($ch);
curl_close($ch);
var_dump($output);
这是我写的测试版,需要的小伙伴可以把CURL拿出去单独写一个方法