微信公账号开发--恢复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);
        }
    }
}
?>
原文地址:https://www.cnblogs.com/isungge/p/5816743.html