用户名西北射天狼 發表於 2019-11-14 12:35:00

php 开启微信公众号开发者模式

<p>php 开启微信公众号开发者模式<br>&lt;pre&gt;<br>&lt;?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-&gt;valid();<br>//开启自动回复功能<br>$wechatObj-&gt;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-&gt;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-&gt;FromUserName;<br>                //微信公众平台<br>                $toUsername = $postObj-&gt;ToUserName;<br>                //接收用户发送的关键词<br>                $keyword = trim($postObj-&gt;Content);<br>                //时间戳<br>                $time = time();<br>                //文本发送模板<br>                $textTpl = "&lt;xml&gt;<br>                            &lt;ToUserName&gt;&lt;!]&gt;&lt;/ToUserName&gt;<br>                            &lt;FromUserName&gt;&lt;!]&gt;&lt;/FromUserName&gt;<br>                            &lt;CreateTime&gt;%s&lt;/CreateTime&gt;<br>                            &lt;MsgType&gt;&lt;!]&gt;&lt;/MsgType&gt;<br>                            &lt;Content&gt;&lt;!]&gt;&lt;/Content&gt;<br>                            &lt;FuncFlag&gt;0&lt;/FuncFlag&gt;<br>                            &lt;/xml&gt;";   <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>?&gt;<br>&lt;/pre&gt;<br>1 TOKEN要跟微信公众号后台的TOKEN对应就行<br>2 $wechatObj-&gt;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(&quot;https://images.cnblogs.com/cnblogs_com/newmiracle/1588319/t_191112022504qrcode_for_gh_3b9ed2775d3c_258%20(1).jpg?t=1573527191829&quot;) #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]
查看完整版本: php 开启微信公众号开发者模式