액세스 가이드

5936 단어 개발위챗
액세스 개요
위챗 공중 플랫폼 개발에 접속하려면 개발자는 다음과 같은 절차에 따라 완성해야 한다.
1. 서버 구성 작성
2. 서버 주소의 유효성 확인
3. 인터페이스 문서에 근거하여 업무 논리 실현
다음은 이 세 가지 절차를 상세하게 소개한다.
1단계: 서버 구성 작성
위챗 공중플랫폼 홈페이지에 로그인한 후 공중플랫폼 홈페이지의 개발 - 기본 설정 페이지에서 프로토콜을 선택하여 개발자가 되고'설치 수정'버튼을 누르면 서버 주소(URL), Token과 EncodingAESKey를 작성한다. 그 중에서 URL은 개발자가 위챗 메시지와 이벤트를 수신하는 인터페이스 URL이다.Token은 개발자가 임의로 작성하여 서명을 생성할 수 있습니다(이 Token은 인터페이스 URL에 포함된 Token과 비교하여 안전성을 검증합니다).EncodingAESKey는 개발자가 수동으로 작성하거나 무작위로 생성하여 메시지 해독 키로 사용됩니다.
이 동시에 개발자는 메시지 복호화 방식인 명문 모드, 호환 모드와 안전 모드를 선택할 수 있다.모드의 선택과 서버 설정은 제출 후 즉시 적용됩니다. 개발자는 신중하게 작성하고 선택하십시오.복호화 방식의 기본 상태는 명문 모드입니다. 호환 모드와 보안 모드를 선택하려면 관련 복호화 코드를 미리 설정해야 합니다. 자세한 내용은 메시지체 서명과 복호화 부분의 문서를 참고하십시오.
 
2단계: 메시지가 위챗 서버에서 왔는지 확인
개발자가 정보를 제출하면 위챗 서버는 작성된 서버 주소 URL에 GET 요청을 보냅니다. GET 요청은 다음 표와 같이 매개 변수를 가지고 있습니다.
매개 변수
묘사
signature 위챗 암호화 서명,signature는 개발자가 작성한 token 매개 변수와 요청한 timestamp 매개 변수,nonce 매개 변수를 결합시켰다.
timestamp 타임 스탬프
nonce 랜덤 수
echostr 랜덤 문자열
개발자는signature를 검사하여 요청을 검사합니다. (아래는 검사 방식이 있습니다.)이번 GET 요청이 위챗 서버에서 온 것을 확인하면 echostr 매개 변수 내용을 그대로 되돌려 주십시오. 접속이 효력이 발생하고 개발자가 됩니다. 그렇지 않으면 접속이 실패합니다.암호화/검증 절차는 다음과 같습니다.
1) token,timestamp,nonce 세 개의 매개 변수를 사전 순서대로 정렬
2) 세 개의 매개 변수 문자열을 하나의 문자열로 연결하여sha1 암호화
3) 개발자가 암호화된 문자열은signature와 비교할 수 있으며, 이 요청이 위챗에서 유래했음을 표시한다
signature의 PHP 예제 코드를 확인합니다.
private function checkSignature()
{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->index();

class wechatCallbackapiTest
{
    public function index()
    {
        if(isset($_GET['echostr'])) {
            $this->valid();
        } else {
            $this->responseMsg();
        }
    }
	public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
        	echo $echoStr;
        	exit;
        }
    }

    public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

      	//extract post data
		if (!empty($postStr)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                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>
							<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;
        }
    }
		
	private function checkSignature()
	{
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}

?>

3단계: 인터페이스 문서에 따라 업무 논리 실현
URL 유효성 확인에 성공하면 액세스가 적용되고 개발자가 됩니다.당신은 공중 플랫폼 사이트에서 위챗 인증을 신청할 수 있습니다. 인증이 성공하면 더 많은 인터페이스 권한을 얻고 더 많은 업무 수요를 만족시킬 것입니다.
개발자가 된 후 사용자가 매번 공중번호에 메시지를 보내거나 사용자 정의 메뉴가 생기거나 위챗 결제 주문이 발생하는 경우 개발자가 작성한 서버 설정 URL은 위챗 서버가 전송한 메시지와 이벤트를 받고 개발자는 자신의 업무 논리에 따라 응답할 수 있다. 예를 들어 답장 메시지.
공중번호가 각 인터페이스를 호출할 때, 일반적으로 정확한 결과를 얻을 수 있으며, 구체적인 결과는 해당 인터페이스에 대한 설명을 볼 수 있다.오류를 되돌릴 때, 되돌아오는 코드에 따라 오류의 원인을 조회할 수 있습니다.전역 반환 코드 설명
사용자가 공중번호에 메시지를 보낼 때 공중번호 측이 받은 메시지 발송자는 OpenID로 사용자의 위챗 신호를 사용하여 암호화한 결과이며 모든 사용자가 공중번호에 대해 유일한 OpenID를 가진다.
그 밖에 개발자들이 여러 플랫폼(모바일 응용, 사이트, 공공 계정) 사이에서 사용자 계정을 공유하고 계정 체계를 통일해야 하는 수요가 많기 때문에 위챗 오픈 플랫폼(open.weixin.qq.com)은 UnionID 메커니즘을 제공했다.개발자는 OpenID를 통해 사용자의 기본 정보를 얻을 수 있다. 만약에 개발자가 여러 개의 응용 프로그램(모바일 응용프로그램, 사이트 응용프로그램과 공중계정을 가지고 있다면 공중계정은 위챗 오픈 플랫폼 계정에 귀속된 후에만 UnionID를 얻을 수 있다. 사용자의 기본 정보 중의 UnionID를 획득하여 사용자의 유일성을 구분할 수 있다. 왜냐하면 같은 위챗 오픈 플랫폼 계정 아래의 모바일 응용 프로그램이라면웹 사이트 응용 프로그램과 일반 계정은 사용자의 UnionID가 유일합니다.다시 말하면 같은 사용자가 같은 위챗 오픈 플랫폼 계정의 다른 응용에 대해 UnionID는 같다.자세한 내용은 위챗 오픈 플랫폼의 자원 센터-모바일 응용 프로그램 개발-위챗 로그인-권한 수여 관계 인터페이스 호출 안내-사용자 개인 정보 얻기(UnionID 메커니즘)에서 확인하십시오.
또한 위챗 공중번호 인터페이스는 각각 80포트와 443포트를 지원하려면 https://로 시작해야 합니다.

좋은 웹페이지 즐겨찾기