use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Ixudra\Curl\Facades\Curl;
class WechatController extends Controller
{
public $appId;
public $appSecret;
public function __construct()
{
$this->appId = config('xxx');
$this->appSecret = config('xxx');
}
public function index()
{
$code = request()->get('code');
if ($code) {
//获取用户的openId
$openId = $this->getOpenId($code);
//获取用户基本信息
$user_info = $this->getUserInfo($openId);
//绑定获取的微信信息到当前用户
//更新openid到用户表,重新缓存用户信息
}
//完成授权跳转到之前的请求地址
//授权是一般是在中间件中完成
return redirect(request('url'));
}
/**
* 获取用户的openId
*
* @param $code
* @return mixed
*/
private function getOpenId($code)
{
//从redis中获取有效的access_token
$access_token = Cache::get('access_token');
if ($access_token) return $access_token;
$curl = Curl::to('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appId.'&secret='.$this->appSecret.'&code='.$code.'&grant_type=authorization_code')
->get();
$curl = json_decode($curl, true);
//重新设置缓存,有效期120分钟
Cache::put('access_token', $curl['access_token'], 120);
return $curl['openid'];
}
/**
* 获取用户详情
*
* @param $openId
* @return mixed
*/
private function getUserInfo($openId)
{
//从redis中获取有效的access_token
$access_token = Cache::get('access_token');
$curl = Curl::to('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openId.'&lang=zh_CN')
->get();
return $curl = json_decode($curl, true);
}
}
laravel微信公众号授权(原生)
最新推荐文章于 2024-01-22 13:05:52 发布