123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace App\libs\wechat\auth\Gateways;
- use Illuminate\Support\Facades\Config;
- use Illuminate\Support\Facades\DB;
- class Base
- {
- protected $config = [];
- public function __construct()
- {
- $this->config = Config::get('swdz.wechat');
- }
- /**
- * @desc 快速授权
- */
- public function auth(string $scope = 'snsapi_userinfo', string $redirect = null)
- {
- $code = request()->get('code', null);
- if (!$code) {
- header('Location: ' . $this->authUrl($scope, $redirect));
- exit;
- }
- $openInfo = $this->code2Openid($code);
- if (isset($openInfo['errcode']) && \in_array($openInfo['errcode'], [40163, 40029], true)) {
- header('Location: ' . $this->authUrl($scope, $redirect));
- exit;
- }
- if (isset($openInfo['errcode'])) {
- exit($openInfo['errmsg']);
- }
- if ('snsapi_userinfo' === $scope) {
- $userInfo = $this->userSimpleInfo($openInfo['access_token'], $openInfo['openid']);
- } else {
- $userInfo['openid'] = $openInfo['openid'];
- }
- $baseTable = $this->config['appid'] . '_user';
- $userId = Db::table($baseTable)->where('openid', $userInfo['openid'])->value('user_id');
- if (empty($userId)) {
- $userId = Db::table($baseTable)
- ->insertGetId([
- 'openid' => $userInfo['openid'],
- 'unionid' => $userInfo['unionid'] ?? '',
- 'nickname' => $userInfo['nickname'] ?? '',
- 'headimgurl' => $userInfo['headimgurl'] ?? '',
- 'sex' => $userInfo['sex'] ?? '',
- 'country' => $userInfo['country'] ?? '',
- 'province' => $userInfo['province'] ?? '',
- 'city' => $userInfo['city'] ?? '',
- 'language' => $userInfo['language'] ?? '',
- 'created_at' => time(),
- ])
- ;
- }
- $userInfo['user_id'] = $userId;
- return $userInfo;
- }
- /**
- * @desc 获取jssdk
- *
- * @param string $url 需要授权的地址
- * @param array $api 开放接口列表
- * @param array $tag 开发能力列表
- *
- * @return array
- */
- public function jssdk(string $url, $api = [], $tag = [])
- {
- $jsApiList = array_merge($api, [
- 'checkJsApi',
- 'onMenuShareTimeline',
- 'onMenuShareAppMessage',
- 'onMenuShareQQ',
- 'onMenuShareWeibo',
- 'hideMenuItems',
- 'showMenuItems',
- 'hideAllNonBaseMenuItem',
- 'getLocalImgData',
- 'chooseImage',
- ]);
- $openTagList = array_merge($tag, ['wx-open-launch-weapp', 'wx-open-launch-app']);
- $jsApiTicket = $this->jsApiTicket();
- $timestamp = time();
- $nonceStr = uniqid();
- return [
- 'debug' => false,
- 'appId' => $this->config['appid'],
- 'timestamp' => $timestamp,
- 'nonceStr' => $nonceStr,
- 'signature' => sha1('jsapi_ticket=' . $jsApiTicket . '&noncestr=' . $nonceStr . '×tamp=' . $timestamp . '&url=' . $url),
- 'jsApiList' => $jsApiList,
- 'openTagList' => $openTagList,
- ];
- }
- /**
- * @desc 获取授权地址
- *
- * @param string $scope 授权方式 snsapi_base|snsapi_userinfo
- */
- public function authUrl(string $scope = 'snsapi_userinfo', string $redirect = null): string
- {
- }
- /**
- * @desc 使用授权code换取openid
- */
- public function code2Openid(string $code): array
- {
- }
- /**
- * @desc 获取用户基础信息
- */
- public function userSimpleInfo(string $accessToken, string $openid): array
- {
- }
- /**
- * @desc 获取用户详细信息
- */
- public function userDetailInfo(string $openid): array
- {
- }
- /**
- * @desc 获取 JSAPI TICKET
- *
- * @return string
- */
- public function jsApiTicket()
- {
- }
- }
|