首页 > 代码库 > 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微信开发之上传图片素材