php 微信开发之新增上传/获取下载临时素材(完整示例-亲测有效-含注意事项-超级详细)

对接文档--https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_temporary_materials.html

代码示例如下

记录一下这些都是测试过后可以使用的代码!本博文是记录一下。怎么上传临时的素材后获取id然后进行下载的。在微信里面临时的素材只能保留3天。3天过后便后自动的删除掉了。微信的也不提供获取临时素材的列表。那么看看下面代码
php 微信开发之新增上传/获取下载临时素材 代码

<?php 
define("AppID","");//你的id 
define("AppSecret", "");//你的secret

/*  上传临时文件 */
$a = "0";
if($a == "1"){
$type = "image";
$filepath = dirname(__FILE__)."\w.jpg"; 
$filedata = array("file1"  => "@".$filepath);
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".token()."&type=".$type;
$result = https_request($url, $filedata);
$p = json_decode($result);
echo "media_id:".$p->media_id;
}


/*  获取临时的文件  */
$b = "1";
if($b == "1"){
$id = "Zary6julqwRBBuSgzFbiMCSjYmG2930UvzjrbnHN4nyT3YGZVD8H-ecfoReGT1Qr";
$url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=".token()."&media_id=".$id;
$arr = downloadWeixinFile($url);
saveWeixinFile("1.jpg",$arr['body']);

}


function downloadWeixinFile($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);    
    curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $package = curl_exec($ch);
    $httpinfo = curl_getinfo($ch);
    curl_close($ch);
    $imageAll = array_merge(array('header' => $httpinfo), array('body' => $package)); 
    return $imageAll;
}


function saveWeixinFile($filename, $filecontent)
{
    $local_file = fopen($filename, 'w');
    if (false !== $local_file){
        if (false !== fwrite($local_file, $filecontent)) {
            fclose($local_file);
        }
    }
}



function token(){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppID."&secret=".AppSecret;
    $data = json_decode(file_get_contents($url),true);
if($data['access_token']){
return $data['access_token'];
    }else{
        echo "Error";
   exit();
    }
}
?>

注意事项:微信这个素材下载接口返回的数据在header头内,这个是坑呀,稍不注意就掉进去了

可以使用在线调试工具进行调试--很好用--- https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%8E%A5%E5%8F%A3%20/media/upload
可以先用工具上传图片拿到一个媒体id再拿去测试下载

------正确的数据-----
header内有数据
body内也有数据非false也非41007的报错提示而是图片二进制数据
正常情况下复制完整的下载地址去浏览器打开就直接自动下载图片了
请求地址:
https://api.weixin.qq.com/cgi-bin/media/get?access_token=73_kj9wbFdFwZS5THGckjE-KLAOS5j8XVdyCdPWjnNiDsvnn8AV-AftG51Ndes_SWra1j5Q7_Eu_lO9YCm82jlpuIWCmz3_1Ic2Ct8kZy24YdH9IWOdtnfvlzo0DNkXZBbAHABDF&media_id=gFF1MGlo_HQDz62FHimEM0FrcX0gLRsZHLsSZ5uhExE3Acr43vTBL3X2otCPufqg
返回结果:
200 OK
Cache-Control: no-cache, must-revalidate
Connection: keep-alive
Date: Tue, 24 Oct 2023 02:43:35 GMT
Content-Type: image/jpeg
Content-Length: 29202
Content-disposition: attachment; filename="gFF1MGlo_HQDz62FHimEM0FrcX0gLRsZHLsSZ5uhExE3Acr43vTBL3X2otCPufqg.jpg"
false

 

----代码亲测有效,可以用,返回41007或者不报41007但body中拿不到二进制数据都是有问题,多半是media id没复制好,多检查一下,建议用在线工具先生成一个拿来测试

 

 

THE END