WeChat 공개 플랫폼 개요
16분35초커스텀 서버 BAE
14분56초위챗 공식 인터페이스
15분03초WeChat API 인터페이스 분석
13분33초WeChat의 6가지 주요 수신 인터페이스
14분27초문자 답장 인터페이스
15분02초단순 디렉토리
11분21초음악 답장 인터페이스
12분21초이미지 및 텍스트 응답 인터페이스
12분38초파운드 개발
12분11초파운드 케이스
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