パブリックアカウントのないウェブサイトにウェブページ認証ログインを実装することは非常に良いことです <?php<br />
// +---------------------------------------------- --- ----------------------------------<br />
// | OneThink [ 考えればできる ]<br />
// +---------------------------------------------- --- ----------------------------------<br />
// | 著作権 (c) 2013 http://www.onethink.cn 無断複写・転載を禁じます<br />
// +---------------------------------------------- --- ----------------------------------<br />
// | 著者: アートネットワーク <br />
// +---------------------------------------------- --- ----------------------------------<br />
名前空間 HomeController;<br />
ThinkController を使用します;<br />
/**<br />
* パブリックアカウント管理<br />
*/ <br />
class WebauthController extends Controller { <br />
/*id 公開アカウント ID<br />
*URLジャンプアドレス<br />
*スコープ認証方式 false サイレント認証<br />
*/<br />
パブリック関数index(){<br />
// $map ['id'] = '114';//I ( 'id', 0, 'intval' );<br />
// $info = M ( 'member_public' )->where ( $map )->find ();
$info=array(<br />
「appid」=> , <br>
'appsecret' =>
);<br>
<br>
$redirect_url=U('Webauth/index');//コールバックアドレス<br>
$code=I('get.code');<br>
$scope=I('get.scope');<br>
if(empty($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);
$canshu=http_build_query($data); <br>
echo $URL=I('get.state').'?'.$canshu;<br>
リダイレクト($URL);<br>
}<br>
}<br>
/***********************************WeChat Web ページの認証************** * **************************/<br>
<br>
/* ステップ 1: ユーザーはコードを承認して取得することに同意します <br>
$appid;//パブリックアカウントappid<br>
$redirect_url;//承認後にリダイレクトされるコールバック リンク アドレス。リンクを処理するには urlencode を使用してください<br>
$response_type; // 戻り値の型、コードを入力してください<br>
$scope;//アプリケーションの認可スコープ、snsapi_base は認可ページをポップアップせず、直接ジャンプし、ユーザーの openid のみを取得できます)、snsapi_userinfo (認可ページをポップアップし、openid を通じてニックネーム、性別、場所を取得できます)また、フォローしていない場合でも、ユーザーが許可している限り、その情報も取得できます)<br>
$state;// リダイレクト後に state パラメーターが含まれます。公式アカウント ID を入力して、ユーザーがどの公式アカウントから来たのかを判断できます。
*/<br>
function Yoauth($appid,$redirect_url,$scope=true,$state='ypwl',$response_type="code"){ <br>
If($scope){<br>
$scope='snsapi_userinfo';// ポップアップ Web ページの認証<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 ['state'] = $state;<br>
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?' http_build_query ( $map ) ;<br>
リダイレクト($url);
}<br>
/* ステップ 2: Web ページの認証 access_token のコードを交換し、ユーザー情報を取得することで、次のステップを省略します<br>
注: このステップをサイレント モードで実行すると、このステップは完了し、ユーザーの openid が直接返され、snsapi_base スタイルの Web ページ認証プロセスはここで終了します。 <br>
appid は公式アカウントの一意の識別子です<br>
秘密は公式アカウントのappsecretです<br>
コードは、最初のステップで取得したコードパラメータを入力することです<br>
Grant_type は authorization_code として入力されます <br>
*/<br>
function Yoauth_access_token($appid,$secret,$code,$grant_type='authorization_code'){ <br>
$map ['appid'] = $appid;<br>
$map ['secret'] = $secret;<br>
$map ['code'] = $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 (! empty ( $content ['errmsg'] )) {<br>
exit ( $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 Web ページ認証インターフェイス呼び出し証明書、注意: この access_token は、基本的にサポートされている access_token とは異なります<br>
Openid ユーザーの一意の識別子<br>
lang 国と地域の言語バージョンに戻る、zh_CN 簡体字中国語、zh_TW 繁体字中国語、en 英語<br>
*/<br>
function 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 (! empty ( $content ['errmsg'] )) {<br>
exit ( $content ['errcode'].'--'.$content['errmsg'] );<br>
}<br>
$content を返します;<br>
}<br>
/* ユーザー openid がユーザー情報を取得します<br>
access_token は呼び出し側インターフェースの認証情報です<br>
Openid は、現在の公開アカウントに固有の一般ユーザーの ID です<br>lang No 国と地域の言語バージョンに戻る、zh_CN 簡体字中国語、zh_TW 繁体字中国語、en 英語 <br>
*/<br>
function 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 (! empty ( $content ['errmsg'] )) {<br>
exit ( $content ['errcode'].'--'.$content['errmsg'] );<br>
}<br>
$content を返します;<br>
}