tp5下php微信开发之上传图片素材

直接源代码了,比较累不想写了,里面由之前的基本的,本部分功能在最下面的2个函数里。

  1 <?php
  2
  3 namespace app\index\controller;
  4
  5 use think\Controller;
  6
  7 //define your token
  8 define("TOKEN", "weixin");//定义token
  9
 10 Class Index extends Controller
 11 {
 12     public function index()//接收微信客户端发送的信息并回应!
 13     {
 14         //get post data, May be due to the different environments
 15         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 16           //extract post data
 17         if (!empty($postStr)){
 18           /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
 19           the best way is to check the validity of xml by yourself */
 20           libxml_disable_entity_loader(true);
 21           $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
 22           $fromUsername = $postObj->FromUserName;
 23           $toUsername = $postObj->ToUserName;
 24           $keyword = trim($postObj->Content);
 25           $time = time();
 26           $msgType = $postObj->MsgType;//消息类型
 27           $event = $postObj->Event;//时间类型,subscribe(订阅)、unsubscribe(取消订阅)
 28           $textTpl = "<xml>
 29           <ToUserName><![CDATA[%s]]></ToUserName>
 30           <FromUserName><![CDATA[%s]]></FromUserName>
 31           <CreateTime>%s</CreateTime>
 32           <MsgType><![CDATA[%s]]></MsgType>
 33           <Content><![CDATA[%s]]></Content>
 34           <FuncFlag>0</FuncFlag>
 35           </xml>";
 36           switch($msgType){
 37           case "event":
 38           if($event=="subscribe"){
 39           $contentStr = "Hi,欢迎关注168php微信开发"."\n"."回复数字‘1‘,了解相关基础教程."."\n"."回复数字‘2‘,添加技术交流群.";
 40           }
 41           break;
 42           case "text":
 43           switch($keyword){
 44           case "1":
 45           $contentStr = "相关教程:"."\n"."<a href=‘http://www.imooc.com/‘>慕课网</a>.";
 46           break;
 47           case "2":
 48           $contentStr = "技术交流群:"."\n"." QQ群:184037581.";
 49           break;
 50           case "3":
 51           $this->singleGraphic($postObj);
 52           exit;
 53           default:
 54           $contentStr = "对不起,你的内容我会稍后回复";
 55           }
 56           break;
 57           }
 58           $msgType = "text";
 59           $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
 60           echo $resultStr;
 61         }else {
 62            echo "";
 63            exit;
 64         }
 65     }
 66   private  function singleGraphic($postObj) /**多图文回复*/
 67   {
 68     $toUser = $postObj->FromUserName;
 69     $fromUser = $postObj->ToUserName;
 70     $arr = array(
 71         array(
 72           ‘title‘=>‘imooc‘,
 73           ‘description‘=>"imooc is very cool",
 74           ‘picUrl‘=>‘http://www.imooc.com/static/img/common/logo.png‘,
 75           ‘url‘=>‘http://www.imooc.com‘,
 76         ),
 77         array(
 78           ‘title‘=>‘hao123‘,
 79           ‘description‘=>"hao123 is very cool",
 80           ‘picUrl‘=>‘https://www.baidu.com/img/bdlogo.png‘,
 81           ‘url‘=>‘http://www.hao123.com‘,
 82         ),
 83         array(
 84           ‘title‘=>‘qq‘,
 85           ‘description‘=>"qq is very cool",
 86           ‘picUrl‘=>‘http://www.imooc.com/static/img/common/logo.png‘,
 87           ‘url‘=>‘http://www.qq.com‘,
 88          ),
 89       );
 90       $template = "<xml>
 91             <ToUserName><![CDATA[%s]]></ToUserName>
 92             <FromUserName><![CDATA[%s]]></FromUserName>
 93             <CreateTime>%s</CreateTime>
 94             <MsgType><![CDATA[%s]]></MsgType>
 95             <ArticleCount>".count($arr)."</ArticleCount>
 96             <Articles>";
 97       foreach($arr as $k=>$v){
 98         $template .="<item>
 99             <Title><![CDATA[".$v[‘title‘]."]]></Title>
100             <Description><![CDATA[".$v[‘description‘]."]]></Description>
101             <PicUrl><![CDATA[".$v[‘picUrl‘]."]]></PicUrl>
102             <Url><![CDATA[".$v[‘url‘]."]]></Url>
103             </item>";
104        }
105       $template .="</Articles></xml> ";
106       echo sprintf($template, $toUser, $fromUser, time(), ‘news‘);
107   }
108   private function checkSignature()//验证服务器
109   {
110        // you must define TOKEN by yourself
111       if (!defined("TOKEN")) {
112         throw new Exception(‘TOKEN is not defined!‘);
113       }
114       $signature = $_GET["signature"];
115       $timestamp = $_GET["timestamp"];
116       $nonce = $_GET["nonce"];
117       $token = TOKEN;
118       $tmpArr = array($token, $timestamp, $nonce);
119        // use SORT_STRING rule
120       sort($tmpArr, SORT_STRING);
121       $tmpStr = implode( $tmpArr );
122       $tmpStr = sha1( $tmpStr );
123       if( $tmpStr == $signature ){
124        return true;
125       }else{
126        return false;
127       }
128   }
129   public function http_curl($url,$type=‘get‘,$res=‘json‘,$arr=‘‘)//接口调用函数
130   {
131       /*
132       *$cur 接口url string
133       *$type 请求类型 string
134       $res   返回数据类型 string
135       $arr  post请求参数 string
136       */
137        //1.初始化curl
138        $ch=curl_init();
139        //2.设置curl的参数
140       // curl_setopt($ch, CURLOPT_URL, $url);
141       // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
142
143       curl_setopt_array(
144         $ch,
145         array(
146         CURLOPT_URL => $url,
147         CURLOPT_REFERER => $url,
148         CURLOPT_AUTOREFERER => true,
149         CURLOPT_RETURNTRANSFER => true,
150         CURLOPT_SSL_VERIFYPEER => false,
151         CURLOPT_SSL_VERIFYHOST => false,
152         CURLOPT_CONNECTTIMEOUT => 1,
153         CURLOPT_TIMEOUT => 30,
154         )
155       );
156
157       if($type==‘post‘){
158          curl_setopt($ch, CURLOPT_POST, 1);
159          curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
160     //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//测试
161        // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//测试
162
163       }
164       //3.采集
165       $output=curl_exec($ch);
166       //4.关闭
167       if($res==‘json‘){
168         if(curl_error($ch)){
169           return curl_error($ch);
170           curl_close($ch);
171         }else{
172             return json_decode($output,true);
173         }
174       }
175   }
176   public function getWxAccessToken()//返回access_token *session解决办法 ,存mysql或memcache都可以
177   {
178       //将access_token 存在session/cookie中
179       if(isset($_SESSION[‘access_token‘])&&isset($_SESSION[‘expire_time‘])){
180         if($_SESSION[‘access_token‘]&&$_SESSION[‘expire_time‘]>time()){
181           //如果access_token在session中并没有过期
182           return $_SESSION[‘access_token‘];
183         }
184       }
185       else{
186         //如果access_token不存在或者已经过期,重新取access_token
187         $appid=‘wx4e91a0e959b399a5‘;
188         $appsecret=‘46cf302c8ff3585026682f6ae603da94‘;
189         $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
190         $res=$this->http_curl($url,‘get‘,‘json‘);
191         $access_token=$res[‘access_token‘];
192         $_SESSION[‘access_token‘]=$access_token;
193         var_dump($_SESSION[‘access_token‘]);
194         $_SESSION[‘expire_time‘]=time()+7000;
195         return $access_token;
196       }
197   }
198   public function definedItem()//创建微信公众号底部菜单
199   {
200        //目前微信接口的调用方式都是通过curl post/get
201       header(‘content-type:text/html;charset=utf-8‘);
202       echo $access_token=$this->getWxAccessToken();
203       echo $url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
204       $postArr=array(
205          ‘button‘=>array(
206              array(
207                 ‘name‘=>urlencode(‘科技力量‘),
208                 ‘type‘=>‘view‘,
209                  ‘url‘=>‘https://m.eqxiu.com/s/4Z7xqPHv‘,
210              ),//第一个一级菜单
211              array(
212                 ‘name‘=>urlencode(‘公司官网‘),
213                 ‘type‘=>‘view‘,
214                 ‘url‘=>‘http://m.yztsaas.com‘,
215              ),//第二个一级菜单
216              array(
217                 ‘name‘=>urlencode(‘下载APP‘),
218                 ‘type‘=>‘view‘,
219                 ‘url‘=>‘http://qrt.huilinchina.com/Home/Index/download‘,
220              ),//第三个一级菜单
221
222       ));
223       $postJson=urldecode(json_encode($postArr));//数组转换为json
224       //var_dump($postJson);
225       $res=$this->http_curl($url,‘post‘,‘json‘,$postJson);
226       var_dump($res);
227   }
228     // public function add_material($file_info)//上传图片素材方法,还有问题
229     // {
230     //     $access_token=$this->getWxAccessToken();
231     //     $url="https://api.weixin.qq.com/cgi-bin/media/uploding?access_token={$access_token}";
232     //     $ch1 = curl_init();
233     //     $timeout = 5;
234     //     //$real_path="{$_SERVER[‘DOCUMENT_ROOT‘]}{$file_info[‘filename‘]}";
235     // //$real_path=$_SERVER[‘DOCUMENT_ROOT‘].$file_info[‘filename‘];
236     // //$real_path="http://wexin.bsgrj.com".$file_info[‘filename‘];
237     //     //$data= array("media"=>"root",‘form-data‘=>"@{$_SERVER[‘DOCUMENT_ROOT‘]}{$file_info[‘filename‘]}");
238     // //$real_path="{$_SERVER[‘DOCUMENT_ROOT‘]}{$file_info[‘filename‘]}";//
239     //     //$data= array("media"=>"@{$real_path}",‘form-data‘=>$file_info);//
240     // $data = array (
241     //       "buffer" => "@E:/phpStudy/WWW/web1/wexin/pic/Huilin.jpg"
242     //     );
243     //     curl_setopt ( $ch1, CURLOPT_URL, $url );
244     //     curl_setopt ( $ch1, CURLOPT_POST, 1 );
245     //     curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
246     //     curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );
247     //     curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
248     //     curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
249     //     curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );
250
251     //     $result = curl_exec ( $ch1 );
252     // echo ‘</hr>‘;
253     // var_dump($result);
254     //     //curl_close ( $ch1 );
255     //     if(curl_error($ch1)){
256     //    echo ‘</hr>‘;
257     //    echo curl_error($ch1);
258     //    curl_close ( $ch1 );
259     //    // return $result[‘media_id‘];
260     //     }else {
261     //  echo ‘</hr>‘;
262     //          $result=json_decode($result,true);
263     //    var_dump($result);
264     //     }
265     //  }
266     //  public function use_material()//调用上传素材的方法
267     //  {
268     //     $file_info=array(
269     //                 // ‘filename’=>’/images/1.png’, //国片相对于网站根目录的路径
270     //                 ‘filename‘=>‘/wexin/pic/Huilin.jpg‘, //\wexin\public\static\pic
271     //                 ‘content-type‘=>‘image/jpg‘, //文件类型
272     //                 ‘filelength‘=>‘21011‘ //图文大小
273     //                 );
274     //     $this->add_material($file_info);
275     //  }
276          //test3
277   public function upload()//调用上传素材的方法(可用)
278   {  $access_token=$this->getWxAccessToken();
279      $type="image";
280      $filepath=dirname(__FILE__)."\pic\Huilin.jpg";
281      var_dump($filepath);
282      $filedata=array("media"=>"@".$filepath);
283      var_dump($filedata);
284      $url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";
285      $result=$this->https_request($url,$filedata);
286      var_dump($result);
287   }
288
289   function https_request($url,$data=null)//上传图片素材方法(可用)
290   {
291          $curl=curl_init();
292          curl_setopt($curl,CURLOPT_URL, $url);
293          curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
294          curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
295          if(!empty($data)){
296             curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
297             curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
298          }
299          curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
300          $output=curl_exec($curl);
301          if(curl_error($curl)){
302          curl_error($curl);
303          curl_close($curl);
304          }else{
305             return $output;
306          }
307   }
308
309 }
时间: 2024-10-10 18:04:15

