微信公众平台概述
16分钟35秒自定义服务器BAE
14分钟56秒微信官方接口
15分钟03秒微信api接口分析
13分钟33秒微信6大接收接口
14分钟27秒文本回复接口
15分钟02秒简易号码簿
11分钟21秒音乐回复接口
12分钟21秒图文回复接口
12分钟38秒Lbs开发
12分钟11秒Lbs案例
15分钟58秒微信机器人
11分钟37秒响应式设计概述
11分钟29秒响应式设计详解
12分钟40秒综合案例(1)
12分钟23秒综合案例(2)
09分钟18秒综合案例(3)
13分钟22秒综合案例(4)
08分钟56秒综合案例(5)
18分钟18秒模拟真实案例
13分钟21秒扩展服务mysql
17分钟46秒自定义菜单(1)
17分钟12秒自定义菜单(2)
12分钟25秒自定义菜单(3)
18分钟03秒微信项目
18分钟38秒zhi6年前
<?php /** * wechat php test */ header('Content-type:text'); //define your token //定义TOKEN密钥 define("TOKEN", "zweixins"); //实例化微信对象 $wechatObj = new wechatCallbackapiTest(); //验证成功后注释掉valid方法 //$wechatObj->valid(); //开启自动回复功能 $wechatObj->responseMsg(); //定义类文件 class wechatCallbackapiTest { //实现valid验证方法:实现对接微信公众平台 public function valid() { //通过GET请求接收随机字符串 $echoStr = $_GET["echostr"]; //调用checkSignature方法进行用户(开发者)数字签名验证 //valid signature , option if($this->checkSignature()){ //如果成功,则返回接收到的随机字符串 echo $echoStr; //并退出 exit; } } public function responseMsg() { //get post data, May be due to the different environments //接收用户端(客户)发送过来的XML数据 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data //判断XML数据是否为空 if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); //通过simplexml进行xml解析 PHP中有两大类可以完成对XML的解析,1.PHP的Dom模型2.通过simplexml模型 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //手机端 $fromUsername = $postObj->FromUserName; //微信公众平台 $toUsername = $postObj->ToUserName; //接收用户发送的关键词 $keyword = trim($postObj->Content); //接收用户消息类型 $msgType = $postObj->MsgType; //时间戳 $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>"; //音乐发送模块 $musicTpl = "<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>"; if($msgType=='text'){ //判断用户发送关键词是否为空 if(!empty( $keyword )){ if($keyword=='智'){ //回复类型,如果为"text",代表文本类型 $msgType = "text"; //回复内容 $contentStr = "智哥你好哈"; //格式化字符串(对xml进行格式化操作,把里面相关的变量格式化成字符串) $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //把XML数据返回给手机端 echo $resultStr; }elseif($keyword=='?' || $keyword=='?'){ //回复类型,如果为"text",代表文本类型 $msgType = "text"; //回复内容 $contentStr = "你想\n问\n什么"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //把XML数据返回给手机端 echo $resultStr; }elseif($keyword=='音乐'){ //定义回复类型 $msgType = 'music'; //定义音乐标题 $title = '一生所爱'; //定义音乐描述 $desc = '《一生所爱》很好听的歌曲...'; //定义音乐链接 $url = 'https://music.163.com/outchain/player?type=2&id=25727660&auto=1&height=66'; //定义高清音乐链接 $hqurl = 'https://music.163.com/outchain/player?type=2&id=25727660&auto=1&height=66'; //格式化字符串 $resultStr = sprintf($musicTpl, $fromUsername, $toUsername, $time, $msgType, $title, $desc, $url, $hqurl); //返回XML数据到微信客户端 echo $resultStr; } } //如果用户发送的关键词为空,则返回下列字符串 else{ echo "Input something..."; } }elseif($msgType=='image'){ //回复类型,如果为"text",代表文本类型 $msgType = "text"; //回复内容 $contentStr = "你发送的是图片消息"; //格式化字符串(对xml进行格式化操作,把里面相关的变量格式化成字符串) $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //把XML数据返回给手机端 echo $resultStr; } }else { echo ""; exit; } } //定义checkSignature方法 private function checkSignature() { // you must define TOKEN by yourself //判断TOKEN密钥是否定义 if (!defined("TOKEN")) { //如果没有定义则抛出异常,返回'TOKEN is not defined!'字符串 throw new Exception('TOKEN is not defined!'); } //接收微信加密签名 $signature = $_GET["signature"]; //接收时间戳信息 $timestamp = $_GET["timestamp"]; //接收随机数 $nonce = $_GET["nonce"]; //把TOKEN常量赋值给$token变量 $token = TOKEN; //把相关参数组装为数组(密钥文件、时间戳、随机数) $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule //通过字典法进行排序 sort($tmpArr, SORT_STRING); //把排序后的数组转化为字符串 $tmpStr = implode( $tmpArr ); //通过哈希算法对字符串进行加密操作 $tmpStr = sha1( $tmpStr ); //与加密签名进行对比 if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
0