700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信订阅号 获取用户基本信息 登录及 php

微信订阅号 获取用户基本信息 登录及 php

时间:2023-01-06 22:17:21

相关推荐

微信订阅号 获取用户基本信息 登录及 php

<?php//echo file_get_contents("https://api./cgi-bin/token?grant_type=client_credential&appid=wx2233338996&secret=67911111111111111111111146fb11113");//die;$testObj = new Test();$_SESSION = '';if($testObj->checkSignature()){if(!empty($_SESSION['openid'])){$uinfo = file_get_contents("https://api./cgi-bin/user/info?access_token=hwu2rSeVQ1222222222222222222222226nEojpAbiqtY6hIB_fvEm333333333333337dbeRhL-V9hnzzLWwhXLnrTNokyROJiACAEBW&openid=".$_SESSION['openid']);echo $uinfo;}else{//session为空的话$testObj->responseMsg();}}else{// $testObj->valid();}class Test{/*** 绑定url、token信息*/public function valid(){$echoStr = $_GET["echostr"];if ($this->checkSignature()) {echo $echoStr;}exit();}/*** 检查签名,确保请求是从微信发过来的*/public function checkSignature(){//获得参数 signature nonce token timestamp echostr$nonce = $_GET['nonce'];$token = 'dxxxxxxxxx';$timestamp = $_GET['timestamp'];$echostr = $_GET['echostr'];$signature = $_GET['signature'];//形成数组,然后按字典序排序$array = array();$array = array($nonce, $timestamp, $token);sort($array);//拼接成字符串,sha1加密 ,然后与signature进行校验$str = sha1( implode( $array ) );if( $str == $signature){return true;}else{return false;}}/*** 接收消息,并自动发送响应信息*/public function responseMsg(){//验证签名if ($this->checkSignature()){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];// $this->log_request_info();//提取post数据if (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;//发送人$toUsername = $postObj->ToUserName;//接收人$MsgType = $postObj->MsgType;//消息类型$MsgId = $postObj->MsgId;//消息id$time = time();//当前时间做为回复时间//如果是文本消息(表情属于文本信息)if($MsgType == 'text'){$content = trim($postObj->Content);//消息内容if(!empty( $content )){//如果文本内容是图文,则回复图文信息,否则回复文本信息if($content == "图文"){//回复图文消息,ArticleCount图文消息个数,多条图文消息信息,默认第一个item为大图$ArticleCount = 2;$newsTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><ArticleCount>%s</ArticleCount><Articles><item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item><item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item></Articles></xml>";$resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time, 'news',$ArticleCount,'我是图文信息','我是描述信息','/DocCenterService/image?photo_id=236','','正式开通上线','描述2','/ac/skins/img/upload/img/1116/48171384568991509.png','');echo $resultStr;$this->log($resultStr);}else{//回复文本信息$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 = '你发送的信息是:接收人:'.$toUsername.',发送人:'.$fromUsername.',消息类型:'.$MsgType.',消息内容:'.$content.' ';$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);echo $resultStr;$this->log($resultStr);}}else{echo "Input something...";$this->log($resultStr);}//如果是图片消息}elseif ($MsgType == 'image'){$MediaId = $postObj->MediaId;//图片消息媒体id,可以调用多媒体文件下载接口拉取数据。$imageTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";$resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $MsgType, $MediaId);echo $resultStr;$this->log("自动响应图片信息");$this->log($resultStr);//如果是视频}else if($MsgType == 'video'){$MediaId = $postObj->MediaId;//视频消息媒体id,可以调用多媒体文件下载接口拉取数据。$ThumbMediaId = $postObj->ThumbMediaId;//视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。$videoTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Video><MediaId><![CDATA[%s]]></MediaId><ThumbMediaId><![CDATA[%s]]></ThumbMediaId><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description></Video></xml>";$resultStr = sprintf($videoTpl, $fromUsername, $toUsername, $time, $MsgType, $MediaId,$ThumbMediaId,'我是标题','我是描述');echo $resultStr;$this->log("自动响应视频信息".$ThumbMediaId);$this->log($resultStr);//如果是地理位置}else if($MsgType == 'location'){$Location_X = $postObj->Location_X;//维度$Location_Y = $postObj->Location_Y;//经度$Scale = $postObj->Scale;//地图缩放大小$Label = $postObj->Label;//地里位置信息//回复文本信息$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 = '经度:'.$Location_Y.',维度:'.$Location_X.',地图缩放大小'.$Scale.',地理位置信息:'.$Label;$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;$this->log($resultStr);//如果是事件}else if($MsgType == 'event'){$Event = $postObj->Event;//subscribe(关注,也叫订阅)if($Event == 'subscribe'){$EventKey = $postObj->EventKey;//事件KEY值,qrscene_为前缀,后面为二维码的参数值//未关注时,扫描二维码if(!empty($EventKey)){$Ticket = $postObj->Ticket;//二维码的ticket,可用来换取二维码图片$this->log($fromUsername.'扫描二维码关注!EventKey='.$EventKey.',Ticket='.$Ticket);}else{$this->log($fromUsername.'关注我了!');}//unsubscribe(取消关注)}elseif ($Event == 'unsubscribe'){$this->log($fromUsername.'取消关注我了!');//已关注时,扫描二维码事件}elseif($Event == 'SCAN' || $Event == 'scan'){$EventKey = $postObj->EventKey;//事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id$Ticket = $postObj->Ticket;//二维码的ticket,可用来换取二维码图片$this->log($fromUsername.'关注我了!EventKey='.$EventKey.',Ticket='.$Ticket);//菜单点击事件}elseif($Event == 'CLICK'){$EventKey = $postObj->EventKey;//事件KEY值,与自定义菜单接口中KEY值对应//回复文本信息$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>";// $uinfo = file_get_contents("https://api./cgi-bin/user/info?access_token=hwu2rSeVQay064G3e6k1111111111111111AbiqtY6hIB_fv111111111111111117dbeRhL-V9hnzzLWwhXLnrTNokyROJiACAEBW&openid=".$postObj->FromUserName);// $uinfo = '';$_SESSION['openid'] = $postObj->FromUserName;$contentStr = '你点击了菜单,菜单项key='.$EventKey.'and 你的openid是'.$postObj->FromUserName;$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);echo $resultStr;$this->log($resultStr);//其他事件类型}else{$this->log('事件类型:'.$Event);}//其他消息类型,链接、语音等}else{//回复文本信息$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 = '消息类型:'.$MsgType.'我们还没做处理。。。。【】';$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);echo $resultStr;$this->log($resultStr);}}else {echo "";exit;}}else{$this->log("验证签名未通过!");}}/*** 记录请求信息*/function log_request_info() {$post = '';foreach($_POST as $key => $value) {$post = $post.$key.' : '.$value.' , ';}$get = '';foreach($_GET as $key => $value) {$get = $get.$key.' : '.$value.' , ';}$this->log("get信息:".$get);$this->log("post信息:".$post);}/*** 记录日志* @param $str* @param $mode*/function log($str){echo $str;die;$mode='a';//追加方式写$file = "log.txt";$oldmask = @umask(0);$fp = @fopen($file,$mode);@flock($fp, 3);if(!$fp){Return false;}else{@fwrite($fp,$str);@fclose($fp);@umask($oldmask);Return true;}}}?>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。