微信公众平台概述
16 Minuten35 Sekunden自定义服务器BAE
14 Minuten56 Sekunden微信官方接口
15 Minuten03 Sekunden微信api接口分析
13 Minuten33 Sekunden微信6大接收接口
14 Minuten27 Sekunden文本回复接口
15 Minuten02 Sekunden简易号码簿
11 Minuten21 Sekunden音乐回复接口
12 Minuten21 Sekunden图文回复接口
12 Minuten38 SekundenLbs开发
12 Minuten11 SekundenLbs案例
15 Minuten58 Sekunden微信机器人
11 Minuten37 Sekunden响应式设计概述
11 Minuten29 Sekunden响应式设计详解
12 Minuten40 Sekunden综合案例(1)
12 Minuten23 Sekunden综合案例(2)
09 Minuten18 Sekunden综合案例(3)
13 Minuten22 Sekunden综合案例(4)
08 Minuten56 Sekunden综合案例(5)
18 Minuten18 Sekunden模拟真实案例
13 Minuten21 Sekunden扩展服务mysql
17 Minuten46 Sekunden自定义菜单(1)
17 Minuten12 Sekunden自定义菜单(2)
12 Minuten25 Sekunden自定义菜单(3)
18 Minuten03 Sekunden微信项目
18 Minuten38 Sekundenzhi6年前
<?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