WeChat 인터페이스 개발에 대한 자세한 소개

高洛峰
풀어 주다: 2017-03-24 14:12:23
원래의
2345명이 탐색했습니다.

생성 과정에는 서명 확인이 필요하며, 이에 대한 설명은 다음과 같습니다.

공개 플랫폼 사용자가 정보를 제출한 후 GET 요청을 통해 입력된 Url에 요청합니다. , 그리고 4개의 매개변수를 가져옵니다:

* 서명 — WeChat 암호화된 서명

* 타임스탬프 — 타임스탬프

* nonce — 임의의 숫자

* echostr — 임의의 문자열

개발자는 서명을 확인하여 URL 액세스의 적법성을 확인합니다. 이 GET 요청이 echostr 매개변수 내용을 그대로 반환하면 액세스가 적용되고, 그렇지 않으면 액세스가 실패합니다. 검증 서명은 개발자가 입력한 토큰 매개변수, 타임스탬프 매개변수 및 논스 매개변수와 결합됩니다. 암호화 프로세스는 다음과 같습니다.

* 토큰, 타임스탬프, 논스의 세 가지 매개변수를 사전순으로 정렬합니다.

* 세 개의 매개변수를 정렬합니다. 매개변수 문자열은 SHA1 암호화를 위해 하나의 문자열로 연결됩니다.

* 개발자가 얻은 암호화된 문자열을 서명과 비교하여 요청이 WeChat에서 시작되었음을 식별할 수 있습니다.

코드:

<?  
        $signature = $_GET[&#39;signature&#39;];  
        $timestamp = $_GET[&#39;timestamp&#39;];  
        $nonce = $_GET[&#39;nonce&#39;];      
                  
        $token = TOKEN;  
        $tmpArr = array($token, $timestamp, $nonce);  
        sort($tmpArr);  
        $tmpStr = implode( $tmpArr );  
        $tmpStr = sha1( $tmpStr );  
          
        if( $tmpStr == $signature ){  
            return $_GET[&#39;echostr&#39;];  
        }else{  
            return false;  
        }  
?>
로그인 후 복사

그러나 WeChat은 데이터 전송에 json을 사용하지 않습니다.

따라서 XML 데이터를 다음과 같이 로드하려면 simplexml_load_string을 사용해야 합니다. POST 메서드가 urlencode가 아니므로 HTTP_RAW_POST_DATA를 설정하면 데이터를 읽을 수 있습니다.

ToUserName 메시지 수신자의 WeChat ID, 일반적으로 공개 플랫폼 계정 WeChat ID

FromUserName 메시지 보낸 사람의 WeChat ID

CreateTime 메시지 생성 시간

MsgType 문자 메시지는 텍스트

콘텐츠 메시지 내용

<?php  
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //符合微信的POST规范  
if (!emptyempty($postStr))  
{  
 
    $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA); //XML转对象函数,可能最近这一两年入行的不太清楚XML函数  
      
    //数据从对象取出  
    $fromUsername = $postObj->FromUserName;   
    $toUsername = $postObj->ToUserName;  
    $CreateTime = $postObj->CreateTime;  
    $MsgType = $postObj->MsgType;  
    $Content = $postObj->Content;  
 
    $keyword = trim($postObj->Content); //安全Trim  
    $time = time();  
    //XML数据体  
    $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(!emptyempty( $keyword )) //如果发信息来了,不是空白POST,微信规定立即回复,不用推送.  
    {  
        $msgType = "text"; //定义类型  
        $contentStr = "Hello World,I am Tater!"; //回复  
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //记住,Tpl是要载入的  
        echo $resultStr; //输出,以便微信抓!  
    }  
    else 
    {  
        echo "What are you say!"; //输入信息有问题,提示输入!  
    }  
 
}  
else 
{  
    echo "";  
    exit;  
}  
 
 
?>
로그인 후 복사

위 내용은 WeChat 인터페이스 개발에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