// +---------------------------------------------------------------------- namespace Sdk\Controller; use Think\Controller; use Com\Wechat; use Com\WechatAuth; class WechatController extends Controller{ /** * 微信消息接口入口 * 所有发送到微信的消息都会推送到该操作 * 所以,微信公众平台后台填写的api地址则为该操作的访问地址 */ public function index($id = ''){ //调试 try{ $appid = C('wechat.appid'); //AppID(应用ID) $token = C('wechat.token'); //微信后台填写的TOKEN $crypt = C('wechat.key'); //消息加密KEY(EncodingAESKey) $secret= C('wechat.appsecret'); /* 加载微信SDK */ $wechat = new Wechat($token, $appid, $crypt); /* 获取请求信息 */ $data = $wechat->request(); if($data && is_array($data)){ //执行Demo $this->demo($wechat, $data); //记录微信推送过来的数据 file_put_contents('./data.json', $wechatauth->accessToken); //$this->wechat_menu(); } } catch(\Exception $e){ file_put_contents('./error.json', json_encode($e->getMessage())); } } private function set_admin_openid($data){ $openidmap['id']=substr($data['EventKey'],0,-3); $type=substr($data['EventKey'],-1); // wite_text($type,dirname(__FILE__).'/pc11.txt'); $openiddata['admin_openid']=$data['FromUserName']; $openiddata['openid_sign']=$data['EventKey']; if($type!=0){ $admindata=M('ucenter_member')->where($openidmap)->find(); } if($type==1){ if($admindata['admin_openid']!=''){ return date('Y-m-d H:i:s').' 请先解绑微信'; }elseif($admindata['openid_sign']==$data['EventKey']){ return date('Y-m-d H:i:s').' 页面错误,请刷新页面重试'; }else{ $opres=M('ucenter_member')->where($openidmap)->save($openiddata); if($opres){ return date('Y-m-d H:i:s').' 微信绑定成功'; }else{ return date('Y-m-d H:i:s').' 微信绑定失败'; } } }elseif($type==2){ if($admindata['admin_openid']!=$data['FromUserName']){ return date('Y-m-d H:i:s').' 对不起,你没有权限'; } if($admindata['admin_openid']==''){ return date('Y-m-d H:i:s').' 该管理员账号暂未绑定微信'; }elseif($admindata['openid_sign']==$data['EventKey']){ return date('Y-m-d H:i:s').' 页面错误,请刷新页面重试'; }else{ $opres=M('ucenter_member')->where($openidmap)->setField("admin_openid",''); $opres=M('ucenter_member')->where($openidmap)->setField("openid_sign",$data['EventKey']); if($opres){ return date('Y-m-d H:i:s').' 微信解绑成功'; }else{ return date('Y-m-d H:i:s').' 微信解绑失败'; } } }elseif($type==0){ $qrop['uid']=$data['FromUserName']; $qrop['token']=$data['EventKey']; $qrop['status']=1; $qrop['create_time']=time(); M('qr_login','tab_')->add($qrop); // $re=M('qr_login','tab_')->getlastsql(); // wite_text($re,dirname(__FILE__).'/pc11.txt'); R('Media/QrLogin/send',array('token'=>$data['EventKey'])); return date('Y-m-d H:i:s').' 管理员扫码登录'; }else{ return date('Y-m-d H:i:s').' 数据错误,请刷新页面重试'; } } /** * DEMO * @param Object $wechat Wechat对象 * @param array $data 接受到微信推送的消息 */ private function demo($wechat, $data){ $wechatname=C('wechat.wechatname'); switch ($data['MsgType']) { case Wechat::MSG_TYPE_EVENT: $msg = C('wechat.message'); switch ($data['Event']) { case Wechat::MSG_EVENT_SUBSCRIBE: if(strstr($data['EventKey'],'qrscene_')){//扫描带参数的二维码 绑定用户使用yyh $data['EventKey']=str_replace('qrscene_', '', $data['EventKey']); $opentt=$this->set_admin_openid($data); $wechat->replyText($opentt); }else{ $wechat->replyText($data['EventKey']); } break; case Wechat::MSG_EVENT_UNSUBSCRIBE: //取消关注,记录日志 break; case Wechat::MSG_EVENT_SCAN: $opentt=$this->set_admin_openid($data); $wechat->replyText($opentt); break; default: $wechat->replyText($msg['default_msg']); break; } break; case Wechat::MSG_TYPE_TEXT: switch ($data['Content']) { case '图文': $wechat->replyNewsOnce( "全民创业蒙的就是你,来一盆冷水吧!", "全民创业已经如火如荼,然而创业是一个非常自我的过程,它是一种生活方式的选择。从外部的推动有助于提高创业的存活率,但是未必能够提高创新的成功率。第一次创业的人,至少90%以上都会以失败而告终。创业成功者大部分年龄在30岁到38岁之间,而且创业成功最高的概率是第三次创业。", "http://www.topthink.com/topic/11991.html", "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg" ); //回复单条图文消息 break; case '多图文': $news = array( "全民创业蒙的就是你,来一盆冷水吧!", "全民创业已经如火如荼,然而创业是一个非常自我的过程,它是一种生活方式的选择。从外部的推动有助于提高创业的存活率,但是未必能够提高创新的成功率。第一次创业的人,至少90%以上都会以失败而告终。创业成功者大部分年龄在30岁到38岁之间,而且创业成功最高的概率是第三次创业。", "http://www.topthink.com/topic/11991.html", "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg" ); //回复单条图文消息 $wechat->replyNews($news, $news, $news, $news, $news); break; default: $map['game_name']=array("like","%".$data['Content']."%"); $game = M("game","tab_") ->field("tab_game.game_name,tab_game.introduction,tab_game.icon,tab_game_set.login_notify_url") ->join("tab_game_set on tab_game.id=tab_game_set.id") ->where($map) ->find(); if(!empty($game)){ $picture = M('Picture')->where(array('status'=>1))->getById($game['icon']); $picture['path'] = $_SERVER['HTTP_HOST'].$picture['path']; $_key = 'jCTVfkOz2nQPLBwYM2f1as4MtFTe9wm9';//游戏放提供 $data['uid'] = $uid;//uid同步平台uid唯一值, $data['email'] = "xx";//同步平台账号 $data['t'] = time(); $data['sign'] = md5($data['uid']."&".$data['email']."&".$data['t']."&".$_key); $wechat->replyNewsOnce( $game['game_name'], $game['introduction'], $game['login_notify_url']."?".http_build_query($data), "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg" ); //回复单条图文消息 } $wechat->replyText("欢迎访问".$wechatname."公众平台!您输入的内容是:{$data['Content']}"); break; } break; default: # code... break; } } /** * 资源文件上传方法 * @param string $type 上传的资源类型 * @return string 媒体资源ID */ private function upload($type){ $appid = C('wechat.appid'); $appsecret = C('wechat.appsecret'); $token = session("token"); if($token){ $auth = new WechatAuth($appid, $appsecret, $token); } else { $auth = new WechatAuth($appid, $appsecret); $token = $auth->getAccessToken(); session(array('expire' => $token['expires_in'])); session("token", $token['access_token']); } switch ($type) { case 'image': $filename = './Public/image.jpg'; $media = $auth->materialAddMaterial($filename, $type); break; case 'voice': $filename = './Public/voice.mp3'; $media = $auth->materialAddMaterial($filename, $type); break; case 'video': $filename = './Public/video.mp4'; $discription = array('title' => '视频标题', 'introduction' => '视频描述'); $media = $auth->materialAddMaterial($filename, $type, $discription); break; case 'thumb': $filename = './Public/music.jpg'; $media = $auth->materialAddMaterial($filename, $type); break; default: return ''; } if($media["errcode"] == 42001){ //access_token expired session("token", null); $this->upload($type); } return $media['media_id']; } /** *微信 菜单设置 */ private function wechat_menu(){ $appid = C('wechat.appid'); $appsecret = C('wechat.appsecret'); $token = session("token"); if($token){ $auth = new WechatAuth($appid, $appsecret, $token); } else { $auth = new WechatAuth($appid, $appsecret); $token = $auth->getAccessToken(); session(array('expire' => $token['expires_in'])); session("token", $token['access_token']); } $newmenu = array( array('type'=>'click','name'=>'测试菜单','key'=>'MENU_KEY_NEWS'), array('type'=>'view','name'=>'我要搜索','url'=>'http://www.baidu.com'), array('name'=>'菜单',"sub_button"=>array( array('type'=>'click','name'=>'最新消息','key'=>'MENU_KEY_NEWS'), array('type'=>'view','name'=>'我要搜索','url'=>'http://www.baidu.com'), )), ); $data = $auth->menuCreate($newmenu); file_put_contents(dirname(__FILE__).'/data.json', json_encode($data)); } }