1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/buwangyun-bwsaas

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Api.php 7.3 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
hnlg666 Отправлено 4 лет назад 289bcf9
<?php
// +----------------------------------------------------------------------
// | Bwsaas
// +----------------------------------------------------------------------
// | Copyright (c) 2015~2020 http://www.buwangyun.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Gitee ( https://gitee.com/buwangyun/bwsaas )
// +----------------------------------------------------------------------
// | Author: buwangyun <hnlg666@163.com>
// +----------------------------------------------------------------------
// | Date: 2020-9-28 10:55:00
// +----------------------------------------------------------------------
namespace buwang\base;
use app\common\model\MemberMiniapp;
use app\common\model\User;
use buwang\exception\MiniappException;
use filter\Inspect;
use buwang\util\Sign;
use buwang\facade\WechatProgram;
use app\Request;
use buwang\service\MiniappService;
class Api extends BaseController
{
protected $bwapp; //当前租户访问的应用
protected $app_id; //租户应用id
// 初始化
protected function initialize()
{
parent::initialize();
$this->bwapp = $this->memberMiniappAuth();//获取当前访问的租户应用信息
if (!$this->bwapp) throw new MiniappException('应用信息获取验证失败!',403);
MiniappService::checkMiniappExpire($this->bwapp); //校验应用是否过期
app('userService')->setInviteCode(); //服务端缓存邀请码
$this->app_id = $this->bwapp['id'];
$this->user = $this->user ?: $this->getLoginUser();
}
/**
* 租户应用程序信息
*/
protected function memberMiniappAuth()
{
$appid = $this->request->param('service_id', '');
$condition = [];
$header = $this->request->header();
if (empty($appid)) {
if (empty($header['request-app'])) throw new MiniappException('header check fail',403);
$condition['service_id'] = Inspect::filter_escape($header['request-app']);
} else {
$condition['service_id'] = Inspect::filter_escape($appid);
}
$condition['is_lock'] = 0;
$this->token = $this->token ?: get_token($this->request);
return MemberMiniapp::where($condition)->field('id,member_id,appname,service_id,navbar_color,navbar_style,create_time,update_time,expire_time,miniapp_appid,miniapp_id,mp_appid')->cache(false)->find();
}
/**
* 禁止用户登录
* @param int $code
* @return \think\Response
*/
protected function isUserAuth($code = 401)
{
if (!$this->user) {
return $this->code($code)->error('API验证获取用户信息失败');
}
}
/**
* 获取token对应的用户信息
*/
protected function getLoginUser()
{
$token = get_token($this->request);
if ($token) {
try{
$user = self::decodeToken($token)->data;//解析token,获取用户信息
if ($user && $user->id) {
return User::where(['id' => $user->id, 'status' => 0])->find();
}
}catch (\Throwable $e){
return [];
}
}
return [];
}
/**
* API获取用户数据
* @return \think\Response
*/
public function getUserInfo()
{
self::isUserAuth();
$data['id'] = $this->user->id;
$data['invite_code'] = $this->user->invite_code;
$data['mobile'] = empty($this->user->mobile) ? '' : en_mobile($this->user->mobile);
$data['invite_code'] = $this->user->invite_code;
$data['avatar'] = $this->user->avatar;
$data['nickname'] = $this->user->nickname;
$data['login_time'] = date('Y-m-d', $this->user->login_time);
return $this->success('获取成功', $data);
}
/**
* 接口验证参数
* @param mixed $var 签名验证的参数
* @param string $signType 默认为md5
* @return array
*/
protected function apiSignCheck($var = [], $signType = 'md5')
{
if (empty($var['sign'])) {
$code = 401;
$msg = '没有验证签名';
} else {
$secret = $this->bwapp->service_id;
if (empty($var['publickey']) && empty($secret)) {
$code = 403;
$msg = '签名秘钥或公钥错误';
} else {
$sign = Sign::createSignature($var, $secret, $signType);//参数验签
if ($var['sign'] == $sign) {
$code = 200;
$msg = '验签成功';
} else {
$code = 403;
$msg = '参数验证失败';
}
}
}
return ['msg' => $msg, 'code' => $code];
}
/**
* 生成小程序码 获取unlimited小程序码
* @param array $scene 场景
* @param string $page 路径
* @param string $name 文件名
* @return \think\Response
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
* @throws \EasyWeChat\Kernel\Exceptions\RuntimeException
*/
public function getProgramCode(array $scene, string $page, string $name)
{
if (request()->isPost()) {
if(mb_strlen(http_build_query($scene) > 32)) return $this->error('场景值只支持最大32个可见字符');
$filepath = public_path('qrcode');
$response = WechatProgram::getWechatObj($this->app_id)->app_code->getUnlimit(http_build_query($scene), ['page' => Inspect::filter_escape($page)]);
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
$filename = $response->saveAs($filepath, md5($name));
$path = '/' . str_replace('\\', '/', substr($filepath . $filename, strlen(public_path())));
return $this->success('成功', ['url' => Request::root(true) . $path]);
}
return $this->error('您的应用未上线,无法生成小程序码');
}
return $this->error('请求类型错误');
}
/**
* 生成小程序码二维码 (不推荐使用)
* @param array $scene
* @param string $page 路径
* @param string $name 文件名
* @return \think\Response
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
* @throws \EasyWeChat\Kernel\Exceptions\RuntimeException
*/
public function getProgramQrCode(array $scene, string $page,string $name)
{
if (request()->isPost()) {
$filepath = public_path('qrcode');
$response = WechatProgram::getWechatObj($this->app_id)->app_code->getQrCode($page . '?' . http_build_query($scene));
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
$filename = $response->saveAs($filepath, md5($name));
$path = '/' . str_replace('\\', '/', substr($filepath . $filename, strlen(public_path())));
return $this->success('成功', ['url' => Request::root(true) . $path]);
}
return $this->error('您的应用未上线,无法生成小程序码二维码');
}
return $this->error('请求类型错误');
}
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/buwangyun-bwsaas.git
git@gitlife.ru:oschina-mirror/buwangyun-bwsaas.git
oschina-mirror
buwangyun-bwsaas
buwangyun-bwsaas
v1.4.3