php 开启微信公众号开发者模式
<p>php 开启微信公众号开发者模式<br><pre><br><?php<br>/**<br>* wechat php test<br>*/<br>header('Content-type:text');<br>//define your token<br>//定义TOKEN密钥<br>define("TOKEN", "weixin");<br>//实例化微信对象<br>$wechatObj = new wechatCallbackapiTest();<br>//验证成功后注释掉valid方法<br>$wechatObj->valid();<br>//开启自动回复功能<br>$wechatObj->responseMsg();<br>//定义类文件<br>class wechatCallbackapiTest<br>{<br> //实现valid验证方法:实现对接微信公众平台<br> public function valid()<br> {<br> //通过GET请求接收随机字符串<br> $echoStr = $_GET["echostr"];<br> //调用checkSignature方法进行用户(开发者)数字签名验证<br> //valid signature , option<br> if($this->checkSignature()){<br> //如果成功,则返回接收到的随机字符串<br> echo $echoStr;<br> //并退出<br> exit;<br> }<br> }</p><p> public function responseMsg()<br> {<br> //get post data, May be due to the different environments<br> //接收用户端(客户)发送过来的XML数据<br> $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];</p>
<p> //extract post data<br> //判断XML数据是否为空<br> if (!empty($postStr)){<br> /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,<br> the best way is to check the validity of xml by yourself */<br> libxml_disable_entity_loader(true);<br> //通过simplexml进行xml解析 PHP中有两大类可以完成对XML的解析,1.PHP的Dom模型2.通过simplexml模型<br> $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);<br> //手机端<br> $fromUsername = $postObj->FromUserName;<br> //微信公众平台<br> $toUsername = $postObj->ToUserName;<br> //接收用户发送的关键词<br> $keyword = trim($postObj->Content);<br> //时间戳<br> $time = time();<br> //文本发送模板<br> $textTpl = "<xml><br> <ToUserName><!]></ToUserName><br> <FromUserName><!]></FromUserName><br> <CreateTime>%s</CreateTime><br> <MsgType><!]></MsgType><br> <Content><!]></Content><br> <FuncFlag>0</FuncFlag><br> </xml>"; <br> //判断用户发送关键词是否为空<br> if(!empty( $keyword ))<br> {<br> //回复类型,如果为"text",代表文本类型<br> $msgType = "text";<br> //回复内容<br> $contentStr = "Welcome to wechat world!";<br> //格式化字符串(对xml进行格式化操作,把里面相关的变量格式化成字符串)<br> $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);<br> //把XML数据返回给手机端<br> echo $resultStr;<br> }<br> //如果用户发送的关键词为空,则返回下列字符串<br> else{<br> echo "Input something...";<br> }</p>
<p> }else {<br> echo "";<br> exit;<br> }<br> }<br> <br> //定义checkSignature方法<br> private function checkSignature()<br> {<br> // you must define TOKEN by yourself<br> <br> //判断TOKEN密钥是否定义<br> if (!defined("TOKEN")) {<br> //如果没有定义则抛出异常,返回'TOKEN is not defined!'字符串<br> throw new Exception('TOKEN is not defined!');<br> }<br> //接收微信加密签名<br> $signature = $_GET["signature"];<br> //接收时间戳信息<br> $timestamp = $_GET["timestamp"];<br> //接收随机数<br> $nonce = $_GET["nonce"];<br> //把TOKEN常量赋值给$token变量 <br> $token = TOKEN;<br> //把相关参数组装为数组(密钥文件、时间戳、随机数)<br> $tmpArr = array($token, $timestamp, $nonce);<br> // use SORT_STRING rule<br> //通过字典法进行排序<br> sort($tmpArr, SORT_STRING);<br> //把排序后的数组转化为字符串<br> $tmpStr = implode( $tmpArr );<br> //通过哈希算法对字符串进行加密操作<br> $tmpStr = sha1( $tmpStr );<br> //与加密签名进行对比<br> if( $tmpStr == $signature ){<br> return true;<br> }else{<br> return false;<br> }<br> }<br>}</p>
<p>?><br></pre><br>1 TOKEN要跟微信公众号后台的TOKEN对应就行<br>2 $wechatObj->valid(); 微信公众号后台验证完就可以注释掉</p>
</div>
<div id="MySignature" role="contentinfo">
<div id="AllanboltSignature">
<p id="PSignature" style="border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 20px; padding-bottom: 30px; padding-left: 140px; background: url("https://images.cnblogs.com/cnblogs_com/newmiracle/1588319/t_191112022504qrcode_for_gh_3b9ed2775d3c_258%20(1).jpg?t=1573527191829") #e5f1f4 no-repeat 3% 45%; font-family: 微软雅黑; font-size: 12px">
<br>
如果遇到什么不懂的地方直接关注公众号留言(本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。)
<br>
作者:newmiracle
<br>
出处:https://www.cnblogs.com/newmiracle/
<br>
</p>
</div><br><br>
来源:https://www.cnblogs.com/newmiracle/p/11856256.html
頁:
[1]