zoukankan      html  css  js  c++  java
  • 开发代码全

    index.php

    header('Content-type:text');
    define("APPID","xxxxxxxxxxxxx");
    define("APPSECRET","xxxxxxxxxxx");
    define("TOKEN","weixin");
    require("./wechat.inc.php");
    $wechat=new WeChat(APPID,APPSECRET,TOKEN);
    //var_dump($wechat->_getUserList());//获取用户列表
    //$data=array("oGdzvwDnmrgTy2DLjYvpH42j6YuE","oGdzvwDnmrgTy2DLjYvpH42j6YuE");
    //echo  $wechat->_sendAll($data,"quanfa2");
    
    var_dump($wechat->_getImagelist());
    //var_dump($wechat->_getUserInfo("oGdzvwDnmrgTy2DLjYvpH42j6YuE"));//获取用户信息
    
    //$wechat->responseMsg();//处理信息或事件
    //$wechat->_getmenu();//查询菜单 浏览器直接访问即可
    //$wechat->_delmenu();//删除菜单 浏览器直接访问即可
    /*
    $menu='{
        "button": [
            {
                "type": "click", 
                "name": "今日歌曲", 
                "key": "V1001_TODAY_MUSIC"
            }, 
            {
                "name": "菜单", 
                "sub_button": [
                    {
                        "type": "view", 
                        "name": "搜索", 
                        "url": "http://www.soso.com/"
                    }, 
                    {
                        "type": "click", 
                        "name": "赞一下我们", 
                        "key": "V1001_GOOD"
                    }, 
                    {
                        "type": "click", 
                        "name": "新闻", 
                        "key": "news"
                    }
                ]
            }
        ]
    }';
    $wechat->_addmenu($menu);
    */

    wechat.inc.php

    class WeChat {
    
        private $_appid;
        private $_appsecret;
        private $_token;
    
        //回复信息
        public function responseMsg() {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            switch ($postObj->MsgType) {
                case "event":
                    $this->_doevent($postObj);
                    break;
    
                case "text":
                    $this->_dotext($postObj);
                    break;
    
                case "image":
                    $this->_doimage($postObj);
                    break;
                default:exit;
            }
        }
    
        //接受文字信息
        public function _dotext($postObj) {
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $time = time();
            $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
            if ($keyword == "id") {//获取用户ID
                $contentStr = $fromUsername;
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
                return;
            }
            if ($keyword == "音乐") {//返回音乐一首
                $this->_domusic($postObj);
                return;
            }
            $data = "txt=" . $keyword;
            $contentStr = $this->_request("http://www.niurenqushi.com/api/simsimi/", false, "post", $data);
            $contentStr = json_decode($contentStr);
            $contentStr = $contentStr->text;
    
            $msgType = "text";
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
        }
    
        //接收图片信息
        public function _doimage($postObj) {
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->PicUrl);
            $time = time();
            $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
    
            $contentStr = $keyword;
            $msgType = "text";
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
        }
    
        //回复音乐信息
        public function _domusic($postObj) {
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->PicUrl);
            $time = time();
            $textTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[%s]]></MsgType>
    <Music>
    <Title><![CDATA[%s]]></Title>
    <Description><![CDATA[%s]]></Description>
    <MusicUrl><![CDATA[%s]]></MusicUrl>
    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
    <ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
    </Music>
    </xml>";
            $contentStr = $keyword;
            $msgType = "music";
            $Title = "yinyue";
            $Description = "卡看好听吗";
            $MusicURL = "http://www.msxzjt.com/wei/ss.mp3";
            $HQMusicUrl = "http://www.msxzjt.com/wei/ss.mp3";
            $ThumbMediaId = "iXXpDo9PRl0lZC0N-JjLi37GsiJCOPnoo4-G6LPObPA";
    
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $Title, $Description, $MusicURL, $HQMusicUrl, $ThumbMediaId);
            file_put_contents("./ss", $resultStr);
            echo $resultStr;
        }
    
        //接收事件信息
        public function _doevent($postObj) {
            //事件处理
            switch ($postObj->Event) {
                case "subscribe": //处理订阅
                    $this->_dosubscribe($postObj);
                    break;
    
                case "unsubscribe": //处理取消订阅
                    $this->_dounsubscribe($postObj);
                    break;
    
                case "CLICK"://处理菜单点击事件
                    $this->_click($postObj);
                    break;
    
                default:exit;
            }
        }
    
        //处理订阅
        public function _dosubscribe($postObj) {
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $time = time();
            $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
    
            $msgType = "text";
            $contentStr = "欢迎关注";
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            //file_put_contents("./tmp",$resultStr);
            //可以在此处将用户信息保存到数据库
            echo $resultStr;
        }
    
        //处理取消订阅
        public function _dounsubscribe($postObj) {
            //可以将用户信息删除
        }
    
        //处理菜单点击事件
        public function _click($postObj) {
            if ($postObj->EventKey == "news") {
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $time = time();
                $textTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <ArticleCount>%s</ArticleCount>
    <Articles>";
                $item = "<item>
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description>
    <PicUrl><![CDATA[%s]]></PicUrl>
    <Url><![CDATA[%s]]></Url>
    </item>";
                $end = "</xml>";
    
                $news = array(
                    array('Title' => "全系统干部职工坐火车一律都要买票", 'Description' => "针对日常监督中发现国家铁路局系统工作人员持有中国铁路总公司制发的铁路乘车证可以免费乘坐火车,以及铁路乘车证管理不严", 'PicUrl' => "http://cms-bucket.nosdn.127.net/catchpic/3/3c/3cac76845e0ca485b911a65e8d7324b7.jpg", 'Url' => "http://news.163.com/17/1202/12/D4LC3SE2000189FH.html"),
                    array('Title' => "引领推动网络强国战略", 'Description' => "行生于己,名生于人。“只有富有爱心的财富才是真正有意义的财富,只有积极承担社会责任的企业才是最有竞争力和生命力的企", 'PicUrl' => "http://cms-bucket.nosdn.127.net/catchpic/9/93/932eacb3997bd422bcd114572da0cf89.jpg", 'Url' => "http://news.163.com/17/1202/12/D4LC3AT30001875P.html")
                );
                $count = count($news);
                $list = "";
                for ($i = 0; $i < $count; $i++) {
                    $list .= sprintf($item, $news[$i]["Title"], $news[$i]["Description"], $news[$i]["PicUrl"], $news[$i]["Url"]);
                }
                $text = sprintf($textTpl, $fromUsername, $toUsername, $time, $count);
                $content = $text . $list . $end;
                file_put_contents("./tmp", $content);
                echo $content;
            }
        }
    
        public function __construct($appid, $appsecret, $token) {
            $this->_appid = $appid;
            $this->_appsecret = $appsecret;
            $this->_token = $token;
        }
    
        private function _request($curl, $https = true, $method = 'get', $data = null) {
            $ch = curl_init(); //初始化
            curl_setopt($ch, CURLOPT_URL, $curl);
            curl_setopt($ch, CURLOPT_HEADER, false); //设置不需要头信息
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //获取页面内容,但不输出
            if ($https) {
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //不做服务器认证
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //不做客户端认证
            }
    
            if ($method == 'post') {
                curl_setopt($ch, CURLOPT_POST, true); //设置请求是post方式
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //设置post请求数据
            }
    
            $str = curl_exec($ch); //执行访问
            curl_close($ch); //关闭curl,释放资源
            return $str;
        }
    
        //获取用户列表    
        public function _getUserList() {
            $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" . $this->_getAccesstoken();
            $content = $this->_request($url);
            $content = json_decode($content);
            $users = $content->data->openid;
            return $users;
        }
    
        //批量发送信息
        public function _sendAll($user, $text) {
            //如果只有一个user ,需要在 touser 加一个空用户  %s,""
            $tpl = '{
       "touser":[
        %s    
       ],
        "msgtype": "text",
        "text": { "content": "%s"}
    }';
            $users = "";
            for ($i = 0; $i < count($user); $i++) {
                $users .= '"' . $user[$i] . '"';
                if ($i < count($user) - 1) {
                    $users .= ',';
                }
            }
    
            $curl = 'https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=' . $this->_getAccesstoken();
            $data = sprintf($tpl, $users, $text);
            $res = $this->_request($curl, true, "post", $data);
            $res = json_decode($res);
            if ($res->errcode == 0) {
                return "发送成功";
            } else {
                return "发送成功";
            }
        }
    
        //获取用户基本信息(包括UnionID机制)
        public function _getUserInfo($userid) {
            $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $this->_getAccesstoken() . "&openid=" . $userid . "&lang=zh_CN";
            return $this->_request($url);
        }
    
        //添加临时素材  本地服务器需要https
        public function _addImages() {
            $curl = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $this->_getAccesstoken() . '&type=image';
            $file = "./1.jpg";
            $data["type"] = 'image';
            $data['media'] = '@' . $file;
            $result = $this->_request($curl, true, "post", $data);
            $result = json_decode($result);
            return $result->$result;
        }
    
        //获取素材列表
        public function _getImagelist() {
            $curl = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" . $this->_getAccesstoken();
            $data = '{
       "type":"image",
       "offset":1,
       "count":20
    }';
            $res = $this->_request($curl, true, "post", $data);
            $res = json_decode($res);
            return $res->item;
        }
    
        //获取Access_token
        private function _getAccesstoken() {
            $file = "./accesstoken";
            if (file_exists($file)) {
                $content = file_get_contents($file);
                $content = json_decode($content);
                if (time() - filemtime($file) < $content->expires_in) {
                    return $content->access_token;
                }
            }
            $content = $this->_request("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->_appid . "&secret=" . $this->_appsecret);
            file_put_contents($file, $content);
            $content = json_decode($content);
            return $content->access_token;
        }
    
        /* 获取ticket
          expire_seconds:二维码有效期(秒)
          type:二维码类型(临时或永久)
          scene:场景编号
         */
    
        public function _getTicket($expire_seconds = 604800, $type = "temp", $scene = 1) {
            if ($type == "temp") {
                $data = '{"expire_seconds": ' . $expire_seconds . ', "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": ' . $scene . '}}}';
                return $this->_request("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $this->_getAccesstoken(), true, "post", $data);
            } else {
                $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": ' . $scene . '}}}';
                return $this->_request("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $this->_getAccesstoken(), true, "post", $data);
            }
        }
    
        /* 通过ticket获取二维码 */
    
        public function _getQRCode($expire_seconds = 604800, $type = "temp", $scene = 1) {
            $content = json_decode($this->_getTicket($expire_seconds, $type, $scene));
            $ticket = $content->ticket;
            $image = $this->_request("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket));
            //$file="./".$type.$scene.".jpg"; //设置图片名字
            //file_put_contents($file,$content); //二维码保存到本地
            return $image;
        }
    
        /* 获取自定义菜单 */
    
        public function _getmenu() {
            $url = $this->_request("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $this->_getAccesstoken());
            return $url;
        }
    
        /* 删除自定义菜单 */
    
        public function _delmenu() {
            $url = $this->_request("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $this->_getAccesstoken());
            $content = json_decode($url);
            if ($content->errcode == 0) {
                return "删除成功";
            } else {
                return "删除失败";
            }
        }
    
        /* 添加自定义菜单 */
    
        public function _addmenu($menu) {
    
            $url = $this->_request("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $this->_getAccesstoken(), true, "post", $menu);
            $content = json_decode($url);
            if ($content->errcode == 0) {
                return "创建成功";
            } else {
                return "创建失败";
            }
        }
    
        //无弹窗授权
        public function _wshouquan($code) {
            $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->_appid . "&secret=" . $this->_appsecret . "&code=" . $code . "&grant_type=authorization_code";
            $res = $this->_request($url);
            return $res;
            //access_token    网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
            //expires_in    access_token接口调用凭证超时时间,单位(秒)
            //refresh_token    用户刷新access_token
            //openid    用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
            //scope    用户授权的作用域,使用逗号(,)分隔
        }
        //弹窗授权
        public function _yshouquan($code)
        {
            $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->_appid . "&secret=" . $this->_appsecret . "&code=" . $code . "&grant_type=authorization_code";
            $res = $this->_request($url);
            $res= json_decode($res);
            $url2="https://api.weixin.qq.com/sns/userinfo?access_token=".$res->access_token."&openid=".$res->openid."&lang=zh_CN";
            $res2 = $this->_request($url2);
            //var_dump($res2);
             return $res2;
        }
        
        
    
    }

    授权登陆

    header("Content-type: text/html; charset=utf-8"); 
    define("APPID","wxf828e5399fbf1919");
    define("APPSECRET","49cf2ca86f04a7a356da72420908809c");
    define("TOKEN","weixin");
    require("./wechat.inc.php");
    $wechat=new WeChat(APPID,APPSECRET,TOKEN);
    $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri=".urlEncode('http://www.xxx.com/wei/indexs.php')."&response_type=code&scope=snsapi_base&state=123#wechat_redirect";
    $url2="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri=".urlEncode('http://www.xxx.com/wei/indexs.php')."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
    ?>
    <a href="<?php echo $url ?>">无弹窗登陆</a> <a href="<?php echo $url2 ?>">弹窗登陆</a>

    indexs.php

    header("Content-type: text/html; charset=utf-8"); 
    define("APPID","wxf828e5399fbf1919");
    define("APPSECRET","49cf2ca86f04a7a356da72420908809c");
    define("TOKEN","weixin");
    require("./wechat.inc.php");
    $wechat=new WeChat(APPID,APPSECRET,TOKEN);
    //echo $wechat->_wshouquan($_GET['code']);
    $wechat->_yshouquan($_GET['code']);
  • 相关阅读:
    Dijit、ExtJS、jQuery UI 异同浅析
    Sencha Touch和jQuery Mobile该如何选择(转)
    用delphi开发activex打印控件
    组织机构图
    MyBatis自学(1):MyBatis概述
    MyBatis自学(4):动态SQL
    MyBatis自学(3):MyBatis逆向工程
    MyBatis自学(2):MyBatis初识
    MyBatis自学(5):延迟加载
    FileUpload上传图片提示 “GDI+中发生一般性错误”
  • 原文地址:https://www.cnblogs.com/zywf/p/7994611.html
Copyright © 2011-2022 走看看