博客
关于我
微信公众号开发之素材管理
阅读量: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/

你可能感兴趣的文章
基础算法学习大纲(附加yxc大佬算法模板)
查看>>
每日一题-区区区间间间(单调栈的应用)
查看>>
线段树模板
查看>>
区间dp学习4——poj 1651 Multiplication Puzzle——题后反思
查看>>
web学习(三)
查看>>
Mybatis进阶
查看>>
Arrays工具类(jre中基本类库提供的工具类)
查看>>
mybatis三种(查询,参数传递)
查看>>
JSP 登录案例实现
查看>>
Cookie和Session
查看>>
Cookie和Session 登录
查看>>
传输层协议介绍
查看>>
DHCP中继路由及其配置
查看>>
Chrome与vim双神器融合插件- vimium
查看>>
windows下端口查询进程查询以及杀死进程
查看>>
条款21:必须返回对象时,别妄想返回其reference
查看>>
条款23:宁以non-member、non-friend替换member函数
查看>>
条款25: 考虑写出一个不抛异常的swap函数
查看>>
对用户ID、组ID、附属组ID、有效、实际、设置用户、设置组ID等的理解
查看>>
前端基础——HTML(一)
查看>>