当前位置: 首页 > 后端技术 > PHP

使用微信公众号官方提供的API上传图片,获取永久图片素材!将它用作图片床!

时间:2023-03-29 18:24:31 PHP

需要自己开发的小程序,比如社区、电商、新闻、博客等类型的小程序,会需要存储大量的图片,图片资源会带来很大的开销个人开发者。访问量大的情况下,网站的带宽和流量也会不堪重负,所以图片资源一定不适合存储在自己的服务器中,很多厂商提供的灵活存储也是按需付费的。思路是微信公众平台提供了一个素材管理,里面可以上传图片、视频、音频等类型的素材,所以可以上传图片素材并获取url作为自己小程序项目的图片服务器?一点问题都没有!根据开发文档:添加永久图片素材后,会返回给开发者一个URL,开发者可以在腾讯域名内使用(如果在腾讯域名外使用,图片会被屏蔽).简单的说就是只能在腾讯平台使用这个图片素材网址,否则无法显示,因为有防盗链。开发根据微信公众平台开发文档提供的【添加永久素材】接口,将图片素材上传到微信服务器分为以下几步。获取access_token,调用新建永久素材接口上传素材。获取素材的永久URL代码如下:0){$result=array('code'=>201,'msg'=>'上传失败'.$_FILES["文件"][“错误”]);}else{//重命名$new_file=date("Y-m-d")."-".rand(10000,99999).".".$hzm;//上传到你自己的服务器move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$new_file);//获取真实地址$filepath=realpath(dirname(__FILE__));$upload_filepath=$filepath."/upload/".$new_file;//上传到微信服务器$imgurl=upload_img($upload_filepath);//验证上传结果if(strpos($imgurl,'http')!==false){//上传成功$result=array('code'=>200,'msg'=>'上传成功','网址'=>$imgurl);//删除本地素材unlink($upload_filepath);}别的{//上传失败$result=array('code'=>202,'msg'=>'上传失败');}}}//获取access_tokenfunctiongetToken(){//appid和secret$appid='填写你的公众号的appid';$appsecret='填写你的公众号的appsecret';//读取access_tokeninclude'./access_token.php';//判断是否过期if(time()>$access_token['expires']){//如果已经过期,则必须重新获取并缓存$access_token=array();$access_token['access_token']=getNewToken($appid,$appsecret);$access_token['expires']=time()+7000;//将数组写入php文件$arr='';$arrfile=fopen("./access_token.php","w");fwrite($arrfile,$arr);fclose($arr文件);//返回当前的access_tokenreturn$access_token['access_token'];}else{//如果没有过期直接读取缓存文件return$access_token['access_token'];}}//得到新增access_token函数getNewToken($appid,$appsecret){$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";$access_token_Arr=https_request($url);return$access_token_Arr['access_token'];}//curl请求函数functionhttps_request($url){$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);$out=curl_exec($ch);curl_close($ch);returnjson_decode($out,true);}//上传图片素材到微信服务器functionupload_img($realpath){$ch=curl_init();curl_setopt($ch,CURLOPT_URL,'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.getToken().'&type=image');$data=array('media'=>newCURLFile($realpath));curl_setopt($ch,CURLOPT_POSTFIELDS,$data);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$upimg=curl_exec($ch);返回json_decode($upimg)->url;curl_close($ch);}//返回JSON对象echojson_encode($result,JSON_UNESCAPED_UNICODE);?>请请求返回{"media_id":"8IZhZUPXxsG_omeA5giO5By8VyHnjk7_oy0Co9jVWwxpgm-sqhx_Hkz_9rLVF9Ws","http\url":/"mbiz./q:/".然后调用新建永久素材接口从上传目录上传到微信服务器。需要配置公众号的appid和appsecret获取access_token添加永久素材接口需要传入access_token调用access_token有效期为2小时,每天最多获取access_token2000次,如果超过次数,你不会获取到,为了保证总能获取到新的token,不能每次上传都获取到新的access_token。如果量大,一次用完2000次。access_token2小时内可以随便使用,所以需要缓存access_token。getToken()函数是缓存access_token的步骤(如果access_token已经超过2小时,获取一个新的access_token缓存到本地,如果access_token还没有超过2小时,直接读取本地缓存的access_token)获取access_token接口需要在公众号后台安全中心配置白名单ip地址。注意图片链接只能在腾讯域名平台使用,不能在自建网站显示。本文主要使用小程序调用永久图片素材,可以使用!Tips如果需要使用非腾讯域名下的永久图片素材地址,需要使用防盗链图片跳板,类似http://xxx.com/?imgurl=永久图片素材地址绕过防盗链,简单来说:一个图片服务器代理吧。作者TANKING