You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.6 KiB

<?php
namespace app\base\controller\wechat\api;
use app\base\model\wechat\WechatUser;
use EasyWeChat\Factory;
use think\App;
class Auth extends Base
{
/**
* Auth2.0 发起授权页
* @param string $url 授权后重定向的回调链接地址
* @date 2020-08-18
*/
public function oauth()
{
$url = input('post.url');
$weixin_param = get_weixin_config();
$auth_class = new \tencent\wechat\weixin\Auth($weixin_param);
//获取跳转链接
$redirect_url = $auth_class->getRedirectUrl($url);
//记录三方日志
platformLog(['url' => $url], $redirect_url, 'wechat_oauth_get_redirect_url_' . UID);
return sendSuccessMessage([
'redirect_url' => $redirect_url
]);
}
/**
* Auth2.0 接收用户授权后的状态,并获取用户信息
* @param string $code 授权码
* @date 2020-08-18
*/
public function user()
{
$code = input('post.code');
$weixin_param = get_weixin_config();
$wechat_user_model = new WechatUser();
$jwt_class = new \jwt\Jwt();
$auth_class = new \tencent\wechat\weixin\Auth($weixin_param);
$result = $auth_class->getUserInfoByCode($code);
$result->getTokenResponse();
$wechat_data = $result->getRaw();
platformLog(['code' => $code], $wechat_data, 'wechat_oauth_get_user_' . UID);
// 更新微信用户信息
$user_wechat_data = [
'uid' => UID,
'openid' => $wechat_data['openid'],
'nickname' => $wechat_data['nickname'],
'headimgurl' => $wechat_data['headimgurl'],
'sex' => $wechat_data['sex'],
'province' => $wechat_data['province'],
'city' => $wechat_data['city'],
'country' => $wechat_data['country'],
'language' => $wechat_data['language'],
'unionid' => isset($wechat_data['unionid']) ? $wechat_data['unionid'] : ''
];
$res = $wechat_user_model->updateUser($user_wechat_data);
//获取用户信息
$wechat_user = $wechat_user_model->getOneData([
['openid', '=', $user_wechat_data['openid']]
], 'id,user_id,openid');
$info = [
'uid' => UID,
'openid' => $wechat_user['openid'],
'wechat_user_id' => $wechat_user['id'],
'user_id' => $wechat_user['user_id'],
];
$res_token = $jwt_class->signToken($info);
$r_data = $info;
$r_data['access_token'] = $res_token['token'];
$r_data['access_token_expire_time'] = $res_token['exp'];
return sendSuccessMessage($r_data);
}
}