<?php
|
|
namespace wechat;
|
|
use fast\Http;
|
|
|
/**
|
* @package 微信授权控制器
|
*/
|
class WechatOauth
|
{
|
//微信授权配置信息
|
private $wechat_config;
|
|
public function __construct()
|
{
|
$this->wechat_config = config('site.wechatApp');
|
}
|
|
/**
|
* 获取openid
|
* @return string|mixed
|
*/
|
public function getUserAccessUserInfo($code = "")
|
{
|
if (empty($code)) {
|
$baseUrl = request()->url(true);
|
$url = $this->getSingleAuthorizeUrl($baseUrl, "123");
|
Header("Location: $url");
|
exit();
|
} else {
|
$access_token = $this->getSingleAccessToken($code);
|
return $access_token;
|
return $this->getUserInfo($access_token);
|
}
|
}
|
/**
|
* 微信授权链接
|
* @param string $redirect_uri 要跳转的地址
|
* @return [type] 授权链接
|
*/
|
public function getSingleAuthorizeUrl($redirect_url = "", $state = '1')
|
{
|
$redirect_url = urlencode($redirect_url);
|
return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->wechat_config['appid'] . "&redirect_uri=" . $redirect_url . "&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
|
}
|
/**
|
* 获取token
|
* @return [type] 返回token
|
*/
|
public function getSingleAccessToken($code)
|
{
|
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->wechat_config['appid'] . '&secret=' . $this->wechat_config['appsecret'] . '&code=' . $code . '&grant_type=authorization_code';
|
$Http = new Http();
|
$access_token = $Http->get($url);
|
return $access_token;
|
}
|
|
|
/**
|
* @explain
|
* 通过code获取用户openid以及用户的微信号信息
|
* @return array|mixed
|
* @remark
|
* 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token
|
* access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效
|
**/
|
public function getUserInfo($access_token = [])
|
{
|
if (!$access_token) {
|
return [
|
'code' => 0,
|
'msg' => '微信授权失败',
|
];
|
}
|
$userinfo_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token['access_token'] . '&openid=' . $access_token['openid'] . '&lang=zh_CN';
|
$Http = new Http();
|
$userinfo_json = $Http->get($userinfo_url);
|
|
//获取用户的基本信息,并将用户的唯一标识保存在session中
|
if (!$userinfo_json) {
|
return [
|
'code' => 0,
|
'msg' => '获取用户信息失败!',
|
];
|
}
|
return $userinfo_json;
|
}
|
}
|