공개 계정이 없는 웹사이트에 대해 웹페이지 인증 로그인을 구현하는 것이 좋습니다 <?php <br />
// +---------------------------------- --- ----------<br>
// | OneThink [ 생각만 하면 할 수 있어요 ]<br>
// +---------------------------------- --- ----------<br>
// | Copyright (c) 2013 http://www.onethink.cn All Rights Reserved.<br>
// +---------------------------------- --- ----------<br>
// | 작성자: 아트 네트워크 <br>
// +---------------------------------- --- ---------- <br>
네임스페이스 HomeController;<br>
ThinkController를 사용하세요.<br>
/**<br>
* 공개 계정 관리<br>
*/ <br>
클래스 WebauthController는 컨트롤러 { <br>를 확장합니다.
/*id 공개 계정 아이디<br>
*url 점프주소<br>
*범위 인증 방법 허위 자동 인증 <br>
*/<br>
공용 함수 인덱스(){<br>
// $map ['id'] = '114';//I ( 'id', 0, 'intval' );<br>
// $info = M ( 'member_public' )->where ( $map )->find () <br>;
$info=배열(<br>
'appid' =>
'appsecret' => ,
);<br>
<br>
$redirect_url=U('Webauth/index');//콜백 주소<br>
$code=I('get.code');<br>
$scope=I('get.scope');<br>
if(비어 있음($scope)){<br>
$scope=false;<br>
}그 외{<br>
$scope=true;<br>
}<br>
If(비어 있음($code)){ <br>
$url='http://ky.xebox.cn/index.php/Index/Index/index/';//전송 주소<br>
Yoauth($info['appid'],$redirect_url,$scope,$url);<br>
}<br>
$data=Yoauth_access_token($info['appid'],$info['secret'],$code) <br>
$canshu=http_build_query($data); <br>
echo $URL=I('get.state').'?'.$canshu;<br>
리디렉션($URL);<br>
} <br>
} <br>
/***********************************WeChat 웹페이지 인증************** * **************************/<br>
<br>
/* 1단계: 사용자가 코드 승인 및 획득에 동의합니다. <br>
$appid;//공개 계정 appid<br>
$redirect_url;//인증 후 리다이렉트된 콜백 링크 주소입니다. urlencode를 이용해 링크를 처리해주세요<br>
$response_type;//반환 유형, 코드를 입력해주세요<br>
$scope;//애플리케이션 인증 범위, snsapi_base는 인증 페이지를 팝업하지 않고 직접 점프하여 사용자 openid만 얻을 수 있음), snsapi_userinfo (인증 페이지 팝업, openid를 통해 별명, 성별, 위치를 얻을 수 있음) 그리고, 팔로우를 하지 않더라도 의 경우에는 사용자가 승인하면 해당 사용자의 정보도 얻을 수 있습니다. <br>
$state;//리디렉션 후 상태 매개변수가 포함됩니다. 공식 계정 ID를 입력하여 사용자가 어떤 공식 계정에서 왔는지 확인할 수 있습니다<br>
*/ <br>
함수 Yoauth($appid,$redirect_url,$scope=true,$state='ypwl',$response_type="code"){ <br>
If($범위){<br>
$scope='snsapi_userinfo';//팝업 웹페이지 승인<br>
}그밖에{<br>
$scope='snsapi_base';//자동 인증<br>
}<br>$map ['appid'] = $appid;<br>
$map ['redirect_uri'] = $redirect_url;<br>
$map ['response_type'] = $response_type;<br>
$map ['범위'] = $scope;<br>
$map ['상태'] = $상태;<br>
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?' http_build_query ( $map ) '#wechat_redirect';<br>
리디렉션($url) <br>
}<br>
/* 2단계: 웹페이지 인증 access_token 코드를 교환하고 사용자 정보를 획득하여 이후 단계 생략<br>
참고: 이 단계가 자동 모드에서 수행되면 완료되고 사용자의 openid가 직접 반환됩니다. snsapi_base 스타일 웹 페이지 인증 프로세스는 여기서 끝납니다. <br>
appid는 공식 계정의 고유 식별자입니다<br>
그 비밀은 공식계정의 앱비밀<br>
첫 번째 단계에서 얻은 코드 매개변수에 코드가 채워집니다<br>
grant_type은 Authorization_code로 채워집니다 <br>
*/<br>
함수 Yoauth_access_token($appid,$secret,$code,$grant_type='authorization_code'){ <br>
$map ['appid'] = $appid;<br>
$map ['비밀'] = $비밀;<br>
$map ['코드'] = $code;<br>
$map ['grant_type'] = $grant_type <br>
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?'. http_build_query ( $map ) ;<br>
$content = file_get_contents ( $url );<br>
$content = json_decode ( $content, true );<br>
If (! 비어 있음 ( $content ['errmsg'] )) {<br>
종료( $content ['errcode'].'--'.$content['errmsg'] );<br>
}<br>
//인증 방법 결정<br>
If($content['scope'] == 'snsapi_userinfo'){<br>
$content=Yoauth_userinfo($content['access_token'],$content['openid']);//WeChat 사용자 정보 가져오기<br>
}<br>
$content 반환;<br>
}<br>
/*<br>
3단계: access_token 새로 고침(필요한 경우) <br>
*/<br>
/* 4단계: 사용자 정보 가져오기(snsapi_userinfo 범위가 필요함) <br>
Access_token 웹 페이지 인증 인터페이스 호출 인증서, 참고: 이 access_token은 기본적으로 지원되는 access_token과 다릅니다 <br>
openid 사용자의 고유 식별자<br>
lang 국가 및 지역 언어 버전으로 돌아가기, zh_CN 중국어 간체, zh_TW 중국어 번체, en 영어<br>
*/<br>
함수 Yoauth_userinfo($access_token,$openid,$lang='zh_CN'){ <br>
$map ['access_token'] = $access_token;<br>
$map ['openid'] = $openid;<br>
$map ['lang'] = $lang <br>
$url = 'https://api.weixin.qq.com/sns/userinfo?' http_build_query ( $map );<br>
$content = file_get_contents ( $url );<br>
$content = json_decode ( $content, true );<br>
If (! 비어 있음 ( $content ['errmsg'] )) {<br>
종료( $content ['errcode'].'--'.$content['errmsg'] );<br>
}<br>
$content 반환;<br>
} <br>
/* 사용자 openid가 사용자 정보를 가져옵니다<br>
access_token은 호출 인터페이스 자격 증명입니다<br>
Openid는 일반 사용자의 식별번호로 현재 공개 계정에 고유한 식별자입니다<br>Lang No 국가 및 지역으로 돌아가기 언어 버전, zh_CN 중국어 간체, zh_TW 중국어 번체, en 영어 <br>
*/<br>
함수 Yget_wx_userinfo($openid,$access_token,$lang='zh_CN'){<br>
$map ['access_token'] = $access_token;<br>
$map ['openid'] = $openid;<br>
$map ['lang'] = $lang <br>
$url = 'https://api.weixin.qq.com/cgi-bin/user/info?'. http_build_query ( $map );<br>
$content = file_get_contents ( $url );<br>
$content = json_decode ( $content, true );<br>
If (! 비어 있음 ( $content ['errmsg'] )) {<br>
종료( $content ['errcode'].'--'.$content['errmsg'] );<br>
}<br>
$content 반환;<br>
}