• 微信公账号开发--恢复1,返回推荐宣传二维码


    <?php
    
    header('Content-type:text');
    
    define("TOKEN", "jiesen365");
    $wechatObj = new wechatCallbackapiTest();
    if (!isset($_GET['echostr'])) {
        $wechatObj->responseMsg();
    }else{
        $wechatObj->valid();
    }
    
    class wechatCallbackapiTest
    {
        static $qrcodeid = '';
        //验证签名
        public function valid()
        {
            $echoStr = $_GET["echostr"];
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode($tmpArr);
            $tmpStr = sha1($tmpStr);
            if ($tmpStr == $signature) {
                echo $echoStr;
                exit;
            }
        }
    
        //响应消息
        public function responseMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            if (!empty($postStr)) {
                $this->logger("R 
    " . $postStr);
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $RX_TYPE = trim($postObj->MsgType);
                $form = trim($postObj->FromUserName); //$object->FromUserName, $object->ToUserName, time());
                $to = trim($postObj->ToUserName);
                $datas = trim($postObj->Content);
    
                $xml = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                    </xml>";
                $imageurl = "yjH_kDDMGcWnWzuW_aG0Dqc9P5aNf2jHZfV4r3pSLUET8-jHmVOkBNr_FpgcOxvT";
    //            $imageurl = $postObj->MediaId;
                $xml_pic = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[image]]></MsgType>
        <Image>
        <MediaId><![CDATA[%s]]></MediaId>
        </Image>
    </xml>";
    
                if (strstr($datas, '1')) {
                    $this->get_qrcode($form); //获取二维码
    //                $this->get_user_info($form); //获取用户信息(头像、姓名、性别)
    //                $this->get_userid($form); //获取用户userid
                    $result = sprintf($xml_pic, $form, $to, time(), $this->qrcodeid);
                    $this->logger("T 
    " . $result);
                    echo $result;
                }else if($RX_TYPE == 'event'){
    
                }else{
                    $this->get_user_info($form);
                    $result = sprintf($xml, $form, $to, time(), "你好呀~");
                    $this->logger("T 
    " . $result);
                    echo $result;
                }
    
            }else {
                echo "";
                exit;
            }
        }
    
        //从系统中获取用户userid
        public function get_userid($openid){
            define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
            include PHPCMS_PATH.'/../phpcms/base.php';
    
            $third_party = pc_base::load_model('third_party_model');
            $wfinfo = $third_party->get_one(array('wid'=>$openid),'userid');
            file_put_contents('userid.txt',$openid.'+++'.$wfinfo[userid]);
        }
    
    
        //获取二维码
        public function get_qrcode($form){
            $appid = "wxbbae0ae85ac85399";
            $appsecret = "7252f9a7d06601e6f57d7378b36672f2";
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
    
            $output = $this->https_request($url);
            $jsoninfo = json_decode($output, true);
            $access_token = $jsoninfo["access_token"];
    
            //------------以上为获取access_token----------------
            $qrcode = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 10000}}}';
            $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token";
            $result = $this->https_request($url,$qrcode);
            $jsoninfo = json_decode($result,true);
            $ticket = $jsoninfo['ticket'];  //获取到了ticket
    
            //通过ticket换取二维码
            $ticket=urlencode($ticket);
            $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={$ticket}";
            // $file= file_put_contents('qrcode.txt',$url);
            $this->addwater($form,$url,$access_token);
    
        }
        //下载临时二维码图片到本地并将其以水印形式加到背景图片上
        public function addwater($form,$url,$access_token){
            $filename=$form.'.jpg';
    
            $imageInfo=$this->downLoadImage($url);
            $local_file=fopen($filename,'w');
    
            if(false !==$local_file){
                if(false!==fwrite($local_file,$imageInfo['body'])){  //生成了二维码以openid为文件名保存在当前目录下
                    fclose($local_file);
                }
            }
    
    
            $im=imagecreatefromjpeg($filename);  //文件或url创建一个新图像,创建文件句柄返回提供使用
    
            $maxwidth=180;
            $maxheight=200;
            $name='thumb_'.$form;
            $filetype='.jpg';
    
            $filename_thumb = $this->resizeImage($im,$maxwidth,$maxheight,$name,$filetype);//将图片进行等比缩放
    
            $dst_path='dst.png';//目标图片(背景图片)
            $src_path=$filename_thumb;//水印图片(二维码)
            $new_path='qrcode/'.$form;//专属海报(最后生成的图片)
    
            $this->addWM($dst_path,$src_path,$new_path,$left=280,$top=820);  //将二维码已水印形式加到图片上
    
            @unlink($filename);
            @unlink($filename_thumb);
    
            $this->addpic($form,$access_token);
        }
    
        public function addpic($form,$access_token){
            //下载头像图片到本地并以水印形式加到背景图片上
            $filename="photo_".$form.".jpg";
    
            $user_photo = $this->get_user_info($form);
            $imageInfo=$this->downLoadImage($user_photo['headimgurl']);
            $local_file=fopen($filename,'w');
    
            if(false !==$local_file){
                if(false!==fwrite($local_file,$imageInfo['body'])){
                    fclose($local_file);
                }
            }
    
            $im=imagecreatefromjpeg($filename);
    
            $maxwidth=150;
            $maxheight=150;
            $name='thumb_photo_'.$form;
            $filetype='.png';
    
            $filename_thumb = $this->resizeImage($im,$maxwidth,$maxheight,$name,$filetype);
            $dst_path='qrcode/'.$form.'.png';//目标图片
            $src_path=$filename_thumb;//水印图片
            $new_path='qrcode/'.$form;//专属海报
    
            $this->addWM($dst_path,$src_path,$new_path,$left=85,$top=710);
    
            @unlink($filename);
            @unlink($filename_thumb);
    
            //以下为上传临时素材(上传生成的二维码成临时素材)
            $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$access_token."&type=image";
            $josn = array('media' => '@' . realpath($dst_path));
            $res = $this->curl_post($url,$josn);
    
            //file_put_contents('upload_qrcode.txt',$res);
            $this->qrcodeid =  $res; //返回给用户二维码的素材id
    
        }
    
    
        //获取用户信息(姓名、性别、头像...)
         public function get_user_info($openid){
            $appid = "wxbbae0ae85ac85399";
            $appsecret = "7252f9a7d06601e6f57d7378b36672f2";
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
    
            $output = $this->https_request($url);
            $jsoninfo = json_decode($output, true);
            $access_token = $jsoninfo["access_token"];
    
            $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";
            $output = $this->https_request($url);
    //        file_put_contents('user_info.txt',$output); //用json信息
             return json_decode($output,true);
        }
    
        public function https_request($url,$data = null){
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl);
            curl_close($curl);
            return $output;
        }
    
        //下载生成的二维码图片到本地
        function downLoadImage($url){
            $ch=curl_init($url);
            curl_setopt($ch,CURLOPT_HEADER,0);
            curl_setopt($ch,CURLOPT_NOBODY,0);//只取body头
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            $package=curl_exec($ch);
            $httpinfo=curl_getinfo($ch);
            curl_close($ch);
            return array_merge(array('body'=>$package),array('header'=>$httpinfo));
        }
    
        //将图片进行等比缩放
        function resizeImage($im,$maxwidth,$maxheight,$name,$filetype)
        {
            $pic_width = imagesx($im);
            $pic_height = imagesy($im);
    
            if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight))
            {
                if($maxwidth && $pic_width>$maxwidth)
                {
                    $widthratio = $maxwidth/$pic_width;
                    $resizewidth_tag = true;
                }
    
                if($maxheight && $pic_height>$maxheight)
                {
                    $heightratio = $maxheight/$pic_height;
                    $resizeheight_tag = true;
                }
    
                if($resizewidth_tag && $resizeheight_tag)
                {
                    if($widthratio<$heightratio)
                        $ratio = $widthratio;
                    else
                        $ratio = $heightratio;
                }
    
                if($resizewidth_tag && !$resizeheight_tag)
                    $ratio = $widthratio;
                if($resizeheight_tag && !$resizewidth_tag)
                    $ratio = $heightratio;
    
                $newwidth = $pic_width * $ratio;
                $newheight = $pic_height * $ratio;
    
                if(function_exists("imagecopyresampled"))
                {
                    $newim = imagecreatetruecolor($newwidth,$newheight);
                    imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
                }
                else
                {
                    $newim = imagecreate($newwidth,$newheight);
                    imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
                }
    
                $name = $name.$filetype;
                imagejpeg($newim,$name);
                imagedestroy($newim);
            }
            else
            {
                $name = $name.$filetype;
                imagejpeg($im,$name);
            }
            return $name;
        }
    
        //将二维码以水印方式加到背景图片上
        function addWM($dst_path,$src_path,$new_path,$left='',$top='')
        {
            $dst = imagecreatefromstring(file_get_contents($dst_path));
            $src = imagecreatefromstring(file_get_contents($src_path));
            if(!$left){
                $left=50;
            }
            if(!$top){
                $top=50;
            }
            //获取水印图片的宽高
            list($src_w, $src_h) = getimagesize($src_path);
    
            //将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果
    //        imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 50);
    
            //直接将水印图片加到目标图片上
            imagecopy($dst, $src, $left, $top, 0, 0, $src_w, $src_h);
    
            //有header输出图片,无header保存图片
            list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
            switch ($dst_type){
                case 1://GIF
    //                header('Content-Type: image/gif');
                    imagegif($dst,$new_path.".gif");
                    break;
                case 2://JPG
    //                header('Content-Type: image/jpeg');
                    imagejpeg($dst,$new_path.".jpg");
                    break;
                case 3://PNG
    //                header('Content-Type: image/png');
                    imagepng($dst,$new_path.".png");
                    break;
                default:
                    break;
            }
    
            imagedestroy($dst);
            imagedestroy($src);
        }
    
    //curl实现post请求
        function curl_post($url, $data = null)
        {
            //创建一个新cURL资源
            $curl = curl_init();
            //设置URL和相应的选项
            curl_setopt($curl, CURLOPT_URL, $url);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            //执行curl,抓取URL并把它传递给浏览器
            $output = curl_exec($curl);
            //关闭cURL资源,并且释放系统资源
            curl_close($curl);
            $output = json_decode($output,true);
            return $output['media_id'];
        }
    
    
        //日志记录
        private function logger($log_content)
        {
            if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
                $max_size = 1000000;
                $log_filename = "log.xml";
                if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
                file_put_contents($log_filename, date('Y-m-d H:i:s')." ".$log_content."
    ", FILE_APPEND);
            }
        }
    }
    ?>
  • 相关阅读:
    动态规划 简单的分割问题的解决方案钢棒
    SICP 1.20经验
    辛星一起了解下后续PHP性能功能
    汽车之家购买价格PC真正的原因阿拉丁
    可怜,的分母。
    [ACM] poj 1064 Cable master (二进制搜索)
    从Access创建Sqlite数据库
    变化的阅读程序猿自学习
    ArcEngine载入中SDE问题栅格数据
    pinyin4j新手教程
  • 原文地址:https://www.cnblogs.com/isungge/p/5816743.html
Copyright © 2020-2023  润新知