首页 > 代码库 > tp5下php微信开发之上传图片素材
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.mamicode.com/‘http://www.imooc.com/‘>慕课网."; 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= http://www.mamicode.com/array("media"=>"root",‘form-data‘=>"@{$_SERVER[‘DOCUMENT_ROOT‘]}{$file_info[‘filename‘]}");238 // //$real_path="{$_SERVER[‘DOCUMENT_ROOT‘]}{$file_info[‘filename‘]}";//239 // //$data= http://www.mamicode.com/array("media"=>"@{$real_path}",‘form-data‘=>$file_info);//240 // $data = http://www.mamicode.com/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\pic271 // ‘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__)."\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 }
tp5下php微信开发之上传图片素材
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。