From 7b175f9aa487e76be20669125be7b258542cf907 Mon Sep 17 00:00:00 2001 From: Anyon Date: Mon, 19 Mar 2018 15:14:50 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=9B=B4=E6=96=B0]=E5=A2=9E=E5=8A=A0=E5=8F=88?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E7=BD=91=E9=A1=B5=E6=8E=88=E6=9D=83=E5=85=BC?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extend/service/WechatService.php | 43 +++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/extend/service/WechatService.php b/extend/service/WechatService.php index a24560acf..549e49084 100644 --- a/extend/service/WechatService.php +++ b/extend/service/WechatService.php @@ -15,7 +15,6 @@ namespace service; use app\wechat\service\FansService; -use function Couchbase\defaultDecoder; use think\Exception; /** @@ -94,22 +93,42 @@ class WechatService */ public static function webOauth($fullMode = 0) { - $appid = sysconf('wechat_thr_appid'); + $appid = self::getAppid(); list($openid, $fansinfo) = [session("{$appid}_openid"), session("{$appid}_fansinfo")]; if ((empty($fullMode) && !empty($openid)) || (!empty($fullMode) && !empty($fansinfo))) { empty($fansinfo) || FansService::set($fansinfo); return ['openid' => $openid, 'fansinfo' => $fansinfo]; } - $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(); + switch (strtolower(sysconf('wechat_type'))) { + case 'api': + $wechat = self::oauth(); + if (request()->get('state') !== $appid) { + $snsapi = empty($fullMode) ? 'snsapi_base' : 'snsapi_userinfo'; + $OauthUrl = $wechat->getOauthRedirect(request()->url(true), $appid, $snsapi); + redirect($OauthUrl, [], 301)->send(); + } + $token = $wechat->getOauthAccessToken(); + 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(); + } } }