微信开发遇到问题

route.php
Route::group(array('prefix' => 'u', 'before' => 'weixin.check'), function(){
Route::any('/', 'App\Controllers\Customer\CheckController@index');
Route::resource('/checkSignature', 'App\Controllers\Customer\CheckController');
Route::any('text', 'App\Controllers\Customer\CheckController@textMessage');
});

filter当中的weixin.check如下
Route::filter('weixin.check', function(){
if(Input::get('echostr')){
    //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 
    $signature      = Input::get('signature');
    //时间戳 
    $timestamp      = Input::get('timestamp');
    //随机数 
    $nonce          = Input::get('nonce');

    $token          = 'FoodOrder';
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);

    if($tmpStr != $signature){
        return false;
    }
    return Input::get('echostr');
}
});

CheckController.php当中的index方法如下
public function index()
{
    $postStr    = file_get_contents("php://input");
    // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    // $postStr = Input::get('HTTP_RAW_POST_DATA');

    if(!empty($postStr)){
        libxml_disable_entity_loader(true);
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername   = $postObj->FromUserName;
        $toUsername     = $postObj->ToUserName;
        $keyword        = trim($postObj->Content);
        $time           = time();
        $textTpl        = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>"; 
        if(!empty($keyword)){
            $MsgType    = "text";
            $contentStr = "Welcome to Food Order";
            $resultStr  = sprintf($textTpl, $fromUsername, $toUsername, $time, $MsgType, $contentStr);
            return $resultStr;
        }else{
            return 'cao ni ma';
        }
    }else {
        return 'ni ma bi';
    }
    // return $this->textMessage();
}

我已经做好了服务器的配置了,在微信提供的调试页面也返回会了对应的xml信息。也就是说我接受了微信post过来的xml并且把回复的xml写好传过去微信那边
weixin-question.png


可是悲催的是:我用我的微信向公众号发送信息的时候。公众号还是说“该公众号暂时无法提供服务,请稍后再试”。

不知道我犯了什么低级错误。请各位大人高台贵手帮帮我。
已邀请:

JohnLui

赞同来自: kaxiu

AccessToken每7200秒更新一次,做了嘛。。。

qufo

赞同来自:

我没有细看

导致公众号无法提供服务的原因很多。你自己调试一下估计就知道了。

用 postman 或者其他类似的软件,往你配置的 url 发一个你自己虚构的 xml 包,当然,包要符合微信的规范,然后看一下你的服务器返回来的 xml 是不是有问题就知道了。

如果单纯向某用户发消息得到这个错误。让这位用户跟公众号号互动一下,比如给公从号发个消息,然后公众号就可以在24小时内给这位用户主动发消息了。

我说过,原因很多,或许我上面一个都没猜对。

motecshine - 菜鸟

赞同来自:

我用的是别人的 sdk 没这个问题 链接 ,还有你不觉得用这个框架,微信响应很慢么.

要回复问题请先登录注册