当前位置: 首页 > 工具软件 > Crop Image > 使用案例 >

关于微信获取素材列表返回CropImage图片的解决办法

钱和平
2023-12-01

微信获取素材接口地址:

https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN

调用参数:

{
    "type":TYPE,//	素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
    "offset":OFFSET,//从全部素材的该偏移位置开始返回
    "count":COUNT //返回素材的数量,取值在1到20之间
}

返回结构

{
   "total_count": TOTAL_COUNT,//素材总数
   "item_count": ITEM_COUNT,//当前数
   "item": [{//素材列表
       "media_id": MEDIA_ID,
       "name": NAME,
       "update_time": UPDATE_TIME,
       "url":URL
   },
   ]
}

获取公众号所有素材的思路:

  count给最大值20,第一次调用获取total_count,利用total_count除以count获取剩余请求接口数,最后将数据写入数据库

以上操作都很正常,但是当查看数据库后发现 出现了N多name值为CropImage的图片,且素材库里面并没有这些图片,并且图片返回的还不完全

最终查出CropImage产生的原因

用户设置图文消息==>上传图片==>放入素材库==>微信根据传图大小剪裁==>生成多张名为CropImage的隐藏素材库图片

所以这些图片是上传图片的剪裁的一部分 但是这些CropImage的图片不会在素材库里面展示 并且也不占用total_count的个数,但是接口会反回这些数据,就问你坑不坑?更坑的是 当你删除图文消息,删除素材库里面的原图,这些CropImage依然存在于你的接口返回数据里面

最终由于返回图片数远大于total_count导致我的代码出现了bug,也产生了一些没有实际作用的图片,接下来放上优化后的代码

        $api = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=1';
        $num = 20;
        $type = 'image';
        $data = ['type'=>$type,'offset'=>0,'count'=>$num];
        $has = $i = 1;
        $items = [];
        while($has){
            $data['offset'] = $num*($i-1);
            $return = curlRequest($api,$data);//curlRequest封装一个culr方法
            if($return['item_count']<$num){//返回数少于num数 则表示下面没有图片 终止循环
                $has = 0;
            }
            if($return['item_count']>0){
                $items = array_merge($items, $return['item']);
            }
            $i++;
        }
        $mediaData = [];
        foreach($items as $item){
            if(strtolower($item['name'])=='cropimage'){//放弃cropimage图片的存储
                continue;
            }
            $mediaData[]=[
                'app_id'=>$this->app_id,
                'media_id'=>$item['media_id'],
                'name'=>$item['name'],
                'type'=>$type
            ];
        }
        save($mediaData);//数据写入

以上;

 类似资料: