微信9图制作(利用微信公众号提供的素材存储当免费图床用)

Posted

篇首语:上如阶尽管费力,却一步比一步高。本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信9图制作(利用微信公众号提供的素材存储当免费图床用)相关的知识,希望对你有一定的参考价值。

微信9图制作(利用微信公众号提供的素材存储当免费图床用)

当自己开发小程序时,特别是电商类的小程序,会存储很多图片,图片多的话存储成本就会增大,特别是当用户访问增多后,宽带、流量也是不堪负重。

想法

微信公众平台提供了一个素材管理,里面可以上传图片、视频、音频等类型的素材,那么是否可以将图片素材上传上去,获取到url作为自己小程序项目的图片服务器呢?当然没问题!

根据开发文档的说法:永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)。简单来说就是你只能在腾讯的平台使用这个图片素材URL,否则无法展示,因为有防盗链。

开发

根据微信公众平台开发文档提供的【新增永久素材】接口可知,分为以下几个步骤实现上传图片素材到微信服务器。

获取access_token
调用新增永久素材接口进行上传素材
获取到素材的永久URL

代码如下

<?php

// 返回JSON

header("Content-type:application/json");

// 允许上传的图片后缀

$allowedExts = array("jpeg", "jpg", "png");

// 后缀名

if ($allowedExts[0] == 'jpeg')

$hzm = 'jpg';

else

$hzm = $allowedExts[0];

// 获取选择的文件

$temp = explode(".", $_FILES["file"]["name"]);

// 获取文件后缀名

$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

|| ($_FILES["file"]["type"] == "image/png"))

&& ($_FILES["file"]["size"] < 10485760)

&& in_array($extension, $allowedExts))

if ($_FILES["file"]["error"] > 0)

$result = array(

'code' => 201,

'msg' => '上传失败'.$_FILES["file"]["error"]

);

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' => '上传成功',

'url' => $imgurl

);

// 删除本地素材

unlink($upload_filepath);

else

// 上传失败

$result = array(

'code' => 202,

'msg' => '上传失败'

);

// 获取access_token

function getToken()

// appid和secret

$appid='填写你公众号的appid';

$appsecret='填写你公众号的appsecret';

// 读取access_token

include './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 = '<?php'.PHP_EOL.'$access_token = '.var_export($access_token,true).';'.PHP_EOL.'?>';

$arrfile = fopen("./access_token.php","w");

fwrite($arrfile,$arr);

fclose($arrfile);

// 返回当前的access_token

return $access_token['access_token'];

else

// 如果没有过期就直接读取缓存文件

return $access_token['access_token'];

// 获取新的access_token

function 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请求函数

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

return json_decode($out,true);

// 上传图片素材到微信服务器

function upload_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' => new CURLFile($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);

return json_decode($upimg)->url;

curl_close($ch);

// 返回JSON对象

echo json_encode($result,JSON_UNESCAPED_UNICODE);

?>

请求返回

"media_id":"8IZhZUPXxsG_omeA5giO5By8VyHnjk7_oy0Co9jVWwxpgm-sqhx_Hkz_9rLVF9Ws","url":"http:\\/\\/mmbiz.qpic.cn\\/mmbiz_png\\/5zLSKyuEW2Kt5ZGZg7XUx05QyGOVFCpHqKic74qQP4gxzQJYXjwN4aGEiadtfUXax4fCXXV5ia1UnvSwdqxuqLCqA\\/0?wx_fmt=png","item":[]

代码解释

首先要将图片从客户端(小程序端)上传到你自己的服务器的upload目录
然后调用新增永久素材接口从upload目录上传到微信的服务器
需要配置公众号的appid和appsecret获取access_token
新增永久素材接口需要传入access_token才可以调用
access_token有效期是2小时,每天最多获取2000次access_token,超过次数就获取不到,为了能够保证一直都能获取到新的token,不能每上传一次就获取一个新的access_token,量大的话一下子就把2000次用完了。access_token只要在2小时内都可以随便使用,所以需要进行缓存access_token。getToken()这个函数就是缓存access_token的步骤(如果access_token已经超过2小时就获取新的access_token并缓存到本地,如果access_token还没超过2小时直接读取本地缓存的access_token)
获取access_token接口需要在公众号后台的安全中心配置白名单ip地址

