WeChat 공개 계정을 기반으로 공식 문서 개발:
사용자 정보를 얻는 단계는 다음과 같습니다.
1 1단계: 사용자는 코드 승인 및 획득에 동의합니다
2 2단계: 코드를 통해 웹페이지 인증 access_token 교환
3 3단계: access_token 새로 고침(필요한 경우)
4 4단계: 사용자 정보 가져오기(snsapi_userinfo 범위가 필요함)
1 코드 가져오기
WeChat 공개 계정에 인증 범위(범위 매개변수)가 있는지 확인하는 전제하에(서비스 계정이 고급 인터페이스를 획득한 후 기본적으로 범위 매개변수에 snsapi_base 및 snsapi_userinfo가 포함됨) 추종자를 안내합니다. 다음 페이지를 열려면:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
"링크에 접근할 수 없습니다."라는 메시지가 나타나면 매개변수가 잘못 입력되었는지, 범위 매개변수에 해당하는 권한 범위 권한이 있는지 확인하세요.
특별 참고 사항: 승인 작업의 보안 수준이 높기 때문에 WeChat은 승인 요청을 시작할 때 링크의 매개변수가 다음과 같은 경우 승인 링크에 대해 정기적으로 강력한 일치 확인을 수행합니다. 주문이 잘못되면 인증 페이지에 일반 액세스가 불가능합니다
그 중:
AppID - 공식 계정의 고유 식별자
REDIRECT_URI - 점프 URL
SCOPE - 값은 snsapi_base(인증 페이지가 팝업되지 않고 직접 이동하여 전송되며 사용자의 openid만 획득 가능) 또는 snsapi_userinfo(인증 페이지가 팝업되며 openid를 통해 닉네임, 성별, 위치를 획득할 수 있음)입니다. 또한, 사용자가 팔로우하지 않더라도 사용자가 승인하면 사용자의 정보를 얻을 수 있습니다.)
STATE - 개발자가 a-zA-Z0-9의 매개변수 값을 사용자 정의할 수 있습니다
2 그리고 웹페이지 인증 access_token 코드를 교환합니다
사용자가 인증에 동의하면 페이지가 리디렉션_uri/?code =CODE&state=STATE로 이동합니다.
상태는 위의 STATE 매개변수에서 그대로 전달됩니다.
구현 코드:
<code class="hljs php">$code = I('get.code'); if (empty($code)) { //todo 非微信访问 exit('</code>'); }else{ //授权后操作 }
여기에서 코드를 얻을 수 있습니다. 이후 access_token 획득에 사용됩니다.
코드를 획득한 후 다음 링크를 요청하여 access_token을 획득하세요:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret= SECRET&code=CODE&grant_type =authorization_code
appid - 공식 계정의 고유 식별자
secret - key
code - 위에 반환된 코드
grant_type - 값은 Authorization_code
구현 코드:
<code class="hljs bash">$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret'); $str = file_get_contents($url); $str = json_decode($str, true); $access_token = $str['access_token'];</code>
여기에서 access_token을 캐시하여
구현 코드를 자주 획득하지 않도록 할 수 있습니다. 예를 들어 TP 프레임워크를 사용하면
<code class="hljs php">$access_token = S('access_token'); if (empty($access_token)) { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret'); $str = file_get_contents($url); $str = json_decode($str, true); $access_token = $str['access_token']; S('access_token', $access_token, 3600); }</code>
access_token, openid(사용자의 고유 식별자)도 함께 반환됩니다. WeChat 공식 문서에서는 다음과 같이 설명합니다. 사용자의 고유 식별자, 사용자가 공식 계정을 팔로우하지 않을 때 사용자가 공식 계정의 웹페이지를 방문할 때 고유한 OpenID가 사용자와 공식 계정도 생성됩니다
openid는 WeChat 사용자를 고유하게 식별합니다. 사용자가 처음으로 로그인하지 않는 경우 openid를 얻은 후 데이터베이스를 쿼리하여 확인할 수 있습니다. 이 openid에 바인딩된 사용자가 있습니다. 그 후에는 사용자 데이터를 다시 얻을 필요가 없으며 데이터베이스 user_id를 직접 가져옵니다.
3 무시 세 번째 단계로 필요한 경우에만 access_token을 다시 얻습니다.
4 사용자 정보 가져오기(snsapi_userinfo 범위가 필요함)
데이터베이스가 이 WeChat ID 사용자에게 바인딩되지 않은 경우에는 동일합니다. 사용자의 첫 방문 및 로그인까지 4단계를 통해 사용자 정보를 얻은 후(사용자 인증의 경우 웹페이지 인증 범위는 snsapi_userinfo이며 개발자는 access_token 및 openid pull 사용자 정보를 전달할 수 있음) 사용자를 생성합니다. 백그라운드에서 이 WeChat 사용자를 바인딩합니다
(openid를 통해)
요청 방법
http: GET(https 프로토콜을 사용하세요) https:/ /api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token - 위에서 얻은 access_token
openid - 공개 계정의 고유 식별자
구현 코드:
<code class="hljs php">$access_token = S('access_token'); if (empty($access_token)) { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret'); $str = file_get_contents($url); $str = json_decode($str, true); $access_token = $str['access_token']; S('access_token', $access_token, 3600); }</code>
위는 WeChat 공개 계정이 사용자 정보를 얻기 위한 구체적인 단계입니다.