[更新]增加又模式网页授权兼容

This commit is contained in:
Anyon 2018-03-19 15:14:50 +08:00
parent cb6b3f9eb1
commit 7b175f9aa4

View File

@ -15,7 +15,6 @@
namespace service; namespace service;
use app\wechat\service\FansService; use app\wechat\service\FansService;
use function Couchbase\defaultDecoder;
use think\Exception; use think\Exception;
/** /**
@ -94,22 +93,42 @@ class WechatService
*/ */
public static function webOauth($fullMode = 0) public static function webOauth($fullMode = 0)
{ {
$appid = sysconf('wechat_thr_appid'); $appid = self::getAppid();
list($openid, $fansinfo) = [session("{$appid}_openid"), session("{$appid}_fansinfo")]; list($openid, $fansinfo) = [session("{$appid}_openid"), session("{$appid}_fansinfo")];
if ((empty($fullMode) && !empty($openid)) || (!empty($fullMode) && !empty($fansinfo))) { if ((empty($fullMode) && !empty($openid)) || (!empty($fullMode) && !empty($fansinfo))) {
empty($fansinfo) || FansService::set($fansinfo); empty($fansinfo) || FansService::set($fansinfo);
return ['openid' => $openid, 'fansinfo' => $fansinfo]; return ['openid' => $openid, 'fansinfo' => $fansinfo];
} }
$service = self::instance('wechat'); switch (strtolower(sysconf('wechat_type'))) {
$result = $service->oauth(session_id(), request()->url(true), $fullMode); case 'api':
session("{$appid}_openid", $openid = $result['openid']); $wechat = self::oauth();
session("{$appid}_fansinfo", $fansinfo = $result['fans']); if (request()->get('state') !== $appid) {
if ((empty($fullMode) && !empty($openid)) || (!empty($fullMode) && !empty($fansinfo))) { $snsapi = empty($fullMode) ? 'snsapi_base' : 'snsapi_userinfo';
empty($fansinfo) || FansService::set($fansinfo); $OauthUrl = $wechat->getOauthRedirect(request()->url(true), $appid, $snsapi);
return ['openid' => $openid, 'fansinfo' => $fansinfo]; redirect($OauthUrl, [], 301)->send();
} }
if (!empty($result['url'])) { $token = $wechat->getOauthAccessToken();
redirect($result['url'], [], 301)->send(); if (isset($token['openid'])) {
session("{$appid}_openid", $openid = $token['openid']);
if (empty($fullMode)) {
return ['openid' => $openid, 'fansinfo' => []];
}
session("{$appid}_fansinfo", $fansinfo = $wechat->getUserInfo($token['access_token'], $openid));
}
return ['openid' => $openid, 'fansinfo' => $fansinfo];
case 'thr':
default:
$service = self::instance('wechat');
$result = $service->oauth(session_id(), request()->url(true), $fullMode);
session("{$appid}_openid", $openid = $result['openid']);
session("{$appid}_fansinfo", $fansinfo = $result['fans']);
if ((empty($fullMode) && !empty($openid)) || (!empty($fullMode) && !empty($fansinfo))) {
empty($fansinfo) || FansService::set($fansinfo);
return ['openid' => $openid, 'fansinfo' => $fansinfo];
}
if (!empty($result['url'])) {
redirect($result['url'], [], 301)->send();
}
} }
} }