注意

图片链接只能在腾讯域名的平台使用,在自建网站无法显示,本文主要将的是小程序调用永久图片素材,是可以用的!

扩展

如果需要在非腾讯域名下使用永久图片素材的URL,需要搭配反防盗链图片跳板,类似http://xxx.com/?imgurl=永久图片素材URL来绕过防盗链,简单来说就是一个图片服务器代理吧。

也可以本地存储一份,两个链接做一个对应,本地只做存储,不做访问,之后别的平台还能用,微信的部分只在微信用,减少流量的访问。

相关参考

微信怎么制作网页宣传(前端对接微信公众号网页开发流程,前期配置)

微信公众号网页开发,其实就是我们开发的h5网页需要放到微信浏览器环境中使用,但是需要对接公众号授权,授权之后可以获取到用户的个人信息,以及可以使用公众号提供的一些API,如:图片上传、图片预览、获取位置信息、...

微信公众号h5制作(订阅号公众号开发、软件APP开发、小程序H5)

+微信18165741621为什么要做小程序?公众平台有3种公众号:订阅号、服务号、企业号,企业号用得比较少,我们暂时不去讨论。过去几年,订阅号的发展可以说超乎了所有人的想象力,以前没有人会觉得投资一个没有产品的订阅...

微信公众平台认证(微信公众号个人认证要钱吗 公众号个人认证怎么申请流程)

微信个人公众号可以申请认证了,申请方法很简单,一般1至3天内审核完毕,就会出现认证图标了。下面介绍微信公众号个人认证的具体方法步骤。微信公众号个人认证怎么申请用户登录公众号后可通过“公众号设置-个人认证-...

微信公众号怎么才有多人看(公众号搜索不到?手把手教你如何解决)

微信搜一搜的价值被越来越多人看到,同时微信搜一搜也一直是公众号流量来源之一。但不少运营者都曾碰到过公众号搜索不到的情况,近日,西瓜资源会中也有人遇到了这个问题:图|截自西瓜资源会群聊为什么会遇到这种情...

手机制作720全景图(展会VR全景展示系统,720度沉浸式全视角交互看展)

...统随意逛展。展会VR全景拍摄制作完成后,可通过官网、微信公众号、抖音、快手、百度地图等第三方平台进行推送。一、展会VR全景拍摄制作展示效果展会VR全景拍摄制作是虚拟现实技术与互联网、移动通讯技术相结合的产物,...

微信公众号制作(公众号怎么做?手把手教你)

...人不知道怎么操作!现在手把手教你公众号怎么做!1:微信公众号注册公众号定位头像2:公众号基础设置自动回复底部自定义菜单栏3:内容编辑4:粉丝来源5:公众号如何变现一:微信公众号注册浏览器搜索微信公众平台进行...

微信公众号渠道构成(公众号二维码如何转链接?二维码链接生成工具)

...?1.扫码注册登录爱短链(免费生成,免费使用)2.点击微信外链,生成微信外链3.在弹窗中填写所需的外链标题、二维码图片,以及轮替方式和备注等等4.在填写完全部信息后,可以确认一遍是否正确,没问题后点

微信公众号投票怎么刷投票(微信投票平台怎么绑定和解绑公众号?)

在平台设置授权认证过的公众号,两个平台互相绑定,不仅能够更加方便操作,还能够通过关注公众号报名、投票这些功能引流精准用户人群,实现优质用户,为公众号涨粉。它适用于任何想要通过投票活动转化引流的商家或公...

微信公众号商城怎么开通(店铺微信公众号怎么创建?)

有些小伙伴问店铺微信公众号怎么创建,在解答这个问题之前,先简单说说店铺和微信公众号关系:店铺一般是指小程序店铺,商家通过小程序店铺来卖货;微信公众号则是一个发布信息的平台。但是两者之间可以打通,企业商...

微信制作表情包素材(怎么将视频制作成GIF动图?学会可以自制微信表情包)

...也很简单,下面我来分享4个制作方法,学会了可以自制微信聊天表情包~1.Kapwing一个操作简单的在线GIF和视频编辑器,支持导入视频编辑并将视频导出为GIF动图,不管是手机还是电脑都可以使用,并且不需要安装,只需要在浏览...