失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java 微信41005_微信开发上传图文消息内的图片(只返回图片URL) 报错41005 缺少多媒

java 微信41005_微信开发上传图文消息内的图片(只返回图片URL) 报错41005 缺少多媒

时间:2024-03-04 10:57:58

相关推荐

java 微信41005_微信开发上传图文消息内的图片(只返回图片URL) 报错41005 缺少多媒

表示之前遇到过同样的情况,但是没有做记录,坏习惯坏习惯。

首先,可以先尝试使用微信的测试工具试一下。虽然接口是有改过的,接口要求也不太一样,例如图片大小,但是可以排除某些其他因素,如图片是否已损坏之类的。我用本机的一张png图片在测试工具测试了一下,提示文件格式有问题,所以我换了一张jpg格式。测试结果通过。

在保证了图片一定可以上传的前提之后。再开始码php。

我用你的代码测了一下,结果是跟你一样。我本机装了PHP5.5.6版本和7.0.9版本,两个版本都是不行的(windows下,linux没有测过)。然后就是各种更改数据,切换版本。

其中出了两个问题

deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in ...

这个问题就是PHP的版本问题,你有查过资料应该清楚是PHP5.5以后的版本问题。可以通过两种方式解决

1、curl_setopt ($curl, CURLOPT_SAFE_UPLOAD, false);

2、"media" => new CURLFile(realpath($real_path)),

我采用第二种(保险起见两个都写上也可以),PHP版本向后兼容好点。

另外一个问题,也是关键所在。

是我在修改set_curlopt的时候,发现无论怎么修改,其实都是请求成功的,我说的是http code是200(curl_getinfo可以查看),所以应该是数据格式有问题。所以我回头看了一下你请求的数据$postJson。发现你既然请求的是json格式,为什么没有设置头部的请求格式。我设置了,然而并没有什么卵用。然后我直接用数组作为请求的数据。ok!这下终于行了。我不清楚你为什么要把数据设置成json格式,可能是微信其他接口误导了。

我建议你回头看一下手册上关于curl的部分。

期间我也是有查资料。百度就算了。全都是复制黏贴,有些连PHP版本都没有提及。谷歌了一下,可能是微信是中国的,收录的内容也差不了多少。结果还是失望。果然太容易得到的不会是好东西。

以上是我的思路,虽然废话很多,也不一定全对。你的代码我并没有多大改动,回头你自己试一下。

希望对你有帮助。

以下是代码

session_start();

function addMaterial($real_path) {

if( !file_exists($real_path) ) {

die('图片不存在');

}

$access_token = getWxAccessToken();

echo $access_token.'

';

$url = "https://api./cgi-bin/media/upload?access_token=".$access_token."&type=image";

echo $url.'

';

$data = array(

"media" => new CURLFile(realpath($real_path)),

// 'media' => '@'.$real_path,

);

// $data = array("media" => "@".$real_path);

var_dump($data);

echo '

';

$postJson = $data;

// $postJson=json_encode( $data );

// $postJson = http_build_query($data);

var_dump($postJson);

$res = https_request( $url ,'post', 'json',$postJson);

var_dump($res);

}

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_SAFE_UPLOAD, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

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

var_dump(curl_getinfo($curl));

//4.关闭

curl_close($curl);

if ($res == 'json') {

return json_decode($output,true);

}

}

function getWxAccessToken(){

if ( isset($_SESSION['access_token']) && $_SESSION['expire_time'] > time() ) {

//未过期

return $_SESSION['access_token'];

}else {

$appid = "";

$appsecret = "";

$url = "https://api./cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;

$res = 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;

}

}

//addMaterial();

if( !file_exists(realpath($_SERVER['DOCUMENT_ROOT'].'/wechat_upload/qf1.jpg')) ) {

die('不存在');

}

addMaterial($_SERVER['DOCUMENT_ROOT'].'/wechat_upload/qf1.jpg');

java 微信41005_微信开发上传图文消息内的图片(只返回图片URL) 报错41005 缺少多媒体文件数据?(已解决)...

如果觉得《java 微信41005_微信开发上传图文消息内的图片(只返回图片URL) 报错41005 缺少多媒》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。