批改状态:未批改
老师批语:
微信网页授权登录流程如下:
1、获取code
2、通过code获取access_token及openid
3、通过access_token和openid获取用户详细信息
具体操作步骤如下:
1、获取code
<?php
//用户同意授权
public function auth(){
//公众号的appid和appsecret
$appid = config('app.weixin_appid');
$secret = config('app.weixin_appsecret');
//REDIRECT_URI 当appid和appsecret验证成功后要跳转的URL,并带有code
$REDIRECT_URI = 'http://f2f6c25d.ngrok.io/index.php/index/weixin/get_userinfo';
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.urlencode($REDIRECT_URI).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
header('Location:'.$url);
}点击 "运行实例" 按钮查看在线实例
2、通过code获取access_token及openid,并获取用户详细信息
<?php
//获取用户信息
public function get_userinfo(){
//获取微信返回的code
$code = input('get.code');
//通过code获取access_token
$res = $this->WinxinMode->auth_access_token($code);
//如果获取access_token不成功或者用户刷新导致code丢失,则重定向再次获取code
if(!$res){
header('Location:http://f2f6c25d.ngrok.io/index.php/index/weixin/auth');
exit();
}
$access_token = $res['access_token'];
$openid = $res['openid'];
//通过access_token和openid获取用户基本信息
$result = $this->WinxinMode->get_userinfo($access_token,$openid);
dump($result);
}点击 "运行实例" 按钮查看在线实例
实例中用到的auth_access_token和get_userinfo方法如下
<?php
/医院
* 获取用户access_token和openid
* @param $code 微信返回的code参数
* @return 如果获取成功,则返回结果,如果失败则返回false
*/
public function auth_access_token($code){
$appid = config('app.weixin_appid');
$secret = config('app.weixin_appsecret');
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
$res = http_Get($url);
$res = json_decode($res,true);
if(!isset($res['access_token'])){
return false;
}
return $res;
}
/医院
* @param $access_token 微信返回的access_token
* @param $openid 微信返回的openid
* @return mixed|string 如果获取成功,则返回用户信息,如果失败,则返回false
*/
public function get_userinfo($access_token,$openid){
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
$res = http_Get($url);
$res = json_decode($res,true);
if(isset($res['errcode'])){
return false;
}
return $res;
}点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号