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

照搬下来的 也没有回复消息 TOKEN验证已经成功

<?php

namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller{

public function __construct(){


}

    public function index(){

        //1.将timestamp,nonce,token 按字典序排序

$timestamp = $_GET['timestamp'];

$nonce     = $_GET['nonce'];

$token     = 'weixin';

$signature  = $_GET['signature'];

$echostr = $_GET['echostr'];

$array      = array( $timestamp,$nonce,$token );

sort( $array );

//2.将排序后的三个参数拼接之后sha1加密

$tmpstr  = sha1( implode($array) );

//1.将加密后的字符串与signature对比,判断该请求是否来自微信

if( $tmpstr == $signature && $echostr){

//第一次接入微信API的时候进行验证

echo $echostr;

exit;

}else{

$this->responseMsg();

}

    }

//接受事件推送并回复

public function responseMsg(){

//1.获取到微信推送过来的poat数据(xml格式)

$postArr  = $GLOBALS['HTTP_RAW_POST_DATA'];

//2.处理消息类型,并设置回复类型和内容

$postObj  = simplexml_load_string($postArr);

//判断推动的数据包是不是订阅事件

if(strtolower($postObj->MsgType) == 'event'){

//如果是关注事件 subscribe 事件

if(strtolower($postObj->Event) == 'subscribe'){

//回复用户消息

$toUser = $postObj->FromUserName;

$fromUser = $postObj->ToUserName;

$time = time();

$msgType    = 'text';

$content    = '欢迎关注我们';

$tamplate = "<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<Content><![CDATA[%s]]></Content>

</xml>";

$info = sprintf($tamplate,$fromUser,$toUser,$time,$msgType,$content);

echo $info;

}

}

if(strtolower($postObj->MsgType) == 'text'){

if($postObj->Content == 'you'){

$tamplate = "<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<Content><![CDATA[%s]]></Content>

</xml>";

$fromUser = $postObj->ToUserName;

$toUser = $postObj->FromUserName;

$time = time();

$content    = '这个网站很不错';

$msgType    = 'text';

echo  sprintf($tamplate,$toUser,$fromUser,$time,$msgType,$content);

}

}

}

}


提问者:qq_流浪地图_04393387 2017-04-27 18:36

个回答

  • qq_超越_20
    2018-01-04 02:34:41

    一样的,代码百分之百没错,但就是不回复

  • 精慕门6215918
    2017-07-06 11:26:47

    求解,token已经验证成功,关注后还是没有回复成功,代码都确保一致了

  • qq_何光辉_0
    2017-05-07 21:37:25

    //$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];  这个有点问题,获取不到数据 用下面这个吧 

    $postArr = file_get_contents('php://input');


  • 一个不确定
    2017-04-28 21:58:48

    我用TP5按代码写还是获取不到回复消息


  • 傻桂子
    2017-04-28 10:11:38

    关注之后不回复,可能是你代码中的$info=sprintf()中的参数跟$tamplate中的<xml>中的代码没有对应上,要先写$toUser,再写$fromUser

  • 慕仙1522273
    2017-04-28 10:10:58

    http://img.mukewang.com/5902a492000168f211070492.jpg
    服务器地址这块要加上,,才能提交成功