생성 과정에는 서명 확인이 필요하며, 이에 대한 설명은 다음과 같습니다.
공개 플랫폼 사용자가 정보를 제출한 후 GET 요청을 통해 입력된 Url에 요청합니다. , 그리고 4개의 매개변수를 가져옵니다:
* 서명 — WeChat 암호화된 서명
* 타임스탬프 — 타임스탬프
* nonce — 임의의 숫자
* echostr — 임의의 문자열
개발자는 서명을 확인하여 URL 액세스의 적법성을 확인합니다. 이 GET 요청이 echostr 매개변수 내용을 그대로 반환하면 액세스가 적용되고, 그렇지 않으면 액세스가 실패합니다. 검증 서명은 개발자가 입력한 토큰 매개변수, 타임스탬프 매개변수 및 논스 매개변수와 결합됩니다. 암호화 프로세스는 다음과 같습니다.
* 토큰, 타임스탬프, 논스의 세 가지 매개변수를 사전순으로 정렬합니다.
* 세 개의 매개변수를 정렬합니다. 매개변수 문자열은 SHA1 암호화를 위해 하나의 문자열로 연결됩니다.
* 개발자가 얻은 암호화된 문자열을 서명과 비교하여 요청이 WeChat에서 시작되었음을 식별할 수 있습니다.
코드:
<? $signature = $_GET['signature']; $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return $_GET['echostr']; }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, 'SimpleXMLElement', 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!