It is very good to implement web page authorization login for websites without public accounts <?php<br />
// +-------------------------------------------------- -----------------------<br />
// | OneThink [ WE CAN DO IT JUST THINK IT ]<br />
// +-------------------------------------------------- -----------------------<br />
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.<br />
// +-------------------------------------------------- -----------------------<br />
// | Author: Art Network <br />
// +-------------------------------------------------- -----------------------<br />
namespace HomeController;<br />
use ThinkController;<br />
/**<br />
* Public account management<br />
*/ <br />
class WebauthController extends Controller { <br />
/*id Public account ID<br />
*url jump address<br />
*scope authorization method false silent authorization<br />
*/<br />
Public function index(){<br />
// $map ['id'] = '114';//I ( 'id', 0, 'intval' );<br />
// $info = M ( 'member_public' )->where ( $map )->find (); <br>
$info=array(<br>
‘appid’ => , <br>
'appsecret' => ,
);<br>
<br>
$redirect_url=U('Webauth/index');//Callback address<br>
$code=I('get.code');<br>
$scope=I('get.scope');<br>
if(empty($scope)){<br>
$scope=false;<br>
}else{<br>
$scope=true;<br>
}<br>
If(empty($code)){ <br>
$url='http://ky.xebox.cn/index.php/Index/Index/index/';//Sending address<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>
redirect($URL);<br>
} <br>
} <br>
/***********************************WeChat webpage authorization*************** **************************/<br>
<br>
/* Step one: User agrees to authorize and obtain code <br>
$appid;//Public account appid<br>
$redirect_url;//The callback link address redirected after authorization, please use urlencode to process the link<br>
$response_type; //Return type, please fill in the code<br>
$scope;//Application authorization scope, snsapi_base does not pop up the authorization page, jumps directly, and can only get the user openid), snsapi_userinfo (pops up the authorization page, you can get the nickname, gender, and location through openid. And, even if you are not following In the case of , as long as the user authorizes it, his information can also be obtained)<br>
$state;//The state parameter will be included after redirection. You can fill in the official account ID to determine which official account the user comes from<br>
*/ <br>
function Yoauth($appid,$redirect_url,$scope=true,$state='ypwl',$response_type="code"){ <br>
If($scope){<br>
$scope='snsapi_userinfo';//Pop-up web page authorization<br>
}else{<br>
$scope='snsapi_base';//Silent authorization<br>
}<br>$map ['appid'] = $appid;<br>
$map ['redirect_uri'] = $redirect_url;<br>
$map ['response_type'] = $response_type;<br>
$map ['scope'] = $scope;<br>
$map ['state'] = $state;<br>
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?' . http_build_query ( $map ) . '#wechat_redirect';<br>
Redirect($url); <br>
}<br>
/* Step 2: Exchange the code for webpage authorization access_token and obtain user information to omit the following steps<br>
Note: If this step is done in silent mode, it will be completed and the user's openid will be returned directly. The snsapi_base-style web page authorization process ends here. <br>
The appid is the unique identifier of the official account<br>
The secret is the appsecret of the official account<br>
code is to fill in the code parameters obtained in the first step<br>
Grant_type is filled in as 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>
//Determine the authorization method<br>
If($content['scope'] == 'snsapi_userinfo'){<br>
$content=Yoauth_userinfo($content['access_token'],$content['openid']);//Get WeChat user information<br>
}<br>
Return $content;<br>
}<br>
/*<br>
Step 3: Refresh access_token (if needed) <br>
*/<br>
/* Step 4: Pull user information (need to have scope snsapi_userinfo)<br>
Access_token Web page authorization interface call certificate, note: this access_token is different from the basic supported access_token<br>
Openid The user’s unique identifier<br>
langReturn to the country and region language version, zh_CN Simplified Chinese, zh_TW Traditional Chinese, en English<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>
Return $content;<br>
} <br>
/* User openid gets user information<br>
access_token is the calling interface credential<br>
Openid is the identification of an ordinary user, unique to the current official account<br> lang No Return to the country and region language version, zh_CN Simplified Chinese, zh_TW Traditional Chinese, en English <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>
Return $content;<br>
}