<?php /* * This file is part of the overtrue/socialite. * * (c) overtrue <i@overtrue.me> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Overtrue\Socialite\Providers; use Overtrue\Socialite\AccessTokenInterface; use Overtrue\Socialite\ProviderInterface; use Overtrue\Socialite\User; /** * Class DoubanProvider. * * @see http://developers.douban.com/wiki/?title=oauth2 [使用 OAuth 2.0 访问豆瓣 API] */ class DoubanProvider extends AbstractProvider implements ProviderInterface { /** * {@inheritdoc}. */ protected function getAuthUrl($state) { return $this->buildAuthUrlFromBase('https://www.douban.com/service/auth2/auth', $state); } /** * {@inheritdoc}. */ protected function getTokenUrl() { return 'https://www.douban.com/service/auth2/token'; } /** * {@inheritdoc}. */ protected function getUserByToken(AccessTokenInterface $token) { $response = $this->getHttpClient()->get('https://api.douban.com/v2/user/~me', [ 'headers' => [ 'Authorization' => 'Bearer '.$token->getToken(), ], ]); return json_decode($response->getBody()->getContents(), true); } /** * {@inheritdoc}. */ protected function mapUserToObject(array $user) { return new User([ 'id' => $this->arrayItem($user, 'id'), 'nickname' => $this->arrayItem($user, 'name'), 'name' => $this->arrayItem($user, 'name'), 'avatar' => $this->arrayItem($user, 'large_avatar'), 'email' => null, ]); } /** * {@inheritdoc}. */ protected function getTokenFields($code) { return parent::getTokenFields($code) + ['grant_type' => 'authorization_code']; } /** * {@inheritdoc}. */ public function getAccessToken($code) { $response = $this->getHttpClient()->post($this->getTokenUrl(), [ 'form_params' => $this->getTokenFields($code), ]); return $this->parseAccessToken($response->getBody()->getContents()); } }