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

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

 1 <?php 2  3 namespace appindexcontroller; 4  5 use thinkController; 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 yourself111 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 rule120 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 string133  *$type 请求类型 string134  $res 返回数据类型 string135  $arr post请求参数 string136 */137 //1.初始化curl138 $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_token187 $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/get201 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));//数组转换为json224  //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‘, //wexinpublicstaticpic271  // ‘content-type‘=>‘image/jpg‘, //文件类型272  // ‘filelength‘=>‘21011‘ //图文大小273  // );274  // $this->add_material($file_info);275  // }276  //test3277 public function upload()//调用上传素材的方法(可用)278 { $access_token=$this->getWxAccessToken();279 $type="image";280 $filepath=dirname(__FILE__)."picHuilin.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 }

 

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

相关文章