前两天做了一个使用微信第三方的帐号,扫码登录网站。现在把原理讲解一下。
本质上还是调取接口,通过给接口传参数,然后获取返回值。前提,你得在微信开发者平台上申请了创建网站应用,并且获取了appid和secrectid 。废话不多说了,直接上代码:
首先用户点击登录界面上的微信图标的连接地址向本机的后台发送了请求。
class ClientUser {
public function actionWeilogin(){
$AppID = '自己的AppID';
$AppSecret = '自己的AppSecret';
$callback ='client-user/weilogins';
$state = md5(uniqid(rand(), TRUE));
$session = Yii::$app->session;
$session->set('wx_state',$state);
$callback = urlencode($callback);
$wxurl = "https://open.weixin.qq.com/connect/qrconnect?appid=".$AppID."&redirect_uri={$callback}&response_type=code&scope=snsapi_login&state={$state}#wechat_redirect";
return $this->redirect($wxurl);
}
//封装的curl post 请求
public function curls($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$json = curl_exec($ch);
curl_close($ch);
$arr=json_decode($json,1);
return $arr;
}
//微信登录返回值接口
public function actionWeilogins(){
$AppID = '自己的AppID';
$AppSecret = '自己的AppSecret';
//获取用户的openid
$url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$AppID.'&secret='.$AppSecret.'&code='.$_GET['code'].'&grant_type=authorization_code';
$arr= $this->curls($url);
//获取用户的详细信息
$urls='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';
$arrs=$this->curls($urls);
var_dump($arrs); // 这个是获取的是微信返回给我们的用户的个人的信息
}
}
备注:我是用yii2 框架做的