问答详情
源自:3-2 接收事件订阅与回复响应消息(二)

谁能看下代码 按视频写的没有推送 token验证成功 代码也没错误 另外php5.5.7 tp3.2.3是不是还需要配置别的东西?

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller
{
   public function index()
   {
//        $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
//        获取timestamp nonce token signature
       $timestamp = $_GET['timestamp'];
       $nonce = $_GET['nonce'];
       $token = 'mxs';
       $signature = $_GET['signature'];
       $echostr = $_GET['echostr'];
       //形成数组 然后按字典序排列
       $array = array($timestamp, $nonce, $token);
       sort($array);
       //拼接成字符串,sha1加密,然后与signature校验
       $tmpstr = implode('', $array);
       $tmpstr = sha1($tmpstr);
       if ($tmpstr == $signature&&$echostr) {
           //第一次接入weixin api接口的时候
           echo $_GET['echostr'];
           exit;
       }
       else{
           $this->reponseMsg();
       }
   }
   //
   public function reponseMsg(){
       //1.获取到微信推送过来post数据(xml格式)
       $postArr=$GLOBALS['HTTP_RAW_POST_DATA'];
       //处理消息类型,并设置回复类型和内容
//        <xml>
//<ToUserName><![CDATA[toUser]]></ToUserName>
//<FromUserName><![CDATA[FromUser]]></FromUserName>
//<CreateTime>123456789</CreateTime>
//<MsgType><![CDATA[event]]></MsgType>
//<Event><![CDATA[subscribe]]></Event>
//</xml>
      $postObj=simplexml_load_string($postArr);
//        $postObj->ToUserName='';
//        $postObj->FromUserName='';
//        $postObj->CreateUserName='';
//        $postObj->MsgType='';
//        $postObj->Event='';
       //判断该数据包是否是订阅的事件推送
       if(strtolower($postObj->MsgType)=='event'){
           //如果是关注subscribe事件
           if(strtolower($postObj->Event=='subscribe')) {
               //回复用户消息
               $toUser = $postObj->FromUserName;
               $fromUser=$postObj->ToUserName;
               $time=time();
               $Msgtype='text';
               $Context='欢迎关注我的微信公众号';
               $template="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s/CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
               $info=sprintf($template,$toUser,$fromUser,$time,$Msgtype,$Context);
               echo $info;
//                <xml>
//<ToUserName><![CDATA[toUser]]></ToUserName>
//<FromUserName><![CDATA[fromUser]]></FromUserName>
//<CreateTime>12345678</CreateTime>
//<MsgType><![CDATA[text]]></MsgType>
//<Content><![CDATA[你好]]></Content>
//</xml>
                        }
       }
   }

   }

提问者:发呆发呆 2017-07-10 00:13

个回答

  • 西门夜说
    2017-07-10 10:02:54

    老司机告诉你,$GLOBALS['HTTP_RAW_POST_DATA'];这个东西啥都没有获取到,改成file_get_contents('php://input');