yii2 通过easywechat获取openID(snsapi_base方式)
2021-07-28 11:14:11
认证过程如下:
GetOpenID('/aaa'); ---> 配置文件paras中获取callback地址 ---> 控制器中actionOauthcallback ---> oauthcallback ---> header('location:'. $targetUrl)
1、配置文件paras.php
'wx'=>[
// 公众号信息
'mp'=>[
// 账号基本信息
'app_id' => 'app_id', // 公众号的appid
'secret' => 'secret', // 公众号的秘钥
'token' => 'token', // 接口的token
'aes_key'=>'aes_key',
'log' => [
'level' => 'debug',
'file' => '/opt/aaa/logs/wechat.log',
],
// 微信支付
'payment'=>[
'mch_id' => '',// 商户ID
'key' => '',// 商户KEY
'notify_url' => '',// 支付通知地址
'cert_path' => '',// 证书
'key_path' => '',// 证书
],
// web授权
'oauth' => [
'scopes' => 'snsapi_base',// 授权范围snsapi_userinfo
'callback' => '/start/oauthcallback',// 授权回调
],
],
],
1、视图中
session_start();
use EasyWeChat\Factory;
$config = Yii::$app->params['wx']['mp'];
$app = Factory::officialAccount($config);
if (empty($_SESSION['openid']) || $_SESSION['openid'] == '') {
$_SESSION['target_url'] = '/start';//给后面的回调函数返回地址
$response = $app->oauth->scopes([$config['oauth']['scopes']])->redirect();
$response->send();
}
echo $_SESSION['openid'];
exit;
2、控制器回调函数
// 获取openID回调函数
public function actionOauthcallback()
{
$config = Yii::$app->params['wx']['mp'];
$app = Factory::officialAccount($config);
$oauth = $app->oauth;
// 获取 OAuth 授权结果用户信息
$user = $oauth->user();
$openid = $user->getId();
// $user 可以用的方法:
// $user->getId(); // 对应微信的 OPENID
// $user->getNickname(); // 对应微信的 nickname
// $user->getName(); // 对应微信的 nickname
// $user->getAvatar(); // 头像网址
// $user->getOriginal(); // 原始API返回的结果
// $user->getToken(); // access_token, 比如用于地址共享时使用
$_SESSION['openid'] = $openid;
$targetUrl = empty($_SESSION['target_url']) ? '/' : $_SESSION['target_url'];
header('location:'. $targetUrl); // 跳转到 视图页面
}
官方文档:https://www.easywechat.com/docs/4.x/official-account/oauth
GetOpenID('/aaa'); ---> 配置文件paras中获取callback地址 ---> 控制器中actionOauthcallback ---> oauthcallback ---> header('location:'. $targetUrl)
1、配置文件paras.php
'wx'=>[
// 公众号信息
'mp'=>[
// 账号基本信息
'app_id' => 'app_id', // 公众号的appid
'secret' => 'secret', // 公众号的秘钥
'token' => 'token', // 接口的token
'aes_key'=>'aes_key',
'log' => [
'level' => 'debug',
'file' => '/opt/aaa/logs/wechat.log',
],
// 微信支付
'payment'=>[
'mch_id' => '',// 商户ID
'key' => '',// 商户KEY
'notify_url' => '',// 支付通知地址
'cert_path' => '',// 证书
'key_path' => '',// 证书
],
// web授权
'oauth' => [
'scopes' => 'snsapi_base',// 授权范围snsapi_userinfo
'callback' => '/start/oauthcallback',// 授权回调
],
],
],
1、视图中
session_start();
use EasyWeChat\Factory;
$config = Yii::$app->params['wx']['mp'];
$app = Factory::officialAccount($config);
if (empty($_SESSION['openid']) || $_SESSION['openid'] == '') {
$_SESSION['target_url'] = '/start';//给后面的回调函数返回地址
$response = $app->oauth->scopes([$config['oauth']['scopes']])->redirect();
$response->send();
}
echo $_SESSION['openid'];
exit;
2、控制器回调函数
// 获取openID回调函数
public function actionOauthcallback()
{
$config = Yii::$app->params['wx']['mp'];
$app = Factory::officialAccount($config);
$oauth = $app->oauth;
// 获取 OAuth 授权结果用户信息
$user = $oauth->user();
$openid = $user->getId();
// $user 可以用的方法:
// $user->getId(); // 对应微信的 OPENID
// $user->getNickname(); // 对应微信的 nickname
// $user->getName(); // 对应微信的 nickname
// $user->getAvatar(); // 头像网址
// $user->getOriginal(); // 原始API返回的结果
// $user->getToken(); // access_token, 比如用于地址共享时使用
$_SESSION['openid'] = $openid;
$targetUrl = empty($_SESSION['target_url']) ? '/' : $_SESSION['target_url'];
header('location:'. $targetUrl); // 跳转到 视图页面
}
官方文档:https://www.easywechat.com/docs/4.x/official-account/oauth