博客
关于我
微信公众号开发之素材管理
阅读量:306 次
发布时间:2019-03-04

本文共 2252 字,大约阅读时间需要 7 分钟。

因公司项目需求,需要开发一套微信公众后台管理系统,因为个人能力和时间限制,这里选择了SDK开发。

选用的SDK是:Gaoming13/wechat-php-sdk

github地址:

(之后发现这个SDK太老了,不过有些还可以用。建议使用官网:)

这里主要做了永久素材的操作:素材新增、素材列表的获取、单个素材的获取、删除单个素材的功能

 一、首先,看一下sdk中api的初始化

//api对象$this->api = new Api(array(    'appId' => $this->AppID,    'appSecret' => 	$this->AppSecret,    'get_access_token' => function(){    // 用户需要自己实现access_token的返回        return cache('wechat_token');     },     'save_access_token' => function($token) {     // 用户需要自己实现access_token的保存         cache('wechat_token', $token);     }));

access_token的存储我这里用的是缓存的形式。常用的还有两种方式就是文件存储形式和数据表存储。

还有一点,我这里碰到的点小坑:

更换微信公众号配置(APPID,secret等)后 ,可能用的还是之前的access_token,所以这里需要清一下缓存,方法是:

cache('wechat_token',null)

这里强调这一点的原因是,我用cache('wechat_token'," ")是清不掉的

 二、添加永久素材

//上传文件及获取文件路径$file = $this->request->file('file');$filepath = \Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'wechat'.DIRECTORY_SEPARATOR.'img';$info = $file->move($filepath);$path = $filepath . DIRECTORY_SEPARATOR . $info->getSaveName();// 使用SDK上传素材到微信素材库$res=$this->api->add_material('image',$path);

图片、语音的上传方法是一样的,上传语音只需把image改为voice即可

这里需要注意的点是:

1、上传到微信的文件路径,即$path不能直接用缓存文件的路径,需要将文件暂存到本地某个路径下,然后再去上传

2、上传完后为了节省内存,需要将暂存的文件删除,删除的时候也有坑,就是删除文件之前,先需要解除绑定

unset($info);//解除绑定unlink($path);//删除文件

至于视频的添加,跟图片语音有点区别

视频的话,一般需要加标题和描述,所以SDK的添加素材方法不知道为啥不能用了,项目紧急,就还换了curl包做了

包地址:

方法如下:

$describe = array(            'title'=>$title,            'introduction'=>$introduction        );        $describe = json_encode($describe);        $postPath = 'https://api.weixin.qq.com/cgi-bin/material/add_material?type=video&access_token='.$this->api->get_access_token();        $curl = new \Curl\Curl();        $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);        $curl->setOpt(CURLOPT_SSL_VERIFYHOST, false);        $curl->post($postPath, [            'media' => new \CURLFile($path),            'description' => $describe        ]);

添加的问题大概就这些

三、获取素材列表

$this->api->get_materials('news', 0, 20);$this->api->get_materials('image', 0, 20);$this->api->get_materials('voice', 0, 20);$this->api->get_materials('video', 0, 20);

分别获取的是图文、图片、语音、视频的列表

问题:防盗链问题

获取的素材列表就是需要在项目的后台展示的,但是因为防盗链,素材是无法展示的

网上查了查,有些说可以直接在html页面加

加了之后发现的确可以,但是有时候又不行,所以没办法,就在本地服务器存了一份,用media_id关联起来,后台显示直接用项目服务器上的媒体即可

其他获取单个素材和删除素材的,基本没啥大问题,这里就不赘述了

转载地址:http://skxq.baihongyu.com/

你可能感兴趣的文章
java线程(19)——信号灯法,电视播放,生产者与消费者的案例
查看>>
java线程(20)——Runnable线程池
查看>>
计算机网络ip知识点
查看>>
react(3)——导入了正确的包,但是运行不出来,原因是因为导入包的顺序有问题
查看>>
react(10)——三大属性state,props,refs,总结其特点
查看>>
javascript(7)——定义函数的两种方式以及使用的时候传入多个参数的情况,arguments和...rest
查看>>
react(20)——使用函数的柯里化实现获取表单的数据
查看>>
react(28)——react脚手架public目录下文件讲解
查看>>
Visual Studio Code——安装react插件,提高代码速率
查看>>
mybatis(3)——使用map参数进行添加用户案列
查看>>
Vscode——快速折叠所有的代码
查看>>
看领导者系列第二部《成为领导者》的几点感悟
查看>>
mybatis(11)——在mybatis中配置并使用log4j日志
查看>>
mybatis(12)——在mybatis中通过limit和RowBounds实现分页查询
查看>>
spring(5)——通过import标签整合多个beans
查看>>
leetcode-两数之和(简单题-1)
查看>>
ubantu软件管理命令及远程登陆命令
查看>>
不同路径--动态规划
查看>>
字符串解码--动态规划
查看>>
Java字节数组输入流ByteArrayInputStream
查看>>