mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-27 21:10:24 +08:00
初步完成开放登录,待线上测试7
This commit is contained in:
parent
4fa02f34bb
commit
bf84732375
@ -4,6 +4,7 @@ namespace App\Http\Home\Controllers;
|
||||
|
||||
use App\Http\Home\Services\Account as AccountService;
|
||||
use App\Services\Logic\Account\EmailUpdate as EmailUpdateService;
|
||||
use App\Services\Logic\Account\OAuthProvider as OAuthProviderService;
|
||||
use App\Services\Logic\Account\PasswordReset as PasswordResetService;
|
||||
use App\Services\Logic\Account\PasswordUpdate as PasswordUpdateService;
|
||||
use App\Services\Logic\Account\PhoneUpdate as PhoneUpdateService;
|
||||
@ -62,8 +63,13 @@ class AccountController extends Controller
|
||||
|
||||
$captcha = $service->getSettings('captcha');
|
||||
|
||||
$service = new OAuthProviderService();
|
||||
|
||||
$oauthProvider = $service->handle();
|
||||
|
||||
$returnUrl = $this->request->getHTTPReferer();
|
||||
|
||||
$this->view->setVar('oauth_provider', $oauthProvider);
|
||||
$this->view->setVar('return_url', $returnUrl);
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
}
|
||||
|
@ -52,20 +52,7 @@ class ConnectController extends Controller
|
||||
*/
|
||||
public function qqCallbackAction()
|
||||
{
|
||||
$service = new ConnectService();
|
||||
|
||||
if ($this->authUser->id > 0) {
|
||||
|
||||
$service->bindUser(ConnectModel::PROVIDER_QQ);
|
||||
|
||||
return $this->response->redirect(['for' => 'home.uc.account']);
|
||||
}
|
||||
|
||||
$captcha = $service->getSettings('captcha');
|
||||
|
||||
$this->view->pick('connect/bind');
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
$this->view->setVar('provider', ConnectModel::PROVIDER_QQ);
|
||||
$this->handleCallback(ConnectModel::PROVIDER_QQ);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -73,20 +60,7 @@ class ConnectController extends Controller
|
||||
*/
|
||||
public function weixinCallbackAction()
|
||||
{
|
||||
$service = new ConnectService();
|
||||
|
||||
if ($this->authUser->id > 0) {
|
||||
|
||||
$service->bindUser(ConnectModel::PROVIDER_WEIXIN);
|
||||
|
||||
return $this->response->redirect(['for' => 'home.uc.account']);
|
||||
}
|
||||
|
||||
$captcha = $service->getSettings('captcha');
|
||||
|
||||
$this->view->pick('connect/bind');
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
$this->view->setVar('provider', ConnectModel::PROVIDER_QQ);
|
||||
$this->handleCallback(ConnectModel::PROVIDER_WEIXIN);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -94,20 +68,7 @@ class ConnectController extends Controller
|
||||
*/
|
||||
public function weiboCallbackAction()
|
||||
{
|
||||
$service = new ConnectService();
|
||||
|
||||
if ($this->authUser->id > 0) {
|
||||
|
||||
$service->bindUser(ConnectModel::PROVIDER_WEIBO);
|
||||
|
||||
return $this->response->redirect(['for' => 'home.uc.account']);
|
||||
}
|
||||
|
||||
$captcha = $service->getSettings('captcha');
|
||||
|
||||
$this->view->pick('connect/bind');
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
$this->view->setVar('provider', ConnectModel::PROVIDER_QQ);
|
||||
$this->handleCallback(ConnectModel::PROVIDER_WEIBO);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -127,7 +88,7 @@ class ConnectController extends Controller
|
||||
|
||||
$service->bindLogin();
|
||||
|
||||
$location = $this->url->get(['for' => 'home.uc.index']);
|
||||
$location = $this->url->get(['for' => 'home.uc.account']);
|
||||
|
||||
return $this->jsonSuccess(['location' => $location]);
|
||||
}
|
||||
@ -141,9 +102,38 @@ class ConnectController extends Controller
|
||||
|
||||
$service->bindRegister();
|
||||
|
||||
$location = $this->url->get(['for' => 'home.uc.index']);
|
||||
$location = $this->url->get(['for' => 'home.uc.account']);
|
||||
|
||||
return $this->jsonSuccess(['location' => $location]);
|
||||
}
|
||||
|
||||
protected function handleCallback($provider)
|
||||
{
|
||||
$code = $this->request->getQuery('code');
|
||||
$state = $this->request->getQuery('state');
|
||||
|
||||
$service = new ConnectService();
|
||||
|
||||
$openUser = $service->getOpenUserInfo($code, $state, $provider);
|
||||
|
||||
$connect = $service->getConnectRelation($openUser['id'], $provider);
|
||||
|
||||
if ($connect && $connect->deleted == 0) {
|
||||
if ($this->authUser->id > 0) {
|
||||
$service->bindUser($openUser, $provider);
|
||||
return $this->response->redirect(['for' => 'home.uc.account']);
|
||||
} else {
|
||||
$service->authLogin($connect);
|
||||
return $this->response->redirect(['for' => 'home.index']);
|
||||
}
|
||||
}
|
||||
|
||||
$captcha = $service->getSettings('captcha');
|
||||
|
||||
$this->view->pick('connect/bind');
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
$this->view->setVar('provider', $provider);
|
||||
$this->view->setVar('open_user', $openUser);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ use App\Services\Logic\Order\OrderCancel as OrderCancelService;
|
||||
use App\Services\Logic\Order\OrderConfirm as OrderConfirmService;
|
||||
use App\Services\Logic\Order\OrderCreate as OrderCreateService;
|
||||
use App\Services\Logic\Order\OrderInfo as OrderInfoService;
|
||||
use App\Services\Logic\Order\PayProvider as PayProviderService;
|
||||
use Phalcon\Mvc\Dispatcher;
|
||||
use Phalcon\Mvc\View;
|
||||
|
||||
@ -82,6 +83,10 @@ class OrderController extends Controller
|
||||
{
|
||||
$sn = $this->request->getQuery('sn', 'string');
|
||||
|
||||
$service = new PayProviderService();
|
||||
|
||||
$payProvider = $service->handle();
|
||||
|
||||
$service = new OrderInfoService();
|
||||
|
||||
$order = $service->handle($sn);
|
||||
@ -90,6 +95,7 @@ class OrderController extends Controller
|
||||
$this->response->redirect(['for' => 'home.uc.orders']);
|
||||
}
|
||||
|
||||
$this->view->setVar('pay_provider', $payProvider);
|
||||
$this->view->setVar('order', $order);
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Home\Controllers;
|
||||
|
||||
use App\Services\Logic\Account\OAuthProvider as OAuthProviderService;
|
||||
use App\Services\Logic\User\Console\AccountInfo as AccountInfoService;
|
||||
use App\Services\Logic\User\Console\ConnectDelete as ConnectDeleteService;
|
||||
use App\Services\Logic\User\Console\ConnectList as ConnectListService;
|
||||
@ -69,6 +70,10 @@ class UserConsoleController extends Controller
|
||||
|
||||
$account = $service->handle();
|
||||
|
||||
$service = new OAuthProviderService();
|
||||
|
||||
$oauthProvider = $service->handle();
|
||||
|
||||
$service = new ConnectListService();
|
||||
|
||||
$connects = $service->handle();
|
||||
@ -83,9 +88,10 @@ class UserConsoleController extends Controller
|
||||
$this->view->pick('user/console/account_password');
|
||||
}
|
||||
|
||||
$this->view->setVar('oauth_provider', $oauthProvider);
|
||||
$this->view->setVar('connects', $connects);
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
$this->view->setVar('account', $account);
|
||||
$this->view->setVar('connects', $connects);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,14 +2,15 @@
|
||||
|
||||
namespace App\Http\Home\Services;
|
||||
|
||||
use App\Library\OAuth\QQ as QQAuth;
|
||||
use App\Library\OAuth\WeiBo as WeiBoAuth;
|
||||
use App\Library\OAuth\WeiXin as WeiXinAuth;
|
||||
use App\Models\Connect as ConnectModel;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Connect as ConnectRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Auth\Home as AuthService;
|
||||
use App\Services\Logic\Account\Register as RegisterService;
|
||||
use App\Services\OAuth\QQ as QQAuth;
|
||||
use App\Services\OAuth\WeiBo as WeiBoAuth;
|
||||
use App\Services\OAuth\WeiXin as WeiXinAuth;
|
||||
use App\Validators\Account as AccountValidator;
|
||||
|
||||
class Connect extends Service
|
||||
@ -19,22 +20,32 @@ class Connect extends Service
|
||||
{
|
||||
$post = $this->request->getPost();
|
||||
|
||||
$auth = $this->getConnectAuth($post['provider']);
|
||||
|
||||
$auth->checkState($post['state']);
|
||||
|
||||
$validator = new AccountValidator();
|
||||
|
||||
$user = $validator->checkUserLogin($post['account'], $post['password']);
|
||||
|
||||
$openUser = $this->getOpenUserInfo($post['code'], $post['stats'], $post['provider']);
|
||||
$openUser = json_decode($post['open_user'], true);
|
||||
|
||||
$this->handleBindRelation($user, $openUser, $post['provider']);
|
||||
$this->handleConnectRelation($user, $openUser, $post['provider']);
|
||||
|
||||
$this->auth->saveAuthInfo($user);
|
||||
$auth = $this->getAppAuth();
|
||||
|
||||
$auth->saveAuthInfo($user);
|
||||
}
|
||||
|
||||
public function bindRegister()
|
||||
{
|
||||
$post = $this->request->getPost();
|
||||
|
||||
$openUser = $this->getOpenUserInfo($post['code'], $post['state'], $post['provider']);
|
||||
$auth = $this->getConnectAuth($post['provider']);
|
||||
|
||||
$auth->checkState($post['state']);
|
||||
|
||||
$openUser = json_decode($post['open_user'], true);
|
||||
|
||||
$registerService = new RegisterService();
|
||||
|
||||
@ -44,31 +55,59 @@ class Connect extends Service
|
||||
|
||||
$user = $userRepo->findById($account->id);
|
||||
|
||||
$this->handleBindRelation($user, $openUser, $post['provider']);
|
||||
$this->handleConnectRelation($user, $openUser, $post['provider']);
|
||||
|
||||
$this->auth->saveAuthInfo($user);
|
||||
$auth = $this->getAppAuth();
|
||||
|
||||
$auth->saveAuthInfo($user);
|
||||
}
|
||||
|
||||
public function bindUser($provider)
|
||||
public function bindUser($openUser, $provider)
|
||||
{
|
||||
$code = $this->request->getQuery('code', 'trim');
|
||||
$state = $this->request->getQuery('state', 'trim');
|
||||
|
||||
$user = $this->getLoginUser();
|
||||
|
||||
$openUser = $this->getOpenUserInfo($code, $state, $provider);
|
||||
$this->handleConnectRelation($user, $openUser, $provider);
|
||||
}
|
||||
|
||||
$this->handleBindRelation($user, $openUser, $provider);
|
||||
public function authLogin(ConnectModel $connect)
|
||||
{
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
$user = $userRepo->findById($connect->user_id);
|
||||
|
||||
$auth = $this->getAppAuth();
|
||||
|
||||
$auth->saveAuthInfo($user);
|
||||
}
|
||||
|
||||
public function getAuthorizeUrl($provider)
|
||||
{
|
||||
$auth = $this->getAuth($provider);
|
||||
$auth = $this->getConnectAuth($provider);
|
||||
|
||||
return $auth->getAuthorizeUrl();
|
||||
}
|
||||
|
||||
public function getAuth($provider)
|
||||
public function getOpenUserInfo($code, $state, $provider)
|
||||
{
|
||||
$auth = $this->getConnectAuth($provider);
|
||||
|
||||
$auth->checkState($state);
|
||||
|
||||
$token = $auth->getAccessToken($code);
|
||||
|
||||
$openId = $auth->getOpenId($token);
|
||||
|
||||
return $auth->getUserInfo($token, $openId);
|
||||
}
|
||||
|
||||
public function getConnectRelation($openId, $provider)
|
||||
{
|
||||
$connectRepo = new ConnectRepo();
|
||||
|
||||
return $connectRepo->findByOpenId($openId, $provider);
|
||||
}
|
||||
|
||||
public function getConnectAuth($provider)
|
||||
{
|
||||
$auth = null;
|
||||
|
||||
@ -124,20 +163,17 @@ class Connect extends Service
|
||||
);
|
||||
}
|
||||
|
||||
protected function getOpenUserInfo($code, $state, $provider)
|
||||
protected function getAppAuth()
|
||||
{
|
||||
$auth = $this->getAuth($provider);
|
||||
/**
|
||||
* @var $auth AuthService
|
||||
*/
|
||||
$auth = $this->getDI()->get('auth');
|
||||
|
||||
$auth->checkState($state);
|
||||
|
||||
$token = $auth->getAccessToken($code);
|
||||
|
||||
$openId = $auth->getOpenId($token);
|
||||
|
||||
return $auth->getUserInfo($token, $openId);
|
||||
return $auth;
|
||||
}
|
||||
|
||||
protected function handleBindRelation(UserModel $user, array $openUser, $provider)
|
||||
protected function handleConnectRelation(UserModel $user, array $openUser, $provider)
|
||||
{
|
||||
$connectRepo = new ConnectRepo();
|
||||
|
||||
@ -145,6 +181,11 @@ class Connect extends Service
|
||||
|
||||
if ($connect) {
|
||||
|
||||
if (time() - $connect->update_time > 86400) {
|
||||
$connect->open_name = $openUser['name'];
|
||||
$connect->open_avatar = $openUser['avatar'];
|
||||
}
|
||||
|
||||
if ($connect->deleted == 1) {
|
||||
$connect->deleted = 0;
|
||||
$connect->update();
|
||||
|
@ -28,9 +28,15 @@
|
||||
<a class="forget-link" href="{{ url({'for':'home.account.forget_pwd'}) }}">忘记密码</a>
|
||||
</div>
|
||||
<div class="oauth">
|
||||
<a class="layui-icon layui-icon-login-qq login-qq" href="{{ url({'for':'home.oauth.qq'}) }}"></a>
|
||||
<a class="layui-icon layui-icon-login-wechat login-wechat" href="{{ url({'for':'home.oauth.weixin'}) }}"></a>
|
||||
<a class="layui-icon layui-icon-login-weibo login-weibo" href="{{ url({'for':'home.oauth.weibo'}) }}"></a>
|
||||
{% if oauth_provider.qq.enabled == 1 %}
|
||||
<a class="layui-icon layui-icon-login-qq login-qq" href="{{ url({'for':'home.oauth.qq'}) }}"></a>
|
||||
{% endif %}
|
||||
{% if oauth_provider.weixin.enabled == 1 %}
|
||||
<a class="layui-icon layui-icon-login-wechat login-wechat" href="{{ url({'for':'home.oauth.weixin'}) }}"></a>
|
||||
{% endif %}
|
||||
{% if oauth_provider.weibo.enabled == 1 %}
|
||||
<a class="layui-icon layui-icon-login-weibo login-weibo" href="{{ url({'for':'home.oauth.weibo'}) }}"></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
<input type="hidden" name="provider" value="{{ provider }}">
|
||||
<input type="hidden" name="code" value="{{ request.get('code') }}">
|
||||
<input type="hidden" name="state" value="{{ request.get('state') }}">
|
||||
<input type="hidden" name="open_user" value='{{ open_user|json_encode }}'>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -23,6 +23,7 @@
|
||||
<input type="hidden" name="provider" value="{{ provider }}">
|
||||
<input type="hidden" name="code" value="{{ request.get('code') }}">
|
||||
<input type="hidden" name="state" value="{{ request.get('state') }}">
|
||||
<input type="hidden" name="open_user" value='{{ open_user|json_encode }}'>
|
||||
<input id="cv-app-id" type="hidden" value="{{ captcha.app_id }}">
|
||||
<input id="cv-ticket" type="hidden" name="ticket">
|
||||
<input id="cv-rand" type="hidden" name="rand">
|
||||
|
@ -17,8 +17,12 @@
|
||||
支付金额:<span class="amount">{{ '¥%0.2f'|format(order.amount) }}</span>
|
||||
</div>
|
||||
<div class="channel">
|
||||
<a class="alipay btn-pay" href="javascript:" data-channel="alipay">{{ image('home/img/alipay.png') }}</a>
|
||||
<a class="wxpay btn-pay" href="javascript:" data-channel="wxpay">{{ image('home/img/wxpay.png') }}</a>
|
||||
{% if pay_provider.alipay.enabled == 1 %}
|
||||
<a class="alipay btn-pay" href="javascript:" data-channel="alipay">{{ image('home/img/alipay.png') }}</a>
|
||||
{% endif %}
|
||||
{% if pay_provider.wxpay.enabled == 1 %}
|
||||
<a class="wxpay btn-pay" href="javascript:" data-channel="wxpay">{{ image('home/img/wxpay.png') }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="footer">
|
||||
<span class="tips">友情提示:请在12小时内完成支付,有问题请联系客服</span>
|
||||
|
@ -89,9 +89,15 @@
|
||||
{% endif %}
|
||||
<div class="connect-tips">支持绑定的第三方帐号</div>
|
||||
<div class="oauth-list">
|
||||
<a class="layui-icon layui-icon-login-qq login-qq" href="{{ url({'for':'home.oauth.qq'}) }}"></a>
|
||||
<a class="layui-icon layui-icon-login-wechat login-wechat" href="{{ url({'for':'home.oauth.weixin'}) }}"></a>
|
||||
<a class="layui-icon layui-icon-login-weibo login-weibo" href="{{ url({'for':'home.oauth.weibo'}) }}"></a>
|
||||
{% if oauth_provider.qq.enabled == 1 %}
|
||||
<a class="layui-icon layui-icon-login-qq login-qq" href="{{ url({'for':'home.oauth.qq'}) }}"></a>
|
||||
{% endif %}
|
||||
{% if oauth_provider.qq.enabled == 1 %}
|
||||
<a class="layui-icon layui-icon-login-wechat login-wechat" href="{{ url({'for':'home.oauth.weixin'}) }}"></a>
|
||||
{% endif %}
|
||||
{% if oauth_provider.qq.enabled == 1 %}
|
||||
<a class="layui-icon layui-icon-login-weibo login-weibo" href="{{ url({'for':'home.oauth.weibo'}) }}"></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
23
app/Services/Logic/Account/OAuthProvider.php
Normal file
23
app/Services/Logic/Account/OAuthProvider.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Logic\Account;
|
||||
|
||||
use App\Services\Logic\Service;
|
||||
|
||||
class OAuthProvider extends Service
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$weixin = $this->getSettings('oauth.weixin');
|
||||
$weibo = $this->getSettings('oauth.weibo');
|
||||
$qq = $this->getSettings('oauth.qq');
|
||||
|
||||
return [
|
||||
'weixin' => ['enabled' => $weixin['enabled']],
|
||||
'weibo' => ['enabled' => $weibo['enabled']],
|
||||
'qq' => ['enabled' => $qq['enabled']],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
21
app/Services/Logic/Order/PayProvider.php
Normal file
21
app/Services/Logic/Order/PayProvider.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Logic\Order;
|
||||
|
||||
use App\Services\Logic\Service;
|
||||
|
||||
class PayProvider extends Service
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$alipay = $this->getSettings('pay.alipay');
|
||||
$wxpay = $this->getSettings('pay.wxpay');
|
||||
|
||||
return [
|
||||
'alipay' => ['enabled' => $alipay['enabled']],
|
||||
'wxpay' => ['enabled' => $wxpay['enabled']],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
@ -1,18 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Library;
|
||||
namespace App\Services;
|
||||
|
||||
use GuzzleHttp\Client as HttpClient;
|
||||
use Phalcon\Crypt;
|
||||
use Phalcon\Di;
|
||||
|
||||
abstract class OAuth
|
||||
abstract class OAuth extends Service
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $clientId;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $clientSecret;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectUri;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $accessToken;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $openId;
|
||||
|
||||
public function __construct($clientId, $clientSecret, $redirectUri)
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Library\OAuth;
|
||||
namespace App\Services\OAuth;
|
||||
|
||||
use App\Library\OAuth;
|
||||
use App\Services\OAuth;
|
||||
|
||||
class QQ extends OAuth
|
||||
{
|
||||
@ -18,8 +18,8 @@ class QQ extends OAuth
|
||||
'client_id' => $this->clientId,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'state' => $this->getState(),
|
||||
'scope' => 'get_user_info',
|
||||
'response_type' => 'code',
|
||||
'scope' => 'get_user_info',
|
||||
];
|
||||
|
||||
return self::AUTHORIZE_URL . '?' . http_build_query($params);
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Library\OAuth;
|
||||
namespace App\Services\OAuth;
|
||||
|
||||
use App\Library\OAuth;
|
||||
use App\Services\OAuth;
|
||||
|
||||
class WeiBo extends OAuth
|
||||
{
|
||||
@ -78,9 +78,9 @@ class WeiBo extends OAuth
|
||||
throw new \Exception("Fetch User Info Failed:{$response}");
|
||||
}
|
||||
|
||||
$userInfo['id'] = $this->openId;
|
||||
$userInfo['id'] = $data['id'];
|
||||
$userInfo['name'] = $data['name'];
|
||||
$userInfo['avatar'] = $data['avatar_large'];
|
||||
$userInfo['avatar'] = $data['profile_image_url'];
|
||||
|
||||
return $userInfo;
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Library\OAuth;
|
||||
namespace App\Services\OAuth;
|
||||
|
||||
use App\Library\OAuth;
|
||||
use App\Services\OAuth;
|
||||
|
||||
class WeiXin extends OAuth
|
||||
{
|
||||
@ -17,8 +17,8 @@ class WeiXin extends OAuth
|
||||
'appid' => $this->clientId,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'state' => $this->getState(),
|
||||
'scope' => 'snsapi_login',
|
||||
'response_type' => 'code',
|
||||
'scope' => 'snsapi_login',
|
||||
];
|
||||
|
||||
return self::AUTHORIZE_URL . '?' . http_build_query($params);
|
Loading…
x
Reference in New Issue
Block a user