| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | <?phpnamespace App\libs\wechat\auth\Gateways;use Illuminate\Support\Facades\Config;use swdz\helpers\Helper;use Illuminate\Support\Facades\DB;use \Illuminate\Support\Facades\Cookie;class Base{    protected $config = [];    public function __construct()    {        $this->config = Config::get('swdz.wechat');    }    /**     * @desc    快速授权     * @param   string      $scope     * @param   string|null $redirect     * @return  mixed     */    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])) {            header('Location: ' . $this->authUrl($scope, $redirect));            exit();        }        if (isset($openInfo['errcode'])) {            exit($openInfo['errmsg']);        }        if ($scope == 'snsapi_userinfo') {            $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     * @param   string|null $redirect     * @return  string     */    public function authUrl(string $scope = 'snsapi_userinfo', string $redirect = null): string {}    /**     * @desc    使用授权code换取openid     * @param   string $code     * @return  array     */    public function code2Openid(string $code): array {}    /**     * @desc    获取用户基础信息     * @param   string $accessToken     * @param   string $openid     * @return  array     */    public function userSimpleInfo(string $accessToken, string $openid): array {}    /**     * @desc    获取用户详细信息     * @param   string $openid     * @return  array     */    public function userDetailInfo(string $openid): array {}    /**     * @desc    获取 JSAPI TICKET     * @return  string     */    public function jsApiTicket() {}}
 |