tp5下php微信开发之上传图片素材的相关文章

微信开发上传素材工具类

/**     * 上传素材     * @author matao     * @date 2016年7月20日     */    public static String uploadMedia(String uploadMediaUrl, MultipartFile file) throws IOException    {        String result = null; HttpURLConnection con = (HttpURLConnection) new URL(u

微信开发-素材/消息管理接口

开始 本文是 微信公众号开发者模式介绍及接入 的后续,如没看过前文的话,可能看本文会有些懵逼.本文主要介绍微信公众平台的素材.消息管理接口的开发.由于个人的订阅号是没有大多数接口的权限的,所以我们需要使用微信官方提供的测试号来进行开发.测试号的申请可参考下文: 使用微信测试账号对网页进行授权 图文消息 本小节我们来开发回复图文消息的功能,官方文档地址如下: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543 回复图文

Java企业微信开发_09_素材管理之下载微信临时素材到本地服务器

一.本节要点 1.获取临时素材接口 请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID 2.获取临时素材接口的返回结果 企业微信官方开发文档中说明的返回结果如下: 若你以为这就是返回结果,然后跟之前一样,先访问接口,从http连接的输入流中的获取回结果的文本内容,你会发现你接收到的结果是一堆乱码. 这是为何? 以图片为例,此处千

Java企业微信开发_07_素材管理之上传本地临时素材文件

一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要设置enctype="multipart/form-data" (http://blog.csdn.net/mazhibinit/article/details/49667511) 3.上传本地临时素材到微信服务器的流程 (1)建立与微信服务器的网络连接 (2)从连接中获取输出流(写入微信

夺命雷公狗---微信开发01----测试下回访消息

在微信开发的同时记得要看下php是否开启了mcrypt扩展噢 开干,验证后通过index.php进行验证 <?php /** * wechat php test */ //define your token define("TOKEN", "twgdh"); $wechatObj = new wechatCallbackapiTest(); //$wechatObj->valid(); $wechatObj->responseMsg(); clas

Java企业微信开发_08_JSSDK多图上传

一.本节要点 1.1可信域名 所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),可在企业微信的管理后台“我的应用”里设置应用可信域名.这个域名必须要通过ICP备案,不然jssdk会配置失败 1.2JS-SDK使用权限签名算法 1.2.1 签名生成规则如下: (1)参与签名的字段包括: noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) . (2)对所有待签名参数按照字段名的ASCII

Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先设置一下授权回调域.这里瞬间想到之前做JSSDK的时候,也设置过一个域名.二者本质上都是设置可信域名. 当用户授权完毕之后,请求将重定向到此域名(或者子域名)下的执行者(jsp页面或者servlet等).如何设置授权回调域,请见第二节. 1.2 获取Code https://open.weixin.

夺命雷公狗---微信开发23----客服消息接口基础和推送文本

我们这边课程里面一共用到了三个文件,分别是WeChat.class.php和common.php以及index.php 我们在写这个功能之前也要学会查手册,手册我们可以在微信开发这里找到,如下所示: 点击进去后我们将会看到客服接口,我们可以点击下进去看看里面有什么动动 这里有一个发送文本消息的,我们点击进去看下 这里很明显就看到文本消息是通过一个json数据来进行实现的,废话不多说,开工 这里我们先来写一个WeChat.php的文件,这里作用主要适用于封装一个CURL上传类的,代码如下所示: <

Java企业微信开发_04_自定义菜单

一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 这里需要格外注意的是,企业微信中请求包的数据是Json字符串格式的,而不是xml格式.关于json序列化的问题请参考上一节   Java企业微信开发_03_通讯录同步 2.创建菜单的接口 public static String create_menu_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS