今天整理一下微信授权登录的过程,方便以后记忆
1.首先在微信公众平台申请 微信测试账号,申请成功后微信平台会自动分配给你appID,appSecret
按照微信的要求填写接口配置信息,假如服务器地址为www.warcello.cn已经安装了thinkphp,
新建一个WechatController.class.php代码如下
namespaceHome\Controller;
useThink\App;
useThink\Controller;
define("TOKEN","qweqwe");
define("AppID","*******");
define("AppSecret","******");
class WechatController extends Controller{
获取微信用户信息
public function index()
{
$echoStr=$_GET["echostr"];
if($this->checkSignature()){
echo$echoStr;
exit;
}
}
private function checkSignature()
{
// you must define TOKEN by yourself
if(!defined("TOKEN")) {
throw newException('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;
}
}
}
将服务器上访问WeChat控制器的地址,token录入
提交成功后修改网页账号域名,如图:
点击后会弹出如下窗口
在该页面输入域名即可 ,不要带http
2.授权登录方法,根据微信文档描述,将
public function getOauthAccessToken() {
$appid='公众号的appid';
$redirect_uri = '需要授权成功后跳转的地址';
$scope = 'snsapi_userinfo';//弹出授权页面 snsapi_base静默授权
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=REDIRECT_URI&response_type=code&scope=$scopeE&state=STATE#wechat_redirect";
redirect($url);
}
授权成功后将自动跳转到redirect_uri,并带着code
3.拿到上面获取的code后,去换取用户的openid
public function getCode($code){
$appid = appid;
$secret = secret;
$code = $code;
$url= "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
$curl=curl_init();//初始化一个 cURL 对象
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);// 获取数据返回
curl_setopt($curl, CURLOPT_TIMEOUT,500);//设置一个长整形数,作为最大延续多少秒
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_BINARYTRANSFER,true) ;// 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
$res=curl_exec($curl);
curl_close($curl);
$result = json_decode($res);
return $result;
}
这部成功后已经可以拿到用户的openid了,然后再根据上面的方法获取用户信息;