学习不止眼前的教程与笔记 还需实践与创新

搜索

首页>>网站建设>>php>>经验笔记>>

php开发微信公众号调试时反馈“该公众号提供的服务出现故障,请稍后再试”

发布时间:2020-06-02点击:

    在使用php对接微信公众号自定义开发的时候,迷糊被一句话整的快崩溃了——“该公众号提供的服务出现故障,请稍后再试”。非常的的烦恼,几经波折,最后终于如愿以偿的解决了,这里就把过程中你也可能遇到的问题整理了一下。

    可能的原因有:

    一、php版本导致的

    在开发中,这也是一个大概率导致上述问题的存在,现在php的版本有很多,但是对于微信开发程序来说,是有一定区别的,因为不同的版本,代码的书写也是不一样的。

    一般我们在获取用户发的信息的时候第一句都是:

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

    但是这句代码在php7及以上版本都可能获取不到值,导致公众号的接口文件不能反馈信息,从而导致“该公众号提供的服务出现故障,请稍后再试”,你可以先把回复信息相关的代码都删除,单独留一个:

    public function responseMsg(){
         echo '';
    }

    然后在公众号里面随便发一个信息,如果服务器没有返回错误或者其他信息,那么就表示两种可能:

    1、回复信息的代码错误;

    2、接收用户信息的代码没有获取到值。

    针对第二个你可以试试把:

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    改成
    $postStr =file_get_contents('php://input');

    二、微信公众号接入了第三方授权

    这一个问题你可以先关闭第三方授权,然后试试。

    三、php代码错误

    这一条也是大概率导致“该公众号提供的服务出现故障,请稍后再试”的原因所在,但是代码的错误千变万化,不同的人犯的错误均不一样,所以这里就不错列举了,这里提供一个正确的代码,共大家自行比对:

    public function responseMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            if (!empty($postStr)){
                 $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>
                                <FuncFlag>0</FuncFlag>
                                </xml>";             
                    if(!empty( $keyword ))
                    {
                       $msgType = "text";
                       $contentStr = "Welcome to wechat world!";
                       $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                       echo $resultStr;
                    }else{
                        echo "Input something...";
                    }
    
            }else {
                echo "";
                exit;
            }
        }

    学习不止眼前的教程与笔记,还需实践与创新——小伙伴们快动手试试吧~

赞一个(0)     踩一个(0)    

相关链接

搜索

昵称:*
邮箱:
电话:
评论: