찾다

 >  Q&A  >  본문

php - 위챗 공식 계정으로 메시지를 보내도 응답이 없습니다.

오랜 시간 동안 문제가 발생했습니다. 내 코드는 꽤 정확한 것 같은데 자동으로 응답할 수 없습니다. 누군가 도와주실 수 있나요? 정말 감사합니다.
코드는 다음과 같습니다. /p>

<코드><?php

//토큰 정의
정의("토큰", "웨이신");
$wechatObj = 새로운 wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
    $wechatObj->유효();
}또 다른{
    $wechatObj->responseMsg();
}


wechatCallbackapiTest 클래스
{
    공개 함수 유효()
    {
        $echoStr = $_GET["echostr"];

        //유효한 서명, 옵션
        if($this->checkSignature()){
             에코 $echoStr;
            출구;
        }
    }

    공개 함수 responseMsg()
    {
    //포스트 데이터를 가져옵니다. 환경이 다르기 때문일 수 있습니다.
    //$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    $postStr = file_get_contents("php://input");
    
          //게시물 데이터 추출
        if (!empty($postStr)){
                /* libxml_disable_entity_loader는 XML eXternal Entity 주입을 방지하기 위한 것입니다.
                   가장 좋은 방법은 XML의 유효성을 직접 확인하는 것입니다 */
                //libxml_disable_entity_loader(true);
                  $postObj = simplexml_load_string($postStr);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = 트림($postObj->콘텐츠);
                $시간 = 시간();
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <콘텐츠><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
                if(!empty( $keyword ))
                {
                      $msgType = "텍스트";
                    $contentStr = "위챗 세상에 오신 것을 환영합니다!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    에코 $resultStr;
                }또 다른{
                    echo "뭔가를 입력하세요...";
                }

        }또 다른 {
            에코 "";
            출구;
        }
    }
        
    개인 함수 checkSignature()
    {
        // TOKEN을 직접 정의해야 합니다.
        if (!defined("토큰")) {
            throw new Exception('TOKEN이 정의되지 않았습니다!');
        }
        
        $signature = $_GET["서명"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
                
        $토큰 = 토큰;
        $tmpArr = array($token, $timestamp, $nonce);
        // SORT_STRING 규칙을 사용합니다.
        정렬($tmpArr, SORT_STRING);
        $tmpStr = 파열( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            사실을 반환;
        }또 다른{
            거짓을 반환;
        }
    }
}

?>
PHP中文网PHP中文网2788일 전374

모든 응답(1)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-05-16 13:07:00

    simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)을 사용하여 $postStr을 구문 분석해 보세요
    또한 $keyword 앞에 다음 응답을 추가해 보세요

    으아아아

    회신하다
    0
  • 취소회신하다