<?php
namespace Mob\Controller;
use Think\Controller; class WxmaterialController extends Controller {
private $appId;
private $appSecret;
protected function _initialize() {
/* 读取站点配置 */
$config = api('Config/lists');
C($config);
$this -> appId = C('WX_APPID');
$this -> appSecret = C('WX_SECRET');
} function add_material() {
$file_info = array('filename' => '/Public/1111.jpg', //国片相对于网站根目录的路径
'content-type' => 'image/jpg', //文件类型
'filelength' => '71' //图文大小
);
dump($file_info);
$access_token = $this -> get_access_token();
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$access_token}&type=image";
$ch1 = curl_init();
$timeout = 5;
$real_path = "{$_SERVER['DOCUMENT_ROOT']}{$file_info['filename']}";
//$real_path=str_replace("/", "//", $real_path);
$data = array("media" => "@{$real_path}", 'form-data' => $file_info);
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch1);
curl_close($ch1);
if (curl_errno() == 0) {
$result = json_decode($result, true);
var_dump($result);
return $result['media_id'];
} else {
return false;
}
} // =====================================
// = 获取微信公众号的 access_token=
// =====================================
private function get_access_token() {
$m_appact = M('Appact', 'ot_', DB_GY);
$data = $m_appact -> where(array('appid' => $this -> appId)) -> field('access_token,expire_time') -> find();
if ($data['expire_time'] < time()) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
$res = json_decode($this -> httpGet($url));
$access_token = $res -> access_token;
if ($access_token) {
$data['expire_time'] = time() + 7000;
$data['access_token'] = $access_token;
$r = $m_appact -> where(array('appid' => $this -> appId)) -> find();
$save_arr = array('access_token' => $data['access_token'], 'expire_time' => $data['expire_time']);
$add_arr = array('appid' => $this -> appId, 'access_token' => $data['access_token'], 'expire_time' => $data['expire_time']);
$r ? $m_appact -> where(array('appid' => $this -> appId)) -> save($save_arr) : $m_appact -> add($add_arr);
}
} else {
$access_token = $data['access_token'];
}
return $access_token;
} private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
} }

php 微信公众号上传永久素材的更多相关文章

  1. Java 微信公众号上传永久素材的方法

    Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @Request ...

  2. 怎么在微信公众号上传PPT?

    我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加附件使用“微附件”小程序的教 ...

  3. 基于 muse-ui 封装一个微信公众号上传插件 实现多图上传

    Vue.component('my-wx-upload', { template: ` <mu-grid-list :cols="3" :cellHeight="9 ...

  4. 怎么将PPT文件上传到微信公众号上?

    我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加附件使用“微附件”小程序的教 ...

  5. php 微信公众平台上传多媒体接口 41005错误

    文链接: http://www.maoyupeng.com/wechart-upload-image-errorcode-41005.html PHP的cURL支持通过给CURL_POSTFIELDS ...

  6. Azure 项目构建 - 用 Azure 认知服务在微信公众号上搭建智能会务系统

    通过完整流程详细介绍了如何在Azure平台上快速搭建基于微信公众号的智慧云会务管理系统. 此系列的全部课程 https://school.azure.cn/curriculums/11 立即访问htt ...

  7. 个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)

    @ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...

  8. 微信上传文章素材—ASP.NET MVC从View层传数据到Controller层

    View层: $('#btnNews').click(function() { if (!confirm('确定要提交吗?')) { return; } var frontViewData = []; ...

  9. 在安卓上,微信公众号无法分享到QQ的解决办法之一

    今天做一个微信公众号分享功能,参考微信sdk,代码几乎没有任何问题,但就是分享到QQ失败,以下是我QQ分享部分的代码: wx.onMenuShareQQ({ title: '快来和我一起玩转大脑', ...

随机推荐

  1. Win7系统的任务管理器显示不全

    Win7系统的任务管理器显示不全:如下图所示 首先要说明的是:出现这种现象是正常的,因为这种样式是任务管理器的精简模式. 还原方法:双击任务管理器四周的空白边框,即可恢复初始模式. 效果图如下:

  2. Android Edittext聚焦时输入法挡住了EditText输入框的两种解决方案

    方案一.把整个布局文件用ScrollView套住.这样当你聚焦时虽然输入法也能够挡住一些输入框,但是你可以通过手动滑动看被挡住的内容. 方案二.在Activity中设置android:windowSo ...

  3. 允许Ubuntu系统下Mysql数据库远程连接

    第一步: vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1 注释掉这行,如:#bind-address = 127.0.0.1 或者改为: bind-ad ...

  4. Scala--映射和元组

    一.构造映射 val scores = Map("Jim"->10, ("Tom",20), "Sam"->44) //key- ...

  5. 同步IO和异步IO的区别

    首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO.非阻塞IO.IO服用 ...

  6. 2017-2018-2 20155203《网络对抗技术》Exp5 MSF基础应用

    1.实践过程记录 1.1一个主动攻击实践,如ms08_067; msf > search ms08_067_netapi //查看可以用的工具 [!] Module database cache ...

  7. 20155336虎光元 Exp1PC平台逆向破解及Bof基础实践

    20155336Exp1 PC平台逆向破解(5)M 实践目标: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...

  8. POJ 1459&&3436

    两道比较基础的网络流题目,重点就是建图. 1458:题意就是给你一些东西它们的数据,其中一些是发电站,还有一些是用户的家里,其中还有一些是中转站.让你求最大的输送电量. 就是一道很基础的最大流题目,建 ...

  9. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

  10. idea 解决 pom.xml 中,maven仓库无法导入的问题(红线)

    只需要用另一篇文章的 maven clean install 功能就行了 idea Cannot Resolve Symbol 问题解决