diff --git a/app/Components/Callback.php b/app/Components/Callback.php
index e0afa2ca..c6933228 100644
--- a/app/Components/Callback.php
+++ b/app/Components/Callback.php
@@ -35,22 +35,22 @@ trait Callback
private function tradePaid($msg, $pay_type)
{
$pay_type_name = $pay_type == 1? '余额支付' : ($pay_type == 4? '支付宝国际' : ($pay_type == 5? '支付宝当面付' : ''));
+ $payment = Payment::query()->with(['order', 'order.goods'])->where('status', 0)->where('order_sn', $msg['out_trade_no'])->first();
+ if(!$payment){
+ Log::info('【'.$pay_type_name.'】回调订单【'.$msg['out_trade_no'].'】不存在');
+
+ return FALSE;
+ }
if($pay_type != 1){
Log::info('【'.$pay_type_name.'】支付成功,开始处理回调订单');
// 获取未完成状态的订单防止重复增加时间
- $payment = Payment::query()->with(['order', 'order.goods'])->where('status', 0)->where('order_sn', $msg['out_trade_no'])->first();
- if(!$payment){
- Log::info('【'.$pay_type_name.'】回调订单【'.$msg['out_trade_no'].'】不存在');
-
- return FALSE;
- }
}else{
Log::info('【'.$pay_type_name.'】订单处理');
}
// 处理订单
- DB::beginTransaction();
try{
+ DB::beginTransaction();
if($pay_type != 1){
// 如果支付单中没有用户信息则创建一个用户
if(!$payment->user_id){
@@ -69,127 +69,138 @@ trait Callback
// 更新订单
$order = Order::query()->where('order_sn', $msg['out_trade_no'])->first();
- // 提取商品信息
- $goods = Goods::query()->where('id', $order->goods_id)->first();
- // 取出用户信息
- $user = User::query()->where('id', $order->user_id)->first();
- // 商品为流量或者套餐
- switch($goods->type){
- case 1:
- $order->status = 2;
- $order->save();
- Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $user->transfer_enable+$goods->traffic*1048576, '[在线支付]加上用户购买的套餐流量');
- User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic*1048576);
- break;
- case 2:
- $activePlan = Order::query()
- ->where('user_id', $order->user_id)
- ->with(['goods'])
- ->whereHas('goods', function($q){
- $q->where('type', 2);
- })
- ->where('is_expire', 0)
- ->where('status', 2)
- ->exists();
- // 2为开始生效,3为预支付
- $order->status = $activePlan? 3 : 2;
- $order->save();
- // 预支付不执行
- if(!$activePlan){
- // 如果买的是套餐,则先将之前购买的套餐都无效化,重置用户已用、可用流量为0
- Order::query()
+
+ if($order->goods_id == -1){
+ $order->status = 2;
+ $order->save();
+ User::query()->where('id', $order->user_id)->increment('balance', $order->amount*100);
+
+ // 余额变动记录日志
+ $this->addUserBalanceLog($order->user_id, $order->oid, $order->user->balance, $order->user->balance+$order->amount, $order->amount, '用户在线充值');
+ }else{
+
+ // 提取商品信息
+ $goods = Goods::query()->where('id', $order->goods_id)->first();
+ // 取出用户信息
+ $user = User::query()->where('id', $order->user_id)->first();
+ // 商品为流量或者套餐
+ switch($goods->type){
+ case 1:
+ $order->status = 2;
+ $order->save();
+ Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $user->transfer_enable+$goods->traffic*1048576, '[在线支付]加上用户购买的套餐流量');
+ User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic*1048576);
+ break;
+ case 2:
+ $activePlan = Order::query()
->where('user_id', $order->user_id)
->with(['goods'])
->whereHas('goods', function($q){
- $q->where('type', '<=', 2);
+ $q->where('type', 2);
})
->where('is_expire', 0)
->where('status', 2)
- ->where('oid', '<>', $order->oid)
- ->update(['expire_at' => date('Y-m-d H:i:s'), 'is_expire' => 1]);
+ ->exists();
+ // 2为开始生效,3为预支付
+ $order->status = $activePlan? 3 : 2;
+ $order->save();
+ // 预支付不执行
+ if(!$activePlan){
+ // 如果买的是套餐,则先将之前购买的套餐都无效化,重置用户已用、可用流量为0
+ Order::query()
+ ->where('user_id', $order->user_id)
+ ->with(['goods'])
+ ->whereHas('goods', function($q){
+ $q->where('type', '<=', 2);
+ })
+ ->where('is_expire', 0)
+ ->where('status', 2)
+ ->where('oid', '<>', $order->oid)
+ ->update(['expire_at' => date('Y-m-d H:i:s'), 'is_expire' => 1]);
- Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, 0, '[在线支付]用户购买新套餐,先清空流量');
- User::query()->where('id', $order->user_id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]);
+ Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, 0, '[在线支付]用户购买新套餐,先清空流量');
+ User::query()->where('id', $order->user_id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]);
- $userTraffic = $goods->traffic*1048576;
- // 添加账号有效期
- $expireTime = date('Y-m-d', strtotime("+".$goods->days." days"));
- //账号下一个重置时间
- $nextResetTime = date('Y-m-d', strtotime("+".$goods->period." days"));
- if($nextResetTime >= $expireTime){
- $nextResetTime = NULL;
- }
-
- // 写入用户标签
- if($goods->label){
- // 删除用户所有标签
- UserLabel::query()->where('user_id', $order->user_id)->delete();
-
- //取出 商品默认标签 & 系统默认标签 去重
- $newUserLabels = array_values(array_unique(array_merge(GoodsLabel::query()->where('goods_id', $order->goods_id)->pluck('label_id')->toArray(), self::$systemConfig['initial_labels_for_user']? explode(',', self::$systemConfig['initial_labels_for_user']) : [])));
-
- // 生成标签
- foreach($newUserLabels as $vo){
- $obj = new UserLabel();
- $obj->user_id = $order->user_id;
- $obj->label_id = $vo;
- $obj->save();
+ $userTraffic = $goods->traffic*1048576;
+ // 添加账号有效期
+ $expireTime = date('Y-m-d', strtotime("+".$goods->days." days"));
+ //账号下一个重置时间
+ $nextResetTime = date('Y-m-d', strtotime("+".$goods->period." days"));
+ if($nextResetTime >= $expireTime){
+ $nextResetTime = NULL;
}
- }
- // 写入返利日志
- if($order->user->referral_uid){
- $this->addReferralLog($order->user_id, $order->user->referral_uid, $order->oid, $order->amount, $order->amount*self::$systemConfig['referral_percent']);
- // 邀请注册功能开启时,每成功邀请一名付费用户,返还邀请者邀请名额
- if(self::$systemConfig['is_invite_register']){
- User::query()->where('id', $order->user->referral_uid)->increment('invite_num', 1);
+ // 写入用户标签
+ if($goods->label){
+ // 删除用户所有标签
+ UserLabel::query()->where('user_id', $order->user_id)->delete();
+
+ //取出 商品默认标签 & 系统默认标签 去重
+ $newUserLabels = array_values(array_unique(array_merge(GoodsLabel::query()->where('goods_id', $order->goods_id)->pluck('label_id')->toArray(), self::$systemConfig['initial_labels_for_user']? explode(',', self::$systemConfig['initial_labels_for_user']) : [])));
+
+ // 生成标签
+ foreach($newUserLabels as $vo){
+ $obj = new UserLabel();
+ $obj->user_id = $order->user_id;
+ $obj->label_id = $vo;
+ $obj->save();
+ }
}
+
+ // 写入返利日志
+ if($order->user->referral_uid){
+ $this->addReferralLog($order->user_id, $order->user->referral_uid, $order->oid, $order->amount, $order->amount*self::$systemConfig['referral_percent']);
+ // 邀请注册功能开启时,每成功邀请一名付费用户,返还邀请者邀请名额
+ if(self::$systemConfig['is_invite_register']){
+ User::query()->where('id', $order->user->referral_uid)->increment('invite_num', 1);
+ }
+ }
+
+ Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $userTraffic, '[在线支付]加上用户购买的套餐流量');
+ User::query()->where('id', $order->user_id)->increment('invite_num', $goods->invite_num? : 0, ['transfer_enable' => $userTraffic, 'reset_time' => $nextResetTime, 'expire_time' => $expireTime, 'enable' => 1]);
+ }else{
+ //预支付订单先给上账号时间用于流量重置判断
+ User::query()->where('id', $order->user_id)->update(['expire_time' => date('Y-m-d', strtotime("+".$goods->days." days", strtotime($user->expire_time)))]);
}
+ break;
+ case 3:
+ $order->status = 2;
+ $order->save();
+ User::query()->where('id', $order->user_id)->increment('balance', $goods->price*100);
- Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $userTraffic, '[在线支付]加上用户购买的套餐流量');
- User::query()->where('id', $order->user_id)->increment('invite_num', $goods->invite_num? : 0, ['transfer_enable' => $userTraffic, 'reset_time' => $nextResetTime, 'expire_time' => $expireTime, 'enable' => 1]);
- }else{
- //预支付订单先给上账号时间用于流量重置判断
- User::query()->where('id', $order->user_id)->update(['expire_time' => date('Y-m-d', strtotime("+".$goods->days." days", strtotime($user->expire_time)))]);
- }
- break;
- case 3:
- $order->status = 2;
- $order->save();
- User::query()->where('id', $order->user_id)->increment('balance', $goods->price*100);
+ // 余额变动记录日志
+ $this->addUserBalanceLog($order->user_id, $order->oid, $order->user->balance, $order->user->balance+$goods->price, $goods->price, '用户在线充值');
+ break;
+ default:
+ Log::info('【处理订单】出现错误-未知套餐类型');
+ }
+ // 自动提号机:如果order的email值不为空
+ if($order->email){
+ $title = '自动发送账号信息';
+ $content = [
+ 'order_sn' => $order->order_sn,
+ 'goods_name' => $order->goods->name,
+ 'goods_traffic' => flowAutoShow($order->goods->traffic*1048576),
+ 'port' => $order->user->port,
+ 'passwd' => $order->user->passwd,
+ 'method' => $order->user->method,
+ //'protocol' => $order->user->protocol,
+ //'protocol_param' => $order->user->protocol_param,
+ //'obfs' => $order->user->obfs,
+ //'obfs_param' => $order->user->obfs_param,
+ 'created_at' => $order->created_at->toDateTimeString(),
+ 'expire_at' => $order->expire_at
+ ];
- // 余额变动记录日志
- $this->addUserBalanceLog($order->user_id, $order->oid, $order->user->balance, $order->user->balance+$goods->price, $goods->price, '用户在线充值');
- break;
- default:
- Log::info('【处理订单】出现错误-未知套餐类型');
- }
- // 自动提号机:如果order的email值不为空
- if($order->email){
- $title = '自动发送账号信息';
- $content = [
- 'order_sn' => $order->order_sn,
- 'goods_name' => $order->goods->name,
- 'goods_traffic' => flowAutoShow($order->goods->traffic*1048576),
- 'port' => $order->user->port,
- 'passwd' => $order->user->passwd,
- 'method' => $order->user->method,
- //'protocol' => $order->user->protocol,
- //'protocol_param' => $order->user->protocol_param,
- //'obfs' => $order->user->obfs,
- //'obfs_param' => $order->user->obfs_param,
- 'created_at' => $order->created_at->toDateTimeString(),
- 'expire_at' => $order->expire_at
- ];
+ // 获取可用节点列表
+ $labels = UserLabel::query()->where('user_id', $order->user_id)->get()->pluck('label_id');
+ $nodeIds = SsNodeLabel::query()->whereIn('label_id', $labels)->get()->pluck('node_id');
+ $nodeList = SsNode::query()->whereIn('id', $nodeIds)->orderBy('sort', 'desc')->orderBy('id', 'desc')->get()->toArray();
+ $content['serverList'] = $nodeList;
- // 获取可用节点列表
- $labels = UserLabel::query()->where('user_id', $order->user_id)->get()->pluck('label_id');
- $nodeIds = SsNodeLabel::query()->whereIn('label_id', $labels)->get()->pluck('node_id');
- $nodeList = SsNode::query()->whereIn('id', $nodeIds)->orderBy('sort', 'desc')->orderBy('id', 'desc')->get()->toArray();
- $content['serverList'] = $nodeList;
-
- $logId = Helpers::addEmailLog($order->email, $title, json_encode($content));
- Mail::to($order->email)->send(new sendUserInfo($logId, $content));
+ $logId = Helpers::addEmailLog($order->email, $title, json_encode($content));
+ Mail::to($order->email)->send(new sendUserInfo($logId, $content));
+ }
}
DB::commit();
diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php
index ee16152e..2544aff6 100644
--- a/app/Components/Helpers.php
+++ b/app/Components/Helpers.php
@@ -60,17 +60,18 @@ class Helpers
/**
* 添加用户
*
- * @param string $username 用户邮箱
+ * @param string $email 用户邮箱
* @param string $password 用户密码
* @param string $transfer_enable 可用流量
* @param int $data 可使用天数
* @param int $referral_uid 邀请人
* @return int
*/
- public static function addUser($username, $password, $transfer_enable, $data, $referral_uid = 0)
+ public static function addUser($email, $password, $transfer_enable, $data, $referral_uid = 0)
{
$user = new User();
- $user->username = $username;
+ $user->username = $email;
+ $user->email = $email;
$user->password = $password;
// 生成一个可用端口
$user->port = self::systemConfig()['is_rand_port']? Helpers::getRandPort() : Helpers::getOnlyPort();
diff --git a/app/Components/NetworkDetection.php b/app/Components/NetworkDetection.php
index fb7c5205..fd8a33e5 100644
--- a/app/Components/NetworkDetection.php
+++ b/app/Components/NetworkDetection.php
@@ -56,6 +56,37 @@ class NetworkDetection
return "机器宕机"; // 服务器宕机
}
}
+
+ /**
+ * 用api.iiwl.cc进行Ping检测
+ *
+ * @param string $ip 被检测的IP或者域名
+ *
+ * @return bool|array
+ */
+ public static function ping($ip)
+ {
+ $url = 'https://api.iiwl.cc/api/ping.php?url='.$ip;
+
+ try{
+ $ret = json_decode(Curl::send($url), TRUE);
+ if(!$ret){
+ Log::warning("【PING】检测".$ip."时,接口返回异常访问链接:".$url);
+
+ return FALSE;
+ }elseif($ret['code'] != 1 || $ret['msg'] != "检测成功!"){
+ Log::warning("【PING】检测".$ip."时,返回".json_encode($ret));
+
+ return FALSE;
+ }
+ } catch(Exception $e){
+ Log::warning("【Ping】检测".$ip."时,接口请求超时".$e);
+
+ return FALSE;
+ }
+
+ return $ret['data']; // 服务器宕机
+ }
}
?>
\ No newline at end of file
diff --git a/app/Components/QQInfo.php b/app/Components/QQInfo.php
new file mode 100644
index 00000000..a3c7eddc
--- /dev/null
+++ b/app/Components/QQInfo.php
@@ -0,0 +1,68 @@
+checkNodeStatus();
+ // 检查 维护模式
+ if(Helpers::systemConfig()['maintenance_mode']){
+ if(strtotime(Helpers::systemConfig()['maintenance_time']) < time()){
+ Config::query()->where('name', 'maintenance_mode')->update(['value' => 0]);
+ Config::query()->where('name', 'maintenance_time')->update(['value' => '']);
+ }
+ }
+
$jobEndTime = microtime(TRUE);
$jobUsedTime = round(($jobEndTime-$jobStartTime), 4);
diff --git a/app/Console/Commands/AutoPingNode.php b/app/Console/Commands/AutoPingNode.php
new file mode 100644
index 00000000..92a675ea
--- /dev/null
+++ b/app/Console/Commands/AutoPingNode.php
@@ -0,0 +1,57 @@
+where('is_transit', 0)->where('status', 1)->get();
+ foreach($nodeList as $node){
+ $this->pingNode($node->id, $node->is_ddns? $node->server : $node->ip);
+ }
+
+ $jobEndTime = microtime(TRUE);
+ $jobUsedTime = round(($jobEndTime-$jobStartTime), 4);
+
+ Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
+ }
+
+ // 节点Ping测速
+ private function pingNode($nodeId, $ip)
+ {
+ $result = NetworkDetection::ping($ip);
+
+ if($result){
+ $obj = new SsNodePing();
+ $obj->node_id = $nodeId;
+ $obj->ct = intval($result['China Telecom']['time']);
+ $obj->cu = intval($result['China Unicom']['time']);
+ $obj->cm = intval($result['China Mobile']['time']);
+ $obj->hk = intval($result['Hong Kong']['time']);
+ $obj->save();
+ }else{
+ Log::info("【".$ip."】Ping测速获取失败");
+ }
+
+ }
+}
diff --git a/app/Console/Commands/DailyJob.php b/app/Console/Commands/DailyJob.php
index ee80b28e..c7297d89 100644
--- a/app/Console/Commands/DailyJob.php
+++ b/app/Console/Commands/DailyJob.php
@@ -165,7 +165,7 @@ class DailyJob extends Command
}
// 重置流量
User::query()->where('id', $user->id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => $order->goods->traffic*1048576, 'reset_time' => $nextResetTime]);
- Log::info('用户[ID:'.$user->id.' 邮箱: '.$user->username.'] 流量重置为 '.($order->goods->traffic*1048576).'. 重置日期为 '.($nextResetTime? : '【无】'));
+ Log::info('用户[ID:'.$user->id.' 昵称: '.$user->username.' 邮箱: '.$user->email.'] 流量重置为 '.($order->goods->traffic*1048576).'. 重置日期为 '.($nextResetTime? : '【无】'));
}
}
}
\ No newline at end of file
diff --git a/app/Console/Commands/UserExpireAutoWarning.php b/app/Console/Commands/UserExpireAutoWarning.php
index c7bef7c5..05336eb5 100644
--- a/app/Console/Commands/UserExpireAutoWarning.php
+++ b/app/Console/Commands/UserExpireAutoWarning.php
@@ -43,7 +43,7 @@ class UserExpireAutoWarning extends Command
$userList = User::query()->where('enable', 1)->get();
foreach($userList as $user){
// 用户名不是邮箱的跳过
- if(FALSE === filter_var($user->username, FILTER_VALIDATE_EMAIL)){
+ if(FALSE === filter_var($user->email, FILTER_VALIDATE_EMAIL)){
continue;
}
@@ -53,14 +53,14 @@ class UserExpireAutoWarning extends Command
$title = '账号过期提醒';
$content = '您的账号将于今天晚上【24:00】过期。';
- $logId = Helpers::addEmailLog($user->username, $title, $content);
- Mail::to($user->username)->send(new userExpireWarningToday($logId));
+ $logId = Helpers::addEmailLog($user->email, $title, $content);
+ Mail::to($user->email)->send(new userExpireWarningToday($logId));
}elseif($lastCanUseDays > 0 && $lastCanUseDays <= self::$systemConfig['expire_days']){
$title = '账号过期提醒';
$content = '您的账号还剩'.$lastCanUseDays.'天即将过期。';
- $logId = Helpers::addEmailLog($user->username, $title, $content);
- Mail::to($user->username)->send(new userExpireWarning($logId, $lastCanUseDays));
+ $logId = Helpers::addEmailLog($user->email, $title, $content);
+ Mail::to($user->email)->send(new userExpireWarning($logId, $lastCanUseDays));
}
}
}
diff --git a/app/Console/Commands/UserTrafficAbnormalAutoWarning.php b/app/Console/Commands/UserTrafficAbnormalAutoWarning.php
index ce59d5d3..7ba37b34 100644
--- a/app/Console/Commands/UserTrafficAbnormalAutoWarning.php
+++ b/app/Console/Commands/UserTrafficAbnormalAutoWarning.php
@@ -49,7 +49,7 @@ class UserTrafficAbnormalAutoWarning extends Command
if($vo->totalTraffic > (self::$systemConfig['traffic_ban_value']*1073741824)){
$traffic = UserTrafficHourly::query()->where('node_id', 0)->where('user_id', $vo->user_id)->where('created_at', '>=', date('Y-m-d H:i:s', time()-3900))->selectRaw("user_id, sum(`u`) as totalU, sum(`d`) as totalD, sum(total) as totalTraffic")->first();
- $content = "用户**{$user->username}(ID:{$user->id})**,最近1小时**上行流量:".flowAutoShow($traffic->totalU).",下行流量:".flowAutoShow($traffic->totalD).",共计:".flowAutoShow($traffic->totalTraffic)."**。";
+ $content = "用户**{$user->email}(ID:{$user->id})**,最近1小时**上行流量:".flowAutoShow($traffic->totalU).",下行流量:".flowAutoShow($traffic->totalD).",共计:".flowAutoShow($traffic->totalTraffic)."**。";
ServerChan::send($title, $content);
}
diff --git a/app/Console/Commands/UserTrafficAutoWarning.php b/app/Console/Commands/UserTrafficAutoWarning.php
index 24f07da1..f228bd8c 100644
--- a/app/Console/Commands/UserTrafficAutoWarning.php
+++ b/app/Console/Commands/UserTrafficAutoWarning.php
@@ -42,7 +42,7 @@ class UserTrafficAutoWarning extends Command
$userList = User::query()->where('status', '>=', 0)->where('enable', 1)->where('transfer_enable', '>', 0)->get();
foreach($userList as $user){
// 用户名不是邮箱的跳过
- if(FALSE === filter_var($user->username, FILTER_VALIDATE_EMAIL)){
+ if(FALSE === filter_var($user->email, FILTER_VALIDATE_EMAIL)){
continue;
}
@@ -51,8 +51,8 @@ class UserTrafficAutoWarning extends Command
$title = '流量提醒';
$content = '流量已使用:'.$usedPercent.'%,请保持关注。';
- $logId = Helpers::addEmailLog($user->username, $title, $content);
- Mail::to($user->username)->send(new userTrafficWarning($logId, $usedPercent));
+ $logId = Helpers::addEmailLog($user->email, $title, $content);
+ Mail::to($user->email)->send(new userTrafficWarning($logId, $usedPercent));
}
}
}
diff --git a/app/Console/Commands/updateUserName.php b/app/Console/Commands/updateUserName.php
new file mode 100644
index 00000000..12113ea0
--- /dev/null
+++ b/app/Console/Commands/updateUserName.php
@@ -0,0 +1,77 @@
+get();
+ foreach($userList as $user){
+ $name = process($user->id);
+ User::query()->whereKey($user->id)->update(['username' => $name]);
+
+ Log::info('---用户[ID:'.$user->id.' - '.$user->email.'] :'.$user->username.'---');
+ }
+
+ foreach($userList as $user){
+ if($user->email == $user->username){
+ $name = process($user->id);
+
+ User::query()->whereKey($user->id)->update(['username' => $name]);
+
+ Log::info('---用户[ID:'.$user->id.' - '.$user->email.'] :'.$user->username.'---');
+ }
+ }
+
+ Log::info('----------------------------【升级用户昵称】结束----------------------------');
+ }
+}
+
+function process($id)
+{
+ $user = User::query()->whereKey($id)->first();
+ // 先设个默认值
+ $name = $user->email;
+ // 用户是否设置了QQ号
+ if($user->qq){
+ $name = QQInfo::getName3($user->qq);
+ // 检测用户注册是否为QQ邮箱
+ }elseif(strpos(strtolower($user->email), '@qq') != FALSE){
+ // 分离QQ邮箱后缀
+ $email = explode('@', $user->email);
+ if(is_numeric($email[0])){
+ $name = QQInfo::getName3($email[0]);
+ }else{
+ // 分离www前缀
+ if(strpos($email[0], '.') != FALSE){
+ $temp = explode('.', $email[0]);
+ if(is_numeric($temp[1])){
+ $name = QQInfo::getName3($temp[1]);
+ }else{
+ print_r($user->email.PHP_EOL);
+ }
+ }
+ }
+ }
+ if($name == FALSE){
+ $name = $user->email;
+ }
+
+ return $name;
+}
diff --git a/app/Console/Commands/upgradeUserResetTime.php b/app/Console/Commands/upgradeUserResetTime.php
index ae0143fe..b7da9cdb 100644
--- a/app/Console/Commands/upgradeUserResetTime.php
+++ b/app/Console/Commands/upgradeUserResetTime.php
@@ -56,7 +56,7 @@ class upgradeUserResetTime extends Command
User::query()->where('id', $user->id)->update(['reset_time' => $reset_time]);
}
- Log::info('---用户[ID:'.$user->id.' - '.$user->username.']的新重置日期为'.($reset_time != NULL? '【'.$reset_time.'】' : '【无】').'---');
+ Log::info('---用户[ID:'.$user->id.' - '.$user->username.' ('.$user->email.')]的新重置日期为'.($reset_time != NULL? '【'.$reset_time.'】' : '【无】').'---');
}
Log::info('----------------------------【升级用户重置日期】结束----------------------------');
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 3c3a279f..b1461610 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -4,6 +4,7 @@ namespace App\Console;
use App\Console\Commands\AutoClearLog;
use App\Console\Commands\AutoJob;
+use App\Console\Commands\AutoPingNode;
use App\Console\Commands\AutoReportNode;
use App\Console\Commands\AutoStatisticsNodeDailyTraffic;
use App\Console\Commands\AutoStatisticsNodeHourlyTraffic;
@@ -29,6 +30,7 @@ class Kernel extends ConsoleKernel
protected $commands = [
AutoClearLog::class,
AutoJob::class,
+ AutoPingNode::class,
AutoReportNode::class,
AutoStatisticsNodeDailyTraffic::class,
AutoStatisticsNodeHourlyTraffic::class,
@@ -59,6 +61,7 @@ class Kernel extends ConsoleKernel
$schedule->command('autoStatisticsNodeHourlyTraffic')->hourly();
$schedule->command('autoStatisticsUserHourlyTraffic')->hourly();
$schedule->command('userTrafficAbnormalAutoWarning')->hourly();
+ $schedule->command('autoPingNode')->twiceDaily();
$schedule->command('dailyJob')->daily();
$schedule->command('autoReportNode')->dailyAt('09:00');
$schedule->command('userTrafficAutoWarning')->dailyAt('10:30');
diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php
index 3cb23df3..972b1461 100644
--- a/app/Http/Controllers/AdminController.php
+++ b/app/Http/Controllers/AdminController.php
@@ -24,6 +24,7 @@ use App\Http\Models\SsNodeInfo;
use App\Http\Models\SsNodeIp;
use App\Http\Models\SsNodeLabel;
use App\Http\Models\SsNodeOnlineLog;
+use App\Http\Models\SsNodePing;
use App\Http\Models\SsNodeTrafficDaily;
use App\Http\Models\SsNodeTrafficHourly;
use App\Http\Models\User;
@@ -110,7 +111,7 @@ class AdminController extends Controller
public function userList(Request $request)
{
$id = $request->input('id');
- $username = $request->input('username');
+ $email = $request->input('email');
$wechat = $request->input('wechat');
$qq = $request->input('qq');
$port = $request->input('port');
@@ -128,8 +129,8 @@ class AdminController extends Controller
$query->where('id', $id);
}
- if(isset($username)){
- $query->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->where('email', 'like', '%'.$email.'%');
}
if(isset($wechat)){
@@ -222,8 +223,8 @@ class AdminController extends Controller
public function addUser(Request $request)
{
if($request->isMethod('POST')){
- // 校验username是否已存在
- $exists = User::query()->where('username', $request->input('username'))->first();
+ // 校验email是否已存在
+ $exists = User::query()->where('email', $request->input('email'))->first();
if($exists){
return Response::json(['status' => 'fail', 'data' => '', 'message' => '用户名已存在,请重新输入']);
}
@@ -233,7 +234,7 @@ class AdminController extends Controller
}
$user = new User();
- $user->username = trim($request->input('username'));
+ $user->email = trim($request->input('email'));
$user->password = Hash::make(trim($request->input('password'))? : makeRandStr());
$user->port = $request->input('port');
$user->passwd = empty($request->input('passwd'))? makeRandStr() : $request->input('passwd');
@@ -355,6 +356,7 @@ class AdminController extends Controller
{
if($request->isMethod('POST')){
$username = trim($request->input('username'));
+ $email = trim($request->input('email'));
$password = $request->input('password');
$port = $request->input('port');
$passwd = $request->input('passwd');
@@ -381,8 +383,8 @@ class AdminController extends Controller
$is_admin = $request->input('is_admin');
$reset_time = $request->input('reset_time');
- // 校验username是否已存在
- $exists = User::query()->where('id', '<>', $id)->where('username', $username)->first();
+ // 校验email是否已存在
+ $exists = User::query()->where('id', '<>', $id)->where('email', $email)->first();
if($exists){
return Response::json(['status' => 'fail', 'data' => '', 'message' => '用户名已存在,请重新输入']);
}
@@ -409,6 +411,7 @@ class AdminController extends Controller
try{
$data = [
'username' => $username,
+ 'email' => $email,
'port' => $port,
'passwd' => $passwd,
'vmess_id' => $vmess_id,
@@ -842,6 +845,7 @@ class AdminController extends Controller
SsNodeOnlineLog::query()->where('node_id', $id)->delete();
SsNodeTrafficDaily::query()->where('node_id', $id)->delete();
SsNodeTrafficHourly::query()->where('node_id', $id)->delete();
+ SsNodePing::query()->where('node_id', $id)->delete();
UserTrafficDaily::query()->where('node_id', $id)->delete();
UserTrafficHourly::query()->where('node_id', $id)->delete();
UserTrafficLog::query()->where('node_id', $id)->delete();
@@ -917,6 +921,44 @@ class AdminController extends Controller
return Response::view('admin.nodeMonitor', $view);
}
+ // Ping节点延迟
+ public function pingNode(Request $request)
+ {
+ $node = SsNode::query()->where('id', $request->input('id'))->first();
+ if(!$node){
+ return Response::json(['status' => 'fail', 'message' => '节点不存在,请重试']);
+ }
+
+ $result = NetworkDetection::ping($node->is_ddns? $node->server : $node->ip);
+
+ if($result){
+ $data[0] = $result['China Telecom']['time']? : '无';
+ $data[1] = $result['China Unicom']['time']? : '无';
+ $data[2] = $result['China Mobile']['time']? : '无';
+ $data[3] = $result['Hong Kong']['time']? : '无';
+
+ return Response::json(['status' => 'success', 'message' => $data]);
+ }else{
+ return Response::json(['status' => 'fail', 'message' => 'Ping访问失败']);
+ }
+ }
+
+ public function nodePingLog(Request $request)
+ {
+
+ $node_id = $request->input('nodeId');
+ $query = SsNodePing::query();
+ if(isset($node_id)){
+ $query->where('node_id', $node_id);
+ }
+
+ $view['nodeList'] = SsNode::query()->orderBy('id', 'asc')->get();
+ $view['pingLogs'] = $query->orderBy('id', 'asc')->paginate(15)->appends($request->except('page'));
+
+ return Response::view('admin.nodePingLog', $view);
+ }
+
+
// 文章列表
public function articleList(Request $request)
{
@@ -1124,7 +1166,7 @@ class AdminController extends Controller
{
$port = $request->input('port');
$user_id = $request->input('user_id');
- $username = $request->input('username');
+ $email = $request->input('email');
$nodeId = $request->input('nodeId');
$startTime = $request->input('startTime');
$endTime = $request->input('endTime');
@@ -1141,9 +1183,9 @@ class AdminController extends Controller
$query->where('user_id', $user_id);
}
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -1317,7 +1359,7 @@ class AdminController extends Controller
DB::beginTransaction();
foreach($data as $user){
$obj = new User();
- $obj->username = $user->user;
+ $obj->email = $user->user;
$obj->password = Hash::make('123456');
$obj->port = $user->port;
$obj->passwd = $user->passwd;
@@ -1514,7 +1556,7 @@ EOF;
$view['trafficHourly'] = "'".implode("','", $hourlyData)."'";
$view['monthDays'] = "'".implode("','", $monthDays)."'";
$view['dayHours'] = "'".implode("','", $dayHours)."'";
- $view['username'] = $user->username;
+ $view['email'] = $user->email;
return Response::view('admin.userMonitor', $view);
}
@@ -2041,13 +2083,13 @@ EOF;
// 提现申请列表
public function applyList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$status = $request->input('status');
$query = ReferralApply::with('user');
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -2081,7 +2123,7 @@ EOF;
// 订单列表
public function orderList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$order_sn = $request->input('order_sn');
$is_coupon = $request->input('is_coupon');
$is_expire = $request->input('is_expire');
@@ -2093,9 +2135,9 @@ EOF;
$query = Order::query()->with(['user', 'goods', 'coupon']);
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
if(isset($order_sn)){
@@ -2214,13 +2256,13 @@ EOF;
// 用户余额变动记录
public function userBalanceLogList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$query = UserBalanceLog::query()->with(['user'])->orderBy('id', 'desc');
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -2232,13 +2274,13 @@ EOF;
// 用户封禁记录
public function userBanLogList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$query = UserBanLog::query()->with(['user'])->orderBy('id', 'desc');
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -2250,13 +2292,13 @@ EOF;
// 用户流量变动记录
public function userTrafficLogList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$query = UserTrafficModifyLog::query()->with(['user', 'order', 'order.goods']);
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -2268,21 +2310,21 @@ EOF;
// 用户返利流水记录
public function userRebateList(Request $request)
{
- $username = $request->input('username');
- $ref_username = $request->input('ref_username');
+ $email = $request->input('email');
+ $ref_email = $request->input('ref_email');
$status = $request->input('status');
$query = ReferralLog::query()->with(['user', 'order'])->orderBy('status', 'asc')->orderBy('id', 'desc');
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
- if(isset($ref_username)){
- $query->whereHas('ref_user', function($q) use ($ref_username){
- $q->where('username', 'like', '%'.$ref_username.'%');
+ if(isset($ref_email)){
+ $query->whereHas('ref_user', function($q) use ($ref_email){
+ $q->where('email', 'like', '%'.$ref_email.'%');
});
}
@@ -2298,15 +2340,15 @@ EOF;
// 用户在线IP记录
public function userOnlineIPList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$port = $request->input('port');
$wechat = $request->input('wechat');
$qq = $request->input('qq');
$query = User::query()->where('status', '>=', 0)->where('enable', 1);
- if(isset($username)){
- $query->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->where('email', 'like', '%'.$email.'%');
}
if(isset($wechat)){
@@ -2426,13 +2468,13 @@ EOF;
// 邮件发送日志列表
public function emailLog(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$type = $request->input('type');
$query = EmailLog::query();
- if(isset($username)){
- $query->where('address', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->where('address', 'like', '%'.$email.'%');
}
if(isset($type)){
@@ -2448,7 +2490,7 @@ EOF;
public function onlineIPMonitor(Request $request)
{
$ip = $request->input('ip');
- $username = $request->input('username');
+ $email = $request->input('email');
$port = $request->input('port');
$nodeId = $request->input('nodeId');
$userId = $request->input('id');
@@ -2459,9 +2501,9 @@ EOF;
$query->where('ip', $ip);
}
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
diff --git a/app/Http/Controllers/Api/LoginController.php b/app/Http/Controllers/Api/LoginController.php
index 4e1fc279..0a980940 100644
--- a/app/Http/Controllers/Api/LoginController.php
+++ b/app/Http/Controllers/Api/LoginController.php
@@ -33,11 +33,11 @@ class LoginController extends Controller
// 登录返回订阅信息
public function login(Request $request)
{
- $username = trim($request->input('username'));
+ $email = trim($request->input('email'));
$password = trim($request->input('password'));
$cacheKey = 'request_times_'.md5(getClientIp());
- if(!$username || !$password){
+ if(!$email || !$password){
Cache::increment($cacheKey);
return Response::json(['status' => 'fail', 'data' => [], 'message' => '请输入用户名和密码']);
@@ -52,7 +52,7 @@ class LoginController extends Controller
Cache::put($cacheKey, 1, 3600);
}
- $user = User::query()->where('username', $username)->where('status', '>=', 0)->first();
+ $user = User::query()->where('email', $email)->where('status', '>=', 0)->first();
if(!$user){
Cache::increment($cacheKey);
diff --git a/app/Http/Controllers/Api/PayJsController.php b/app/Http/Controllers/Api/PayJsController.php
new file mode 100644
index 00000000..b0a57da4
--- /dev/null
+++ b/app/Http/Controllers/Api/PayJsController.php
@@ -0,0 +1,58 @@
+all(), TRUE).'['.getClientIp().']');
+ exit("【PayJs】接口正常");
+ }
+
+ // 接收POST请求
+ public function store(Request $request)
+ {
+ Log::info("【PayJs】回调接口[POST]:".var_export($request->all(), TRUE));
+ $config = [
+ 'mchid' => self::$systemConfig['payjs_mch_id'],
+ 'key' => self::$systemConfig['payjs_key'],
+ ];
+
+ // 初始化
+ $payjs = new Payjs($config);
+ $notify_info = $payjs->notify();
+
+ // 使用
+
+ $result = "fail";
+ if($notify_info['return_code'] == 1){ // 验证成功
+ $result = "success";
+ // 商户订单号
+ $data = [];
+ $data['out_trade_no'] = $request->input('out_trade_no');
+ // 接口交易号
+ $data['trade_no'] = $request->input('payjs_order_id');
+ // 交易状态
+ $data['trade_status'] = $request->input('return_code');
+ // 交易金额(这里是按照结算货币汇率的金额,和rmb_fee不相等)
+ $data['total_amount'] = $request->input('total_fee');
+
+ $this->tradePaid($data, 6);
+ }else{
+ Log::info('PayJs-POST:验证失败['.getClientIp().']');
+ }
+
+ // 返回验证结果
+ exit($result);
+ }
+}
diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php
index 32942dd8..838c6a82 100644
--- a/app/Http/Controllers/AuthController.php
+++ b/app/Http/Controllers/AuthController.php
@@ -50,14 +50,14 @@ class AuthController extends Controller
{
if($request->isMethod('POST')){
$this->validate($request, [
- 'username' => 'required',
+ 'email' => 'required',
'password' => 'required'
], [
- 'username.required' => trans('auth.email_null'),
+ 'email.required' => trans('auth.email_null'),
'password.required' => trans('auth.password_null')
]);
- $username = $request->input('username');
+ $email = $request->input('email');
$captcha = $request->input('captcha');
$password = $request->input('password');
$remember = $request->input('remember');
@@ -94,7 +94,7 @@ class AuthController extends Controller
}
// 验证账号并创建会话
- if(!Auth::attempt(['username' => $username, 'password' => $password], $remember)){
+ if(!Auth::attempt(['email' => $email, 'password' => $password], $remember)){
return Redirect::back()->withInput()->withErrors(trans('auth.login_error'));
}
@@ -107,7 +107,7 @@ class AuthController extends Controller
}elseif(Auth::user()->status == 0 && (self::$systemConfig['is_active_register'] || self::$systemConfig['is_verify_register'])){
Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
- return Redirect::back()->withInput()->withErrors(trans('auth.active_tip').'【'.trans('auth.active_account').'】');
+ return Redirect::back()->withInput()->withErrors(trans('auth.active_tip').'【'.trans('auth.active_account').'】');
}
}
@@ -199,14 +199,16 @@ class AuthController extends Controller
if($request->isMethod('POST')){
$this->validate($request, [
- 'username' => 'required|email|unique:user',
+ 'username' => 'required',
+ 'email' => 'required|email|unique:user',
'password' => 'required|min:6',
'confirmPassword' => 'required|same:password',
'term' => 'accepted'
], [
'username.required' => trans('auth.email_null'),
- 'username.email' => trans('auth.email_legitimate'),
- 'username.unique' => trans('auth.email_exist'),
+ 'email.required' => trans('auth.email_null'),
+ 'email.email' => trans('auth.email_legitimate'),
+ 'email.unique' => trans('auth.email_exist'),
'password.required' => trans('auth.password_null'),
'password.min' => trans('auth.password_limit'),
'confirmPassword.required' => trans('auth.confirm_password'),
@@ -215,6 +217,7 @@ class AuthController extends Controller
]);
$username = $request->input('username');
+ $email = $request->input('email');
$password = $request->input('password');
$register_token = $request->input('register_token');
$code = $request->input('code');
@@ -238,14 +241,14 @@ class AuthController extends Controller
if(self::$systemConfig['sensitiveType']){
// 校验域名邮箱是否在黑名单中
$sensitiveWords = $this->sensitiveWords(1);
- $usernameSuffix = explode('@', $username); // 提取邮箱后缀
- if(in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){
+ $emailSuffix = explode('@', $email); // 提取邮箱后缀
+ if(in_array(strtolower($emailSuffix[1]), $sensitiveWords)){
return Redirect::back()->withInput()->withErrors(trans('auth.email_banned'));
}
}else{
$sensitiveWords = $this->sensitiveWords(2);
- $usernameSuffix = explode('@', $username); // 提取邮箱后缀
- if(!in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){
+ $emailSuffix = explode('@', $email); // 提取邮箱后缀
+ if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords)){
return Redirect::back()->withInput()->withErrors(trans('auth.email_invalid'));
}
}
@@ -271,7 +274,7 @@ class AuthController extends Controller
if(!$verify_code){
return Redirect::back()->withInput($request->except(['verify_code']))->withErrors(trans('auth.captcha_null'));
}else{
- $verifyCode = VerifyCode::query()->where('username', $username)->where('code', $verify_code)->where('status', 0)->first();
+ $verifyCode = VerifyCode::query()->where('address', $email)->where('code', $verify_code)->where('status', 0)->firstOrFail();
if(!$verifyCode){
return Redirect::back()->withInput($request->except(['verify_code']))->withErrors(trans('auth.captcha_overtime'));
}
@@ -335,12 +338,14 @@ class AuthController extends Controller
$transfer_enable = 1048576*(self::$systemConfig['default_traffic']+($referral_uid? self::$systemConfig['referral_traffic'] : 0));
// 创建新用户
- $uid = Helpers::addUser($username, Hash::make($password), $transfer_enable, self::$systemConfig['default_days'], $referral_uid);
+ $uid = Helpers::addUser($email, Hash::make($password), $transfer_enable, self::$systemConfig['default_days'], $referral_uid);
// 注册失败,抛出异常
if(!$uid){
return Redirect::back()->withInput()->withErrors(trans('auth.register_fail'));
}
+ // 更新昵称
+ User::query()->whereKey($uid)->update(['username' => $username]);
// 生成订阅码
$subscribe = new UserSubscribe();
@@ -378,11 +383,11 @@ class AuthController extends Controller
// 邮箱验证码关闭情况下,发送激活邮件
if(!self::$systemConfig['is_verify_register'] && self::$systemConfig['is_active_register']){
// 生成激活账号的地址
- $token = $this->addVerifyUrl($uid, $username);
+ $token = $this->addVerifyUrl($uid, $email);
$activeUserUrl = self::$systemConfig['website_url'].'/active/'.$token;
- $logId = Helpers::addEmailLog($username, '注册激活', '请求地址:'.$activeUserUrl);
- Mail::to($username)->send(new activeUser($logId, $activeUserUrl));
+ $logId = Helpers::addEmailLog($email, '注册激活', '请求地址:'.$activeUserUrl);
+ Mail::to($email)->send(new activeUser($logId, $activeUserUrl));
Session::flash('regSuccessMsg', trans('auth.register_active_tip'));
}else{
@@ -454,9 +459,9 @@ class AuthController extends Controller
}
// 生成申请的请求地址
- private function addVerifyUrl($uid, $username)
+ private function addVerifyUrl($uid, $email)
{
- $token = md5(self::$systemConfig['website_name'].$username.microtime());
+ $token = md5(self::$systemConfig['website_name'].$email.microtime());
$verify = new Verify();
$verify->type = 1;
$verify->user_id = $uid;
@@ -473,13 +478,13 @@ class AuthController extends Controller
if($request->isMethod('POST')){
// 校验请求
$this->validate($request, [
- 'username' => 'required|email'
+ 'email' => 'required|email'
], [
- 'username.required' => trans('auth.email_null'),
- 'username.email' => trans('auth.email_legitimate')
+ 'email.required' => trans('auth.email_null'),
+ 'email.email' => trans('auth.email_legitimate')
]);
- $username = $request->input('username');
+ $email = $request->input('email');
// 是否开启重设密码
if(!self::$systemConfig['is_reset_password']){
@@ -487,30 +492,30 @@ class AuthController extends Controller
}
// 查找账号
- $user = User::query()->where('username', $username)->first();
+ $user = User::query()->where('email', $email)->first();
if(!$user){
return Redirect::back()->withErrors(trans('auth.email_notExist'));
}
// 24小时内重设密码次数限制
$resetTimes = 0;
- if(Cache::has('resetPassword_'.md5($username))){
- $resetTimes = Cache::get('resetPassword_'.md5($username));
+ if(Cache::has('resetPassword_'.md5($email))){
+ $resetTimes = Cache::get('resetPassword_'.md5($email));
if($resetTimes >= self::$systemConfig['reset_password_times']){
return Redirect::back()->withErrors(trans('auth.reset_password_limit', ['time' => self::$systemConfig['reset_password_times']]));
}
}
// 生成取回密码的地址
- $token = $this->addVerifyUrl($user->id, $username);
+ $token = $this->addVerifyUrl($user->id, $email);
// 发送邮件
$resetPasswordUrl = self::$systemConfig['website_url'].'/reset/'.$token;
- $logId = Helpers::addEmailLog($username, '重置密码', '请求地址:'.$resetPasswordUrl);
- Mail::to($username)->send(new resetPassword($logId, $resetPasswordUrl));
+ $logId = Helpers::addEmailLog($email, '重置密码', '请求地址:'.$resetPasswordUrl);
+ Mail::to($email)->send(new resetPassword($logId, $resetPasswordUrl));
- Cache::put('resetPassword_'.md5($username), $resetTimes+1, 86400);
+ Cache::put('resetPassword_'.md5($email), $resetTimes+1, 86400);
return Redirect::back()->with('successMsg', trans('auth.reset_password_success_tip'));
}else{
@@ -582,13 +587,13 @@ class AuthController extends Controller
{
if($request->isMethod('POST')){
$this->validate($request, [
- 'username' => 'required|email|exists:user,username'
+ 'email' => 'required|email|exists:user,email'
], [
- 'username.required' => trans('auth.email_null'),
- 'username.email' => trans('auth.email_legitimate'),
- 'username.exists' => trans('auth.email_notExist')
+ 'email.required' => trans('auth.email_null'),
+ 'email.email' => trans('auth.email_legitimate'),
+ 'email.exists' => trans('auth.email_notExist')
]);
- $username = $request->input('username');
+ $email = $request->input('email');
// 是否开启账号激活
if(!self::$systemConfig['is_active_register']){
@@ -596,7 +601,7 @@ class AuthController extends Controller
}
// 查找账号
- $user = User::query()->where('username', $username)->first();
+ $user = User::query()->where('email', $email)->first();
if($user->status < 0){
return Redirect::back()->withErrors(trans('auth.login_ban', ['email' => self::$systemConfig['webmaster_email']]));
}elseif($user->status > 0){
@@ -605,23 +610,23 @@ class AuthController extends Controller
// 24小时内激活次数限制
$activeTimes = 0;
- if(Cache::has('activeUser_'.md5($username))){
- $activeTimes = Cache::get('activeUser_'.md5($username));
+ if(Cache::has('activeUser_'.md5($email))){
+ $activeTimes = Cache::get('activeUser_'.md5($email));
if($activeTimes >= self::$systemConfig['active_times']){
return Redirect::back()->withErrors(trans('auth.active_limit', ['time' => self::$systemConfig['webmaster_email']]));
}
}
// 生成激活账号的地址
- $token = $this->addVerifyUrl($user->id, $username);
+ $token = $this->addVerifyUrl($user->id, $email);
// 发送邮件
$activeUserUrl = self::$systemConfig['website_url'].'/active/'.$token;
- $logId = Helpers::addEmailLog($username, '激活账号', '请求地址:'.$activeUserUrl);
- Mail::to($username)->send(new activeUser($logId, $activeUserUrl));
+ $logId = Helpers::addEmailLog($email, '激活账号', '请求地址:'.$activeUserUrl);
+ Mail::to($email)->send(new activeUser($logId, $activeUserUrl));
- Cache::put('activeUser_'.md5($username), $activeTimes+1, 86400);
+ Cache::put('activeUser_'.md5($email), $activeTimes+1, 86400);
return Redirect::back()->with('successMsg', trans('auth.register_active_tip'));
}else{
@@ -689,14 +694,14 @@ class AuthController extends Controller
public function sendCode(Request $request)
{
$validator = Validator::make($request->all(), [
- 'username' => 'required|email|unique:user'
+ 'email' => 'required|email|unique:user'
], [
- 'username.required' => trans('auth.email_null'),
- 'username.email' => trans('auth.email_legitimate'),
- 'username.unique' => trans('auth.email_exist')
+ 'email.required' => trans('auth.email_null'),
+ 'email.email' => trans('auth.email_legitimate'),
+ 'email.unique' => trans('auth.email_exist')
]);
- $username = $request->input('username');
+ $email = $request->input('email');
if($validator->fails()){
return Response::json(['status' => 'fail', 'data' => '', 'message' => $validator->getMessageBag()->first()]);
@@ -706,14 +711,14 @@ class AuthController extends Controller
if(self::$systemConfig['sensitiveType']){
// 校验域名邮箱是否在黑名单中
$sensitiveWords = $this->sensitiveWords(1);
- $usernameSuffix = explode('@', $username); // 提取邮箱后缀
- if(in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){
+ $emailSuffix = explode('@', $email); // 提取邮箱后缀
+ if(in_array(strtolower($emailSuffix[1]), $sensitiveWords)){
return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('auth.email_banned')]);
}
}else{
$sensitiveWords = $this->sensitiveWords(2);
- $usernameSuffix = explode('@', $username); // 提取邮箱后缀
- if(!in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){
+ $emailSuffix = explode('@', $email); // 提取邮箱后缀
+ if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords)){
return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('auth.email_invalid')]);
}
}
@@ -730,10 +735,10 @@ class AuthController extends Controller
// 发送邮件
$code = makeRandStr(6, TRUE);
- $logId = Helpers::addEmailLog($username, '发送注册验证码', '验证码:'.$code);
- Mail::to($username)->send(new sendVerifyCode($logId, $code));
+ $logId = Helpers::addEmailLog($email, '发送注册验证码', '验证码:'.$code);
+ Mail::to($email)->send(new sendVerifyCode($logId, $code));
- $this->addVerifyCode($username, $code);
+ $this->addVerifyCode($email, $code);
Cache::put('send_verify_code_'.md5(getClientIP()), getClientIP(), 60);
@@ -741,10 +746,10 @@ class AuthController extends Controller
}
// 生成注册验证码
- private function addVerifyCode($username, $code)
+ private function addVerifyCode($email, $code)
{
$verify = new VerifyCode();
- $verify->username = $username;
+ $verify->address = $email;
$verify->code = $code;
$verify->status = 0;
$verify->save();
diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php
index ddf01fad..af3c6c0d 100644
--- a/app/Http/Controllers/PaymentController.php
+++ b/app/Http/Controllers/PaymentController.php
@@ -22,6 +22,7 @@ use Payment\Exceptions\ClassNotFoundException;
use Payment\Exceptions\GatewayException;
use Response;
use Validator;
+use Xhat\Payjs\Payjs;
/**
* 支付控制器
@@ -40,82 +41,88 @@ class PaymentController extends Controller
$goods_id = $request->input('goods_id');
$coupon_sn = $request->input('coupon_sn');
$pay_type = $request->input('pay_type');
-
-
+ $balance = $request->input('amount');
$goods = Goods::query()->where('status', 1)->where('id', $goods_id)->first();
- if(!$goods){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:商品或服务已下架']);
- }
- // 是否有生效的套餐
- $activePlan = Order::uid()->with(['goods'])->whereHas('goods', function($q){ $q->where('type', 2); })->where('status', 2)->where('is_expire', 0)->doesntExist();
- //无生效套餐,禁止购买加油包
- if($goods->type == 1 && $activePlan){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '购买加油包前,请先购买套餐']);
- }
-
- //非余额付款下,检查对应的在线支付是否开启
- if($pay_type != 1){
- // 判断是否开启在线支付
- if(!self::$systemConfig['is_alipay'] && !self::$systemConfig['is_f2fpay']){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:系统并未开启在线支付功能']);
+ if(isset($balance)){
+ if(!is_numeric($balance) || $balance <= 0){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '充值余额不合规']);
+ }
+ $amount = $balance;
+ }elseif(isset($goods_id) && isset($pay_type)){
+ if(!$goods){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:商品或服务已下架']);
+ }
+ // 是否有生效的套餐
+ $activePlan = Order::uid()->with(['goods'])->whereHas('goods', function($q){ $q->where('type', 2); })->where('status', 2)->where('is_expire', 0)->doesntExist();
+ //无生效套餐,禁止购买加油包
+ if($goods->type == 1 && $activePlan){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '购买加油包前,请先购买套餐']);
}
- // 判断是否存在同个商品的未支付订单
- $existsOrder = Order::uid()->where('status', 0)->where('goods_id', $goods_id)->exists();
- if($existsOrder){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:尚有未支付的订单,请先去支付']);
+ //非余额付款下,检查对应的在线支付是否开启
+ if($pay_type != 1){
+ // 判断是否开启在线支付
+ if(!self::$systemConfig['is_alipay'] && !self::$systemConfig['is_f2fpay']){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:系统并未开启在线支付功能']);
+ }
+
+ // 判断是否存在同个商品的未支付订单
+ $existsOrder = Order::uid()->where('status', 0)->where('goods_id', $goods_id)->exists();
+ if($existsOrder){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:尚有未支付的订单,请先去支付']);
+ }
+ }
+
+ // 单个商品限购
+ if($goods->limit_num){
+ $count = Order::uid()->where('status', '>=', 0)->where('goods_id', $goods_id)->count();
+ if($count >= $goods->limit_num){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '此商品/服务限购'.$goods->limit_num.'次,您已购买'.$count.'次']);
+ }
+ }
+
+ // 使用优惠券
+ if($coupon_sn){
+ $coupon = Coupon::query()->where('status', 0)->whereIn('type', [1, 2])->where('sn', $coupon_sn)->first();
+ if(!$coupon){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:优惠券不存在']);
+ }
+
+ // 计算实际应支付总价
+ $amount = $coupon->type == 2? $goods->price*$coupon->discount/10 : $goods->price-$coupon->amount;
+ $amount = $amount > 0? round($amount, 2) : 0; // 四舍五入保留2位小数,避免无法正常创建订单
+ }else{
+ $amount = $goods->price;
+ }
+
+ // 价格异常判断
+ if($amount < 0){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价异常']);
+ }elseif($amount == 0 && $pay_type != 1){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价为0,无需使用在线支付']);
+ }
+
+ // 验证账号余额是否充足
+ if($pay_type == 1 && Auth::user()->balance < $amount){
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '您的余额不足,请先充值']);
}
}
- // 单个商品限购
- if($goods->limit_num){
- $count = Order::uid()->where('status', '>=', 0)->where('goods_id', $goods_id)->count();
- if($count >= $goods->limit_num){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '此商品/服务限购'.$goods->limit_num.'次,您已购买'.$count.'次']);
- }
- }
-
- // 使用优惠券
- if($coupon_sn){
- $coupon = Coupon::query()->where('status', 0)->whereIn('type', [1, 2])->where('sn', $coupon_sn)->first();
- if(!$coupon){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:优惠券不存在']);
- }
-
- // 计算实际应支付总价
- $amount = $coupon->type == 2? $goods->price*$coupon->discount/10 : $goods->price-$coupon->amount;
- $amount = $amount > 0? round($amount, 2) : 0; // 四舍五入保留2位小数,避免无法正常创建订单
- }else{
- $amount = $goods->price;
- }
-
- // 价格异常判断
- if($amount < 0){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价异常']);
- }elseif($amount == 0 && $pay_type != 1){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价为0,无需使用在线支付']);
- }
-
- // 验证账号余额是否充足
- if($pay_type == 1 && Auth::user()->balance < $amount){
- return Response::json(['status' => 'fail', 'data' => '', 'message' => '您的余额不足,请先充值']);
- }
-
- DB::beginTransaction();
try{
+ DB::beginTransaction();
$orderSn = date('ymdHis').mt_rand(100000, 999999);
// 生成订单
$order = new Order();
$order->order_sn = $orderSn;
$order->user_id = Auth::user()->id;
- $order->goods_id = $goods_id;
+ $order->goods_id = $balance? -1 : $goods_id;
$order->coupon_id = !empty($coupon)? $coupon->id : 0;
- $order->origin_amount = $goods->price;
+ $order->origin_amount = $balance? : $goods->price;
$order->amount = $amount;
- $order->expire_at = date("Y-m-d H:i:s", strtotime("+".$goods->days." days"));
+ $order->expire_at = $balance? NULL : date("Y-m-d H:i:s", strtotime("+".$goods->days." days"));
$order->is_expire = 0;
- $order->pay_way = $pay_type;
+ $order->pay_way = $balance? 0 : $pay_type;
$order->status = 0;
$order->save();
// 生成支付单
@@ -200,6 +207,31 @@ class PaymentController extends Controller
exit;
}
+ }elseif($pay_type == 6){
+ $pay_way = 1;
+ // 配置通信参数
+ $config = [
+ 'mchid' => self::$systemConfig['payjs_mch_id'],
+ 'key' => self::$systemConfig['payjs_key'],
+ ];
+
+ // 初始化
+ $payjs = new Payjs($config);
+
+ $data = [
+ 'body' => '',
+ 'total_fee' => $amount,
+ 'out_trade_no' => $orderSn,
+ 'notify_url' => self::$systemConfig['website_url']."/api/payjs",
+ ];
+
+ $result = $payjs->native($data);
+ if(!$result['return_code']){
+ Log::error("【PayJs】错误: ".$result['return_msg']);
+
+ return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:支付渠道暂时无法提供支付信息!']);
+ }
+
}else{
return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:未知支付类型']);
}
@@ -211,12 +243,16 @@ class PaymentController extends Controller
$payment->order_sn = $orderSn;
$payment->pay_way = $pay_way? : 1;
$payment->amount = $amount;
- if(self::$systemConfig['is_alipay'] && $pay_type == 4){
+ if($pay_type == 4){
$payment->qr_code = $result;
- }elseif(self::$systemConfig['is_f2fpay'] && $pay_type == 5){
+ }elseif($pay_type == 5){
$payment->qr_code = $result['qr_code'];
$payment->qr_url = 'http://qr.topscan.com/api.php?text='.$result['qr_code'].'&bg=ffffff&fg=000000&pt=1c73bd&m=10&w=400&el=1&inpt=1eabfc&logo=https://t.alipayobjects.com/tfscom/T1Z5XfXdxmXXXXXXXX.png'; //后备:https://cli.im/api/qrcode/code?text=".$result['qr_code']."&mhid=5EfGCwztyckhMHcmI9ZcOKs
$payment->qr_local_url = $payment->qr_url;
+ }elseif($pay_type == 6){
+ $payment->qr_code = $result['code_url'];
+ $payment->qr_url = $result['qrcode'];
+ $payment->qr_local_url = $payment->qr_url;
}
$payment->status = 0;
$payment->save();
@@ -254,7 +290,10 @@ class PaymentController extends Controller
// 支付单详情
public function detail($sn)
{
- $view['payment'] = Payment::uid()->with(['order', 'order.goods'])->where('sn', $sn)->firstOrFail();
+ $payment = Payment::uid()->with(['order', 'order.goods'])->where('sn', $sn)->firstOrFail();
+ $view['payment'] = $payment;
+ $view['name'] = $payment->order->goods? $payment->order->goods->name : '余额充值';
+ $view['days'] = $payment->order->goods? $payment->order->goods->days : 0;
return Response::view('payment.detail', $view);
}
diff --git a/app/Http/Controllers/SubscribeController.php b/app/Http/Controllers/SubscribeController.php
index 9b90262b..6b6ab0d1 100644
--- a/app/Http/Controllers/SubscribeController.php
+++ b/app/Http/Controllers/SubscribeController.php
@@ -33,18 +33,18 @@ class SubscribeController extends Controller
public function subscribeList(Request $request)
{
$user_id = $request->input('user_id');
- $username = $request->input('username');
+ $email = $request->input('email');
$status = $request->input('status');
- $query = UserSubscribe::with(['user:id,username']);
+ $query = UserSubscribe::with(['user:id,email']);
if(isset($user_id)){
$query->where('user_id', $user_id);
}
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -61,7 +61,7 @@ class SubscribeController extends Controller
public function subscribeLog(Request $request)
{
$id = $request->input('id');
- $query = UserSubscribeLog::with('user:username');
+ $query = UserSubscribeLog::with('user:email');
if(isset($id)){
$query->where('sid', $id);
diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php
index 838fd02a..06da51ec 100644
--- a/app/Http/Controllers/TicketController.php
+++ b/app/Http/Controllers/TicketController.php
@@ -32,13 +32,13 @@ class TicketController extends Controller
// 工单列表
public function ticketList(Request $request)
{
- $username = $request->input('username');
+ $email = $request->input('email');
$query = Ticket::query();
- if(isset($username)){
- $query->whereHas('user', function($q) use ($username){
- $q->where('username', 'like', '%'.$username.'%');
+ if(isset($email)){
+ $query->whereHas('user', function($q) use ($email){
+ $q->where('email', 'like', '%'.$email.'%');
});
}
@@ -80,8 +80,8 @@ class TicketController extends Controller
Mail::to(self::$systemConfig['webmaster_email'])->send(new replyTicket($logId, $title, $content));
}
}else{
- $logId = Helpers::addEmailLog($ticket->user->username, $title, $content);
- Mail::to($ticket->user->username)->send(new replyTicket($logId, $title, $content));
+ $logId = Helpers::addEmailLog($ticket->user->email, $title, $content);
+ Mail::to($ticket->user->email)->send(new replyTicket($logId, $title, $content));
}
// 通过ServerChan发微信消息提醒管理员
@@ -121,8 +121,8 @@ class TicketController extends Controller
$content = "工单【".$ticket->title."】已关闭";
// 发邮件通知用户
- $logId = Helpers::addEmailLog($ticket->user->username, $title, $content);
- Mail::to($ticket->user->username)->send(new closeTicket($logId, $title, $content));
+ $logId = Helpers::addEmailLog($ticket->user->email, $title, $content);
+ Mail::to($ticket->user->email)->send(new closeTicket($logId, $title, $content));
return Response::json(['status' => 'success', 'data' => '', 'message' => '关闭成功']);
}
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index ef3cafbe..9643075e 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -15,6 +15,7 @@ use App\Http\Models\ReferralLog;
use App\Http\Models\SsNode;
use App\Http\Models\SsNodeInfo;
use App\Http\Models\SsNodeLabel;
+use App\Http\Models\SsNodePing;
use App\Http\Models\Ticket;
use App\Http\Models\TicketReply;
use App\Http\Models\User;
@@ -135,7 +136,7 @@ class UserController extends Controller
return Response::json(['status' => 'fail', 'message' => '已经签到过了,明天再来吧']);
}
- $traffic = mt_rand((int)self::$systemConfig['min_rand_traffic'], (int)self::$systemConfig['max_rand_traffic']) * 1048576;
+ $traffic = mt_rand((int)self::$systemConfig['min_rand_traffic'], (int)self::$systemConfig['max_rand_traffic'])*1048576;
$ret = User::uid()->increment('transfer_enable', $traffic);
if(!$ret){
return Response::json(['status' => 'fail', 'message' => '签到失败,系统异常']);
@@ -171,6 +172,11 @@ class UserController extends Controller
$nodeList = SsNode::query()->selectRaw('ss_node.*')->leftJoin('ss_node_label', 'ss_node.id', '=', 'ss_node_label.node_id')->whereIn('ss_node_label.label_id', $userLabelIds)->where('ss_node.status', 1)->groupBy('ss_node.id')->orderBy('ss_node.sort', 'desc')->orderBy('ss_node.id', 'asc')->get();
foreach($nodeList as $node){
+ $node->ct = number_format(SsNodePing::query()->where('node_id', $node->id)->where('ct', '>', '0')->avg('ct'), 1, '.', '');
+ $node->cu = number_format(SsNodePing::query()->where('node_id', $node->id)->where('cu', '>', '0')->avg('cu'), 1, '.', '');
+ $node->cm = number_format(SsNodePing::query()->where('node_id', $node->id)->where('cm', '>', '0')->avg('cm'), 1, '.', '');
+ $node->hk = number_format(SsNodePing::query()->where('node_id', $node->id)->where('hk', '>', '0')->avg('hk'), 1, '.', '');
+
// 节点在线状态
$node->offline = SsNodeInfo::query()->where('node_id', $node->id)->where('log_time', '>=', strtotime("-10 minutes"))->orderBy('id', 'desc')->doesntExist();
// 节点标签
@@ -197,6 +203,7 @@ class UserController extends Controller
if($request->isMethod('POST')){
$old_password = trim($request->input('old_password'));
$new_password = trim($request->input('new_password'));
+ $username = trim($request->input('username'));
$wechat = trim($request->input('wechat'));
$qq = trim($request->input('qq'));
$passwd = trim($request->input('passwd'));
@@ -220,33 +227,27 @@ class UserController extends Controller
}else{
return Redirect::to('profile#tab_1')->with('successMsg', '修改成功');
}
- }
-
- // 修改联系方式
- if($wechat || $qq){
- if(empty(clean($wechat)) && empty(clean($qq))){
- return Redirect::to('profile#tab_2')->withErrors('修改失败');
- }
-
- $ret = User::uid()->update(['wechat' => $wechat, 'qq' => $qq]);
- if(!$ret){
- return Redirect::to('profile#tab_2')->withErrors('修改失败');
- }else{
- return Redirect::to('profile#tab_2')->with('successMsg', '修改成功');
- }
- }
-
- // 修改代理密码
- if($passwd){
+ // 修改代理密码
+ }elseif($passwd){
$ret = User::uid()->update(['passwd' => $passwd]);
if(!$ret){
return Redirect::to('profile#tab_3')->withErrors('修改失败');
}else{
return Redirect::to('profile#tab_3')->with('successMsg', '修改成功');
}
- }
+ }else{
+ // 修改联系方式
+ if(empty($username)){
+ return Redirect::to('profile#tab_2')->withErrors('修改失败,昵称不能为空值');
+ }
- return Redirect::to('profile#tab_1')->withErrors('非法请求');
+ $ret = User::uid()->update(['username' => $username, 'wechat' => $wechat, 'qq' => $qq]);
+ if(!$ret){
+ return Redirect::to('profile#tab_2')->withErrors('修改失败');
+ }else{
+ return Redirect::to('profile#tab_2')->with('successMsg', '修改成功');
+ }
+ }
}else{
return Response::view('user.profile');
}
@@ -347,7 +348,7 @@ class UserController extends Controller
if($obj->id){
$emailTitle = "新工单提醒";
- $content = "标题:【".$title."】
用户:".Auth::user()->username."
内容:".$content;
+ $content = "标题:【".$title."】
用户:".Auth::user()->email."
内容:".$content;
// 发邮件通知管理员
if(self::$systemConfig['webmaster_email']){
@@ -531,7 +532,7 @@ class UserController extends Controller
$view['link'] = self::$systemConfig['website_url'].'/register?aff='.Auth::user()->id;
$view['referralLogList'] = ReferralLog::uid()->with('user')->orderBy('id', 'desc')->paginate(10, ['*'], 'log_page');
$view['referralApplyList'] = ReferralApply::uid()->with('user')->orderBy('id', 'desc')->paginate(10, ['*'], 'apply_page');
- $view['referralUserList'] = User::query()->select(['username', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10, ['*'], 'user_page');
+ $view['referralUserList'] = User::query()->select(['email', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10, ['*'], 'user_page');
return Response::view('user.referral', $view);
}
@@ -651,8 +652,8 @@ class UserController extends Controller
$coupon = Coupon::query()->where('sn', $request->input('coupon_sn'))->first();
- DB::beginTransaction();
try{
+ DB::beginTransaction();
// 写入日志
$this->addUserBalanceLog(Auth::user()->id, 0, Auth::user()->balance, Auth::user()->balance+$coupon->amount, $coupon->amount, '用户手动充值 - [充值券:'.$request->input('coupon_sn').']');
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index ea24a4e3..e33503c3 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -6,8 +6,10 @@ use App\Http\Middleware\Affiliate;
use App\Http\Middleware\CheckForMaintenanceMode;
use App\Http\Middleware\EncryptCookies;
use App\Http\Middleware\isAdmin;
+use App\Http\Middleware\isAdminlogin;
use App\Http\Middleware\isForbidden;
use App\Http\Middleware\isLogin;
+use App\Http\Middleware\isMaintenance;
use App\Http\Middleware\isSecurity;
use App\Http\Middleware\RedirectIfAuthenticated;
use App\Http\Middleware\SetLocale;
@@ -85,7 +87,9 @@ class Kernel extends HttpKernel
'signed' => ValidateSignature::class,
'throttle' => ThrottleRequests::class,
'isAdmin' => isAdmin::class,
+ 'isAdminLogin' => isAdminLogin::class,
'isLogin' => isLogin::class,
+ 'isMaintenance' => isMaintenance::class,
'isSecurity' => isSecurity::class,
'isForbidden' => isForbidden::class,
'affiliate' => Affiliate::class,
diff --git a/app/Http/Middleware/isAdminlogin.php b/app/Http/Middleware/isAdminlogin.php
new file mode 100644
index 00000000..4971977f
--- /dev/null
+++ b/app/Http/Middleware/isAdminlogin.php
@@ -0,0 +1,26 @@
+guest()){
+ return Redirect::to('admin/login');
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/isMaintenance.php b/app/Http/Middleware/isMaintenance.php
new file mode 100644
index 00000000..b7d8339b
--- /dev/null
+++ b/app/Http/Middleware/isMaintenance.php
@@ -0,0 +1,27 @@
+view('auth.maintenance', ['message' => Helpers::systemConfig()['maintenance_content'], 'time' => Helpers::systemConfig()['maintenance_time']? : '0']);
+ }
+
+ return $next($request);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Models/SsNodePing.php b/app/Http/Models/SsNodePing.php
new file mode 100644
index 00000000..a9caba6e
--- /dev/null
+++ b/app/Http/Models/SsNodePing.php
@@ -0,0 +1,46 @@
+hasOne(SsNode::class, 'id', 'node_id');
+ }
+}
diff --git a/app/Http/Models/User.php b/app/Http/Models/User.php
index ccd04f19..af913706 100644
--- a/app/Http/Models/User.php
+++ b/app/Http/Models/User.php
@@ -19,6 +19,7 @@ use Illuminate\Support\Carbon;
* @package App\Http\Models
* @mixin Eloquent
* @property int $id
+ * @property string $email 邮箱
* @property string $username 用户名
* @property string $password 密码
* @property int $port 代理端口
@@ -70,6 +71,7 @@ use Illuminate\Support\Carbon;
* @method static Builder|User newQuery()
* @method static Builder|User query()
* @method static Builder|User uid()
+ * @method static Builder|User whereEmail($value)
* @method static Builder|User whereBalance($value)
* @method static Builder|User whereBanTime($value)
* @method static Builder|User whereCreatedAt($value)
diff --git a/app/Http/Models/VerifyCode.php b/app/Http/Models/VerifyCode.php
index 37215f3a..4edf5e23 100644
--- a/app/Http/Models/VerifyCode.php
+++ b/app/Http/Models/VerifyCode.php
@@ -14,7 +14,7 @@ use Illuminate\Support\Carbon;
* @package App\Http\Models
* @mixin Eloquent
* @property int $id
- * @property string $username 用户邮箱
+ * @property string $address 用户邮箱
* @property string $code 验证码
* @property int $status 状态:0-未使用、1-已使用、2-已失效
* @property Carbon|null $created_at 创建时间
@@ -28,6 +28,7 @@ use Illuminate\Support\Carbon;
* @method static Builder|VerifyCode whereStatus($value)
* @method static Builder|VerifyCode whereUpdatedAt($value)
* @method static Builder|VerifyCode whereUsername($value)
+ * @method static Builder|VerifyCode whereAddress($value)
*/
class VerifyCode extends Model
{
diff --git a/composer.json b/composer.json
index 6c021e0b..7f678780 100644
--- a/composer.json
+++ b/composer.json
@@ -10,9 +10,9 @@
"require": {
"php": "^7.2",
"ext-curl": "*",
+ "ext-dom": "*",
"ext-json": "*",
"ext-openssl": "*",
- "ext-dom": "*",
"barryvdh/laravel-debugbar": "^3.2",
"barryvdh/laravel-ide-helper": "^2.6",
"fideloper/proxy": "^4.2",
@@ -32,7 +32,8 @@
"predis/predis": "^1.1",
"rap2hpoutre/laravel-log-viewer": "^1.3",
"riverslei/payment": "*",
- "spatie/laravel-permission": "^3.4"
+ "spatie/laravel-permission": "^3.4",
+ "xhat/payjs": "^1.4"
},
"require-dev": {
"filp/whoops": "^2.7",
diff --git a/composer.lock b/composer.lock
index 5dd43cf1..748f2411 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "dd0a90c52ce518345ffab5a1c54f7be8",
+ "content-hash": "7dcdad19274c70ff2e5617fcd6f1780f",
"packages": [
{
"name": "barryvdh/laravel-debugbar",
@@ -214,16 +214,16 @@
},
{
"name": "caouecs/laravel-lang",
- "version": "4.0.10",
+ "version": "4.0.11",
"source": {
"type": "git",
"url": "https://github.com/caouecs/Laravel-lang.git",
- "reference": "db23833785bb4e675ed1d06582f375ccbb8d4e6a"
+ "reference": "134e1cbf9be14d97fc7937d7df784eae2d4bfa3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/caouecs/Laravel-lang/zipball/db23833785bb4e675ed1d06582f375ccbb8d4e6a",
- "reference": "db23833785bb4e675ed1d06582f375ccbb8d4e6a",
+ "url": "https://api.github.com/repos/caouecs/Laravel-lang/zipball/134e1cbf9be14d97fc7937d7df784eae2d4bfa3c",
+ "reference": "134e1cbf9be14d97fc7937d7df784eae2d4bfa3c",
"shasum": "",
"mirrors": [
{
@@ -235,9 +235,6 @@
"require": {
"ext-json": "*"
},
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.10"
- },
"suggest": {
"ablunier/laravel-lang-installer": "Command for easily add languages to a Laravel project",
"andrey-helldar/laravel-lang-publisher": "Easy installation and update of translation files for your project",
@@ -262,7 +259,7 @@
"laravel",
"lpm"
],
- "time": "2020-03-01T14:11:14+00:00"
+ "time": "2020-03-17T15:24:26+00:00"
},
{
"name": "composer/ca-bundle",
@@ -328,16 +325,16 @@
},
{
"name": "composer/composer",
- "version": "1.9.3",
+ "version": "1.10.1",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b"
+ "reference": "b912a45da3e2b22f5cb5a23e441b697a295ba011"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/1291a16ce3f48bfdeca39d64fca4875098af4d7b",
- "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b",
+ "url": "https://api.github.com/repos/composer/composer/zipball/b912a45da3e2b22f5cb5a23e441b697a295ba011",
+ "reference": "b912a45da3e2b22f5cb5a23e441b697a295ba011",
"shasum": "",
"mirrors": [
{
@@ -356,17 +353,17 @@
"psr/log": "^1.0",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.0",
- "symfony/console": "^2.7 || ^3.0 || ^4.0",
- "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
- "symfony/finder": "^2.7 || ^3.0 || ^4.0",
- "symfony/process": "^2.7 || ^3.0 || ^4.0"
+ "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
},
"conflict": {
"symfony/console": "2.8.38"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7",
- "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
+ "phpspec/prophecy": "^1.10",
+ "symfony/phpunit-bridge": "^3.4"
},
"suggest": {
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
@@ -379,7 +376,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.9-dev"
+ "dev-master": "1.10-dev"
}
},
"autoload": {
@@ -410,7 +407,7 @@
"dependency",
"package"
],
- "time": "2020-02-04T11:58:49+00:00"
+ "time": "2020-03-13T19:34:27+00:00"
},
{
"name": "composer/semver",
@@ -1771,6 +1768,7 @@
"email": "jakub.onderka@gmail.com"
}
],
+ "abandoned": "php-parallel-lint/php-console-color",
"time": "2018-09-29T17:23:10+00:00"
},
{
@@ -1823,6 +1821,7 @@
}
],
"description": "Highlight PHP code in terminal",
+ "abandoned": "php-parallel-lint/php-console-highlighter",
"time": "2018-09-29T18:48:56+00:00"
},
{
@@ -2252,16 +2251,16 @@
},
{
"name": "league/flysystem",
- "version": "1.0.64",
+ "version": "1.0.66",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "d13c43dbd4b791f815215959105a008515d1a2e0"
+ "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d13c43dbd4b791f815215959105a008515d1a2e0",
- "reference": "d13c43dbd4b791f815215959105a008515d1a2e0",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/021569195e15f8209b1c4bebb78bd66aa4f08c21",
+ "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21",
"shasum": "",
"mirrors": [
{
@@ -2338,20 +2337,20 @@
"sftp",
"storage"
],
- "time": "2020-02-05T18:14:17+00:00"
+ "time": "2020-03-17T18:58:12+00:00"
},
{
"name": "markbaker/complex",
- "version": "1.4.7",
+ "version": "1.4.8",
"source": {
"type": "git",
"url": "https://github.com/MarkBaker/PHPComplex.git",
- "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000"
+ "reference": "8eaa40cceec7bf0518187530b2e63871be661b72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
- "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
+ "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/8eaa40cceec7bf0518187530b2e63871be661b72",
+ "reference": "8eaa40cceec7bf0518187530b2e63871be661b72",
"shasum": "",
"mirrors": [
{
@@ -2364,14 +2363,14 @@
"php": "^5.6.0|^7.0.0"
},
"require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3",
- "phpcompatibility/php-compatibility": "^8.0",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0",
+ "phpcompatibility/php-compatibility": "^9.0",
"phpdocumentor/phpdocumentor": "2.*",
"phploc/phploc": "2.*",
"phpmd/phpmd": "2.*",
"phpunit/phpunit": "^4.8.35|^5.4.0",
"sebastian/phpcpd": "2.*",
- "squizlabs/php_codesniffer": "^3.3.0"
+ "squizlabs/php_codesniffer": "^3.4.0"
},
"type": "library",
"autoload": {
@@ -2439,7 +2438,7 @@
"complex",
"mathematics"
],
- "time": "2018-10-13T23:28:42+00:00"
+ "time": "2020-03-11T20:15:49+00:00"
},
{
"name": "markbaker/matrix",
@@ -2585,16 +2584,16 @@
},
{
"name": "mews/captcha",
- "version": "3.0.2",
+ "version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/mewebstudio/captcha.git",
- "reference": "0fa11e098549ceb8f99f93dcf24719622d8c8078"
+ "reference": "cc4d745c4f7506be0b73ac70324f71408c7e3a80"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/0fa11e098549ceb8f99f93dcf24719622d8c8078",
- "reference": "0fa11e098549ceb8f99f93dcf24719622d8c8078",
+ "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/cc4d745c4f7506be0b73ac70324f71408c7e3a80",
+ "reference": "cc4d745c4f7506be0b73ac70324f71408c7e3a80",
"shasum": "",
"mirrors": [
{
@@ -2605,17 +2604,17 @@
},
"require": {
"ext-gd": "*",
- "illuminate/config": "~5.0|^6.0",
- "illuminate/filesystem": "~5.0|^6.0",
- "illuminate/hashing": "~5.0|^6.0",
- "illuminate/session": "~5.0|^6.0",
- "illuminate/support": "~5.0|^6.0",
+ "illuminate/config": "~5.0|^6.0|^7.0",
+ "illuminate/filesystem": "~5.0|^6.0|^7.0",
+ "illuminate/hashing": "~5.0|^6.0|^7.0",
+ "illuminate/session": "~5.0|^6.0|^7.0",
+ "illuminate/support": "~5.0|^6.0|^7.0",
"intervention/image": "~2.5",
"php": "^7.2"
},
"require-dev": {
"mockery/mockery": "^1.0",
- "phpunit/phpunit": "^8.0"
+ "phpunit/phpunit": "^8.5"
},
"type": "package",
"extra": {
@@ -2656,20 +2655,20 @@
"laravel6 Captcha",
"laravel6 Security"
],
- "time": "2019-12-05T11:15:51+00:00"
+ "time": "2020-03-21T08:52:58+00:00"
},
{
"name": "mews/purifier",
- "version": "3.2.0",
+ "version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/mewebstudio/Purifier.git",
- "reference": "261ac8abb0298e853af22ca4ef57bc2a5a723d22"
+ "reference": "c70be34e78848ab1771223a771ce7397ddab8c6e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/261ac8abb0298e853af22ca4ef57bc2a5a723d22",
- "reference": "261ac8abb0298e853af22ca4ef57bc2a5a723d22",
+ "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/c70be34e78848ab1771223a771ce7397ddab8c6e",
+ "reference": "c70be34e78848ab1771223a771ce7397ddab8c6e",
"shasum": "",
"mirrors": [
{
@@ -2740,7 +2739,7 @@
"security",
"xss"
],
- "time": "2020-03-06T00:05:13+00:00"
+ "time": "2020-03-21T08:50:37+00:00"
},
{
"name": "misechow/geetest",
@@ -2998,16 +2997,16 @@
},
{
"name": "nesbot/carbon",
- "version": "2.31.0",
+ "version": "2.32.2",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d"
+ "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d",
- "reference": "bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc",
+ "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc",
"shasum": "",
"mirrors": [
{
@@ -3022,6 +3021,7 @@
"symfony/translation": "^3.4 || ^4.0 || ^5.0"
},
"require-dev": {
+ "doctrine/orm": "^2.7",
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
"kylekatarnls/multi-tester": "^1.1",
"phpmd/phpmd": "^2.8",
@@ -3070,7 +3070,7 @@
"datetime",
"time"
],
- "time": "2020-03-01T11:11:58+00:00"
+ "time": "2020-03-31T13:43:19+00:00"
},
{
"name": "nikic/php-parser",
@@ -3455,16 +3455,16 @@
},
{
"name": "phpoption/phpoption",
- "version": "1.7.2",
+ "version": "1.7.3",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
- "reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959"
+ "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959",
- "reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/4acfd6a4b33a509d8c88f50e5222f734b6aeebae",
+ "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae",
"shasum": "",
"mirrors": [
{
@@ -3474,7 +3474,7 @@
]
},
"require": {
- "php": "^5.5.9 || ^7.0"
+ "php": "^5.5.9 || ^7.0 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.3",
@@ -3512,7 +3512,7 @@
"php",
"type"
],
- "time": "2019-12-15T19:35:24+00:00"
+ "time": "2020-03-21T18:07:53+00:00"
},
{
"name": "predis/predis",
@@ -3683,16 +3683,16 @@
},
{
"name": "psr/log",
- "version": "1.1.2",
+ "version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
- "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": "",
"mirrors": [
{
@@ -3732,7 +3732,7 @@
"psr",
"psr-3"
],
- "time": "2019-11-01T11:05:21+00:00"
+ "time": "2020-03-23T09:12:05+00:00"
},
{
"name": "psr/simple-cache",
@@ -4384,16 +4384,16 @@
},
{
"name": "symfony/console",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9"
+ "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/4fa15ae7be74e53f6ec8c83ed403b97e23b665e9",
- "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9",
+ "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
+ "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
"shasum": "",
"mirrors": [
{
@@ -4462,20 +4462,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2020-02-24T13:10:00+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v5.0.5",
+ "version": "v5.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "a0b51ba9938ccc206d9284de7eb527c2d4550b44"
+ "reference": "5f8d5271303dad260692ba73dfa21777d38e124e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/a0b51ba9938ccc206d9284de7eb527c2d4550b44",
- "reference": "a0b51ba9938ccc206d9284de7eb527c2d4550b44",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e",
+ "reference": "5f8d5271303dad260692ba73dfa21777d38e124e",
"shasum": "",
"mirrors": [
{
@@ -4521,20 +4521,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2020-02-04T09:41:09+00:00"
+ "time": "2020-03-27T16:56:45+00:00"
},
{
"name": "symfony/debug",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "a980d87a659648980d89193fd8b7a7ca89d97d21"
+ "reference": "346636d2cae417992ecfd761979b2ab98b339a45"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/a980d87a659648980d89193fd8b7a7ca89d97d21",
- "reference": "a980d87a659648980d89193fd8b7a7ca89d97d21",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45",
+ "reference": "346636d2cae417992ecfd761979b2ab98b339a45",
"shasum": "",
"mirrors": [
{
@@ -4583,20 +4583,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2020-02-23T14:41:43+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "89aa4b9ac6f1f35171b8621b24f60477312085be"
+ "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/89aa4b9ac6f1f35171b8621b24f60477312085be",
- "reference": "89aa4b9ac6f1f35171b8621b24f60477312085be",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/7e9828fc98aa1cf27b422fe478a84f5b0abb7358",
+ "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358",
"shasum": "",
"mirrors": [
{
@@ -4645,20 +4645,20 @@
],
"description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com",
- "time": "2020-02-26T11:45:31+00:00"
+ "time": "2020-03-30T14:07:33+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d"
+ "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4ad8e149799d3128621a3a1f70e92b9897a8930d",
- "reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abc8e3618bfdb55e44c8c6a00abd333f831bbfed",
+ "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed",
"shasum": "",
"mirrors": [
{
@@ -4721,7 +4721,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2020-02-04T09:32:40+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -4789,16 +4789,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v4.4.5",
+ "version": "v5.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd"
+ "reference": "ca3b87dd09fff9b771731637f5379965fbfab420"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd",
- "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420",
+ "reference": "ca3b87dd09fff9b771731637f5379965fbfab420",
"shasum": "",
"mirrors": [
{
@@ -4808,13 +4808,13 @@
]
},
"require": {
- "php": "^7.1.3",
+ "php": "^7.2.5",
"symfony/polyfill-ctype": "~1.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.4-dev"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
@@ -4841,20 +4841,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2020-01-21T08:20:44+00:00"
+ "time": "2020-03-27T16:56:45+00:00"
},
{
"name": "symfony/finder",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357"
+ "reference": "5729f943f9854c5781984ed4907bbb817735776b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
- "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b",
+ "reference": "5729f943f9854c5781984ed4907bbb817735776b",
"shasum": "",
"mirrors": [
{
@@ -4896,20 +4896,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2020-02-14T07:42:58+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "7e41b4fcad4619535f45f8bfa7744c4f384e1648"
+ "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7e41b4fcad4619535f45f8bfa7744c4f384e1648",
- "reference": "7e41b4fcad4619535f45f8bfa7744c4f384e1648",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62f92509c9abfd1f73e17b8cf1b72c0bdac6611b",
+ "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b",
"shasum": "",
"mirrors": [
{
@@ -4957,20 +4957,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2020-02-13T19:40:01+00:00"
+ "time": "2020-03-30T14:07:33+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "8c8734486dada83a6041ab744709bdc1651a8462"
+ "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8c8734486dada83a6041ab744709bdc1651a8462",
- "reference": "8c8734486dada83a6041ab744709bdc1651a8462",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f356a489e51856b99908005eb7f2c51a1dfc95dc",
+ "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc",
"shasum": "",
"mirrors": [
{
@@ -5053,20 +5053,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2020-02-29T10:31:38+00:00"
+ "time": "2020-03-30T14:59:15+00:00"
},
{
"name": "symfony/mime",
- "version": "v5.0.5",
+ "version": "v5.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "9b3e5b5e58c56bbd76628c952d2b78556d305f3c"
+ "reference": "481b7d6da88922fb1e0d86a943987722b08f3955"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/9b3e5b5e58c56bbd76628c952d2b78556d305f3c",
- "reference": "9b3e5b5e58c56bbd76628c952d2b78556d305f3c",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955",
+ "reference": "481b7d6da88922fb1e0d86a943987722b08f3955",
"shasum": "",
"mirrors": [
{
@@ -5121,20 +5121,20 @@
"mime",
"mime-type"
],
- "time": "2020-02-04T09:41:09+00:00"
+ "time": "2020-03-27T16:56:45+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.14.0",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
+ "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
- "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
+ "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
"shasum": "",
"mirrors": [
{
@@ -5152,7 +5152,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.14-dev"
+ "dev-master": "1.15-dev"
}
},
"autoload": {
@@ -5185,20 +5185,20 @@
"polyfill",
"portable"
],
- "time": "2020-01-13T11:15:53+00:00"
+ "time": "2020-02-27T09:26:54+00:00"
},
{
"name": "symfony/polyfill-iconv",
- "version": "v1.14.0",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
- "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e"
+ "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/926832ce51059bb58211b7b2080a88e0c3b5328e",
- "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8",
+ "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8",
"shasum": "",
"mirrors": [
{
@@ -5216,7 +5216,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.14-dev"
+ "dev-master": "1.15-dev"
}
},
"autoload": {
@@ -5250,20 +5250,20 @@
"portable",
"shim"
],
- "time": "2020-01-13T11:15:53+00:00"
+ "time": "2020-03-09T19:04:49+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.14.0",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a"
+ "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a",
- "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf",
+ "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf",
"shasum": "",
"mirrors": [
{
@@ -5283,7 +5283,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.14-dev"
+ "dev-master": "1.15-dev"
}
},
"autoload": {
@@ -5318,20 +5318,20 @@
"portable",
"shim"
],
- "time": "2020-01-17T12:01:36+00:00"
+ "time": "2020-03-09T19:04:49+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.14.0",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
+ "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
- "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
+ "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
"shasum": "",
"mirrors": [
{
@@ -5349,7 +5349,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.14-dev"
+ "dev-master": "1.15-dev"
}
},
"autoload": {
@@ -5383,20 +5383,20 @@
"portable",
"shim"
],
- "time": "2020-01-13T11:15:53+00:00"
+ "time": "2020-03-09T19:04:49+00:00"
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.14.0",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf"
+ "reference": "37b0976c78b94856543260ce09b460a7bc852747"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf",
- "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747",
+ "reference": "37b0976c78b94856543260ce09b460a7bc852747",
"shasum": "",
"mirrors": [
{
@@ -5411,7 +5411,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.14-dev"
+ "dev-master": "1.15-dev"
}
},
"autoload": {
@@ -5444,20 +5444,20 @@
"portable",
"shim"
],
- "time": "2020-01-13T11:15:53+00:00"
+ "time": "2020-02-27T09:26:54+00:00"
},
{
"name": "symfony/polyfill-php73",
- "version": "v1.14.0",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675"
+ "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675",
- "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
+ "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
"shasum": "",
"mirrors": [
{
@@ -5472,7 +5472,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.14-dev"
+ "dev-master": "1.15-dev"
}
},
"autoload": {
@@ -5508,20 +5508,20 @@
"portable",
"shim"
],
- "time": "2020-01-13T11:15:53+00:00"
+ "time": "2020-02-27T09:26:54+00:00"
},
{
"name": "symfony/process",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7"
+ "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/bf9166bac906c9e69fb7a11d94875e7ced97bcd7",
- "reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3e40e87a20eaf83a1db825e1fa5097ae89042db3",
+ "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3",
"shasum": "",
"mirrors": [
{
@@ -5563,20 +5563,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2020-02-07T20:06:44+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/routing",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "4124d621d0e445732520037f888a0456951bde8c"
+ "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/4124d621d0e445732520037f888a0456951bde8c",
- "reference": "4124d621d0e445732520037f888a0456951bde8c",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/0f562fa613e288d7dbae6c63abbc9b33ed75a8f8",
+ "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8",
"shasum": "",
"mirrors": [
{
@@ -5645,7 +5645,7 @@
"uri",
"url"
],
- "time": "2020-02-25T12:41:09+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/service-contracts",
@@ -5713,16 +5713,16 @@
},
{
"name": "symfony/translation",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "0a19a77fba20818a969ef03fdaf1602de0546353"
+ "reference": "4e54d336f2eca5facad449d0b0118bb449375b76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/0a19a77fba20818a969ef03fdaf1602de0546353",
- "reference": "0a19a77fba20818a969ef03fdaf1602de0546353",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/4e54d336f2eca5facad449d0b0118bb449375b76",
+ "reference": "4e54d336f2eca5facad449d0b0118bb449375b76",
"shasum": "",
"mirrors": [
{
@@ -5791,7 +5791,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2020-02-04T09:32:40+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -5858,16 +5858,16 @@
},
{
"name": "symfony/var-dumper",
- "version": "v4.4.5",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "2572839911702b0405479410ea7a1334bfab0b96"
+ "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2572839911702b0405479410ea7a1334bfab0b96",
- "reference": "2572839911702b0405479410ea7a1334bfab0b96",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5a0c2d93006131a36cf6f767d10e2ca8333b0d4a",
+ "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a",
"shasum": "",
"mirrors": [
{
@@ -5936,7 +5936,7 @@
"debug",
"dump"
],
- "time": "2020-02-24T13:10:00+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -5995,16 +5995,16 @@
},
{
"name": "vlucas/phpdotenv",
- "version": "v3.6.0",
+ "version": "v3.6.2",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156"
+ "reference": "786a947e57086cf236cefdee80784634224b99fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1bdf24f065975594f6a117f0f1f6cabf1333b156",
- "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/786a947e57086cf236cefdee80784634224b99fa",
+ "reference": "786a947e57086cf236cefdee80784634224b99fa",
"shasum": "",
"mirrors": [
{
@@ -6019,8 +6019,14 @@
"symfony/polyfill-ctype": "^1.9"
},
"require-dev": {
+ "ext-filter": "*",
+ "ext-pcre": "*",
"phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0"
},
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator.",
+ "ext-pcre": "Required to use most of the library."
+ },
"type": "library",
"extra": {
"branch-alias": {
@@ -6054,7 +6060,46 @@
"env",
"environment"
],
- "time": "2019-09-10T21:37:39+00:00"
+ "time": "2020-03-27T23:36:02+00:00"
+ },
+ {
+ "name": "xhat/payjs",
+ "version": "1.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/xhat/payjs.git",
+ "reference": "3d19cbd88abbd7081738b016ce9c04a1cb9edad5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/xhat/payjs/zipball/3d19cbd88abbd7081738b016ce9c04a1cb9edad5",
+ "reference": "3d19cbd88abbd7081738b016ce9c04a1cb9edad5",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Xhat\\Payjs\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "andy",
+ "email": "andy@popfeng.com"
+ }
+ ],
+ "description": "本项目是基于 PAYJS 的 API 开发的 Composer Package,可直接用于生产环境 https://payjs.cn",
+ "time": "2019-08-13T04:58:08+00:00"
}
],
"packages-dev": [
@@ -7128,16 +7173,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "8.5.2",
+ "version": "8.5.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0"
+ "reference": "67750516bc02f300e2742fed2f50177f8f37bedf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/018b6ac3c8ab20916db85fa91bf6465acb64d1e0",
- "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67750516bc02f300e2742fed2f50177f8f37bedf",
+ "reference": "67750516bc02f300e2742fed2f50177f8f37bedf",
"shasum": "",
"mirrors": [
{
@@ -7213,7 +7258,7 @@
"testing",
"xunit"
],
- "time": "2020-01-08T08:49:49+00:00"
+ "time": "2020-03-31T08:52:04+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -8011,9 +8056,9 @@
"platform": {
"php": "^7.2",
"ext-curl": "*",
+ "ext-dom": "*",
"ext-json": "*",
- "ext-openssl": "*",
- "ext-dom": "*"
+ "ext-openssl": "*"
},
"platform-dev": []
}
diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php
index 925673ba..72defc16 100644
--- a/resources/lang/en/auth.php
+++ b/resources/lang/en/auth.php
@@ -1,6 +1,7 @@
'Username',
'active' => 'Activate',
'active_account' => 'Activate account',
'active_tip' => 'Account is not active yet, Please ',
@@ -10,7 +11,7 @@ return [
'register' => 'Sign Up',
'send' => 'Send',
'tip' => 'Tip',
- 'username' => 'Email',
+ 'email' => 'Email',
'password' => 'Password',
'confirm_password' => 'Please renter your password',
'back' => 'Back',
@@ -45,6 +46,7 @@ return [
'captcha_close' => 'Verification code registration is disable',
'captcha_send' => 'Verification code sent',
'code_error' => 'The invitation code is invalid! Please try again',
+ 'username_null' => 'Please enter your username',
'email_null' => 'Please enter your email address',
'email_normal' => 'Your account has been activated',
'email_legitimate' => 'Account must be a legitimate email',
diff --git a/resources/lang/en/home.php b/resources/lang/en/home.php
index ac9404fc..4c0b1c6c 100644
--- a/resources/lang/en/home.php
+++ b/resources/lang/en/home.php
@@ -8,7 +8,7 @@ return [
'exchange_subscribe' => 'Exchange Address',
'subscribe_warning' => 'Warning: This subscription address is for personal use only. Do not propagate the address.',
'reset_password_title' => 'Reset Password',
- 'username_placeholder' => 'Please Enter Email',
+ 'email_placeholder' => 'Please Enter Email',
'system_down' => 'The system is being maintained',
'subscribe_baned' => 'Your subscription function has been banned. Please contact the administrator.',
'download' => 'Download',
@@ -199,6 +199,6 @@ return [
'promote_link' => 'With your promotion link registration and activation, both of you will receive :traffic traffic awards; when they are consumed, you will receive :referral_percent% of their consumption amount as a reward.',
'promote_invite_code' => 'With your invite code registration and activation, both of you will receive :traffic traffic awards; when they are consumed, you will receive :referral_percent% of their consumption amount as a reward.',
'invite_user_title' => 'Invitation record',
- 'invite_user_username' => 'Username',
+ 'invite_user_email' => 'email',
'invite_user_created_at' => 'Registration time',
];
diff --git a/resources/lang/ja/auth.php b/resources/lang/ja/auth.php
index 1a573e92..6431bbf5 100644
--- a/resources/lang/ja/auth.php
+++ b/resources/lang/ja/auth.php
@@ -1,35 +1,35 @@
'アカウントを有効にする',
- 'login_button' => 'ログイン',
- 'username_placeholder' => 'アカウントを入力してください',
- 'tips' => 'システムメンテナンス中に、アカウントを有効にする必要がある場合は、管理者に連絡してください',
- 'back' => '戻る',
- 'submit' => '有効化',
- 'username' => 'アカウント',
- 'password' => 'パスワード',
- 'captcha' => '認証コード',
- 'remember' => 'ログイン状態を保持',
- 'forget_password' => 'パスワードを忘れた',
- 'login' => 'ログイン',
- 'register' => '登録する',
- 'register_tip' => 'まだアカウントはありませんか?してください',
- 'loading_captcha' => '確認コードを読み込んでいます...',
- 'required_captcha' => '確認コードの操作を正しく完了してください',
- 'fail_captcha' => 'サーバーの確認に失敗しました。もう一度お試しください',
- 'confirm_password' => 'パスワードの確認',
- 'code' => '招待コード',
- 'send' => '送 信',
- 'tnc_button' => '私はすでに読んで守ることに同意した',
- 'tnc_link' => '私は利用規約を読み、同意した',
- 'tos' => '利用規約',
- 'aup' => '許容される使用ポリシー',
- 'register_alter' => 'システムはメンテナンス中です',
- 'get_free_code' => 'クリックすると無料の招待状コードが表示されます',
- 'tnc_title' => '私は読んだことがあります',
- 'tnc_content' => '現地法令を遵守してください。',
- 'overtime' => 'リンクは有効期限切れです',
+ 'title' => 'アカウントを有効にする',
+ 'login_button' => 'ログイン',
+ 'email_placeholder' => 'アカウントを入力してください',
+ 'tips' => 'システムメンテナンス中に、アカウントを有効にする必要がある場合は、管理者に連絡してください',
+ 'back' => '戻る',
+ 'submit' => '有効化',
+ 'email' => 'アカウント',
+ 'password' => 'パスワード',
+ 'captcha' => '認証コード',
+ 'remember' => 'ログイン状態を保持',
+ 'forget_password' => 'パスワードを忘れた',
+ 'login' => 'ログイン',
+ 'register' => '登録する',
+ 'register_tip' => 'まだアカウントはありませんか?してください',
+ 'loading_captcha' => '確認コードを読み込んでいます...',
+ 'required_captcha' => '確認コードの操作を正しく完了してください',
+ 'fail_captcha' => 'サーバーの確認に失敗しました。もう一度お試しください',
+ 'confirm_password' => 'パスワードの確認',
+ 'code' => '招待コード',
+ 'send' => '送 信',
+ 'tnc_button' => '私はすでに読んで守ることに同意した',
+ 'tnc_link' => '私は利用規約を読み、同意した',
+ 'tos' => '利用規約',
+ 'aup' => '許容される使用ポリシー',
+ 'register_alter' => 'システムはメンテナンス中です',
+ 'get_free_code' => 'クリックすると無料の招待状コードが表示されます',
+ 'tnc_title' => '私は読んだことがあります',
+ 'tnc_content' => '現地法令を遵守してください。',
+ 'overtime' => 'リンクは有効期限切れです',
'active' => 'Activate',
'active_account' => 'Activate account',
@@ -38,7 +38,7 @@ return [
'code' => 'Invite Code',
'login' => 'Sign In',
'register' => 'ログイン',
- 'username' => 'メール',
+ 'email' => 'メール',
'password' => 'パスワード',
'confirm_password' => 'パスワードの確認',
'back' => 'Back',
diff --git a/resources/lang/ja/home.php b/resources/lang/ja/home.php
index 7b11c769..fc4f8c22 100644
--- a/resources/lang/ja/home.php
+++ b/resources/lang/ja/home.php
@@ -7,7 +7,7 @@ return [
'exchange_subscribe' => '変更',
'subscribe_warning' => '警告:この購読URLは個人用です。このURLは拡散しないでください。それ以外の場合は、アカウントのデータ通信量が異常である可能性があります。',
'reset_password_title' => 'パスワードを再設定する',
- 'username_placeholder' => 'アカウントを入力してください',
+ 'email_placeholder' => 'アカウントを入力してください',
'system_down' => 'システムはメンテナンス中です',
'subscribe_baned' => '購読が無効になっています。管理者にお問い合わせください。',
'download' => 'ダウンロード',
@@ -196,6 +196,6 @@ return [
'promote_link' => 'あなたの普及のリンクを通じて登録してアクティブにして、あなたたちの双方はすべて :traffic の流量の奨励を獲得します;彼らが消費する時、あなたは彼らの消費金額の :referral_percent% を獲得することを奨励します。',
'promote_invite_code' => 'お客様の招待コードの登録をアクティブにして、あなた達の双方は獲得して :traffic 流量奨励;彼らが消费の時、あなたは獲得して彼らの消費金額の :referral_percent% ご褒美として。',
'invite_user_title' => '招待状',
- 'invite_user_username' => 'ユーザー名',
+ 'invite_user_email' => 'ユーザー名',
'invite_user_created_at' => '登録時間',
];
diff --git a/resources/lang/ko/auth.php b/resources/lang/ko/auth.php
index 7165dcb0..f322e0a7 100644
--- a/resources/lang/ko/auth.php
+++ b/resources/lang/ko/auth.php
@@ -1,33 +1,33 @@
'아이디 활성화',
- 'login_button' => '로그인',
- 'username_placeholder' => '아이디를 입력하세요',
- 'tips' => '서버 점검중입니다,아이디 활성화 하실려면 관리자에게 문의하세요',
- 'back' => '돌아가기',
- 'submit' => '활성화 하기',
- 'username' => '아이디',
- 'password' => '비밀번호',
- 'captcha' => '인증코드',
- 'remember' => '로그인 상태 유지',
- 'forget_password' => '비밀번호 찾기',
- 'login' => '로그인',
- 'register' => '회원가입',
- 'register_tip' => '아직 계정이 없습니까? 제발 가라',
- 'loading_captcha' => '인증 코드로드 중 ...',
- 'required_captcha' => '인증 코드 작업을 올바르게 완료하십시오.',
- 'fail_captcha' => '서버 확인에 실패했습니다. 다시 시도하십시오.',
- 'confirm_password' => '비밀번호 재확인',
- 'code' => '처청코드',
- 'send' => '보내기',
- 'tnc_button' => '이용약관에 됭의합니다',
- 'tos' => '이용 약관',
- 'aup' => '이용 목적 제한 방침',
- 'register_alter' => '서버 점검중입니다',
- 'get_free_code' => '무료 초대 코드를 받으려면 클릭하십시오.',
- 'tnc_title' => '이용약관에 됭의합니다',
- 'tnc_content' => '현지의 법률 법규를 준수하시오.',
- 'overtime' => '링크가 만료되었습니다.',
+ 'title' => '아이디 활성화',
+ 'login_button' => '로그인',
+ 'email_placeholder' => '아이디를 입력하세요',
+ 'tips' => '서버 점검중입니다,아이디 활성화 하실려면 관리자에게 문의하세요',
+ 'back' => '돌아가기',
+ 'submit' => '활성화 하기',
+ 'email' => '아이디',
+ 'password' => '비밀번호',
+ 'captcha' => '인증코드',
+ 'remember' => '로그인 상태 유지',
+ 'forget_password' => '비밀번호 찾기',
+ 'login' => '로그인',
+ 'register' => '회원가입',
+ 'register_tip' => '아직 계정이 없습니까? 제발 가라',
+ 'loading_captcha' => '인증 코드로드 중 ...',
+ 'required_captcha' => '인증 코드 작업을 올바르게 완료하십시오.',
+ 'fail_captcha' => '서버 확인에 실패했습니다. 다시 시도하십시오.',
+ 'confirm_password' => '비밀번호 재확인',
+ 'code' => '처청코드',
+ 'send' => '보내기',
+ 'tnc_button' => '이용약관에 됭의합니다',
+ 'tos' => '이용 약관',
+ 'aup' => '이용 목적 제한 방침',
+ 'register_alter' => '서버 점검중입니다',
+ 'get_free_code' => '무료 초대 코드를 받으려면 클릭하십시오.',
+ 'tnc_title' => '이용약관에 됭의합니다',
+ 'tnc_content' => '현지의 법률 법규를 준수하시오.',
+ 'overtime' => '링크가 만료되었습니다.',
];
\ No newline at end of file
diff --git a/resources/lang/ko/home.php b/resources/lang/ko/home.php
index abc56b78..a504b86a 100644
--- a/resources/lang/ko/home.php
+++ b/resources/lang/ko/home.php
@@ -7,7 +7,7 @@ return [
'exchange_subscribe' => '주소변경',
'subscribe_warning' => '경고: 구독 주소 는 개인적 으로 사용 되 지 말고 이 주소 를 전파 하지 마시오',
'reset_password_title' => '비번리셋',
- 'username_placeholder' => '아이디를 입력하세요',
+ 'email_placeholder' => '아이디를 입력하세요',
'system_down' => '서비스 점금중',
'subscribe_baned' => '구독주소가 금지되였습니다,관리자에게 문의해주세요',
'download' => '다운로드',
@@ -193,6 +193,6 @@ return [
'promote_link' => '보급 링크 등록을 통해 활성화, 양측 모두 :traffic 유량에 장려합니다; 그들이 소비할 때, 그들의 소비 금액을 얻을 수 있는 :referral_percent% 를 장려합니다.',
'promote_invite_code' => '요청을 통해 등록 및 활성화, 양측 모두 :traffic 유량에 장려합니다, 그들이 소비할 때, 그들의 소비 금액을 얻을 수 있습니다 :referral_percent% 를 장려합니다',
'invite_user_title' => '초대장',
- 'invite_user_username' => '사용자 이름',
+ 'invite_user_email' => '사용자 이름',
'invite_user_created_at' => '등록 시간',
];
diff --git a/resources/lang/zh-CN/auth.php b/resources/lang/zh-CN/auth.php
index a6a6f919..fae4d984 100644
--- a/resources/lang/zh-CN/auth.php
+++ b/resources/lang/zh-CN/auth.php
@@ -10,7 +10,7 @@ return [
'register' => '注 册',
'send' => '发送',
'tip' => '提示',
- 'username' => '邮箱',
+ 'email' => '邮箱',
'password' => '密码',
'confirm_password' => '请再次输入密码',
'back' => '返 回',
@@ -44,6 +44,7 @@ return [
'captcha_close' => '本站关闭了通过验证码注册',
'captcha_send' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱',
'code_error' => '邀请码不可用,请重试',
+ 'username_null' => '请输入昵称',
'email_null' => '请输入邮箱账号',
'email_normal' => '账号状态正常,无需激活',
'email_legitimate' => '邮箱地址不合规',
@@ -69,5 +70,6 @@ return [
'reset_password_fail' => '重设密码失败',
'reset_password_new' => '新密码设置成功,请自行登录',
'request_error' => '请求异常,请刷新页面后重试',
+ 'username' => '昵称',
'unaccepted' => '请阅读用户条款和可接受使用条款,并同意'
];
\ No newline at end of file
diff --git a/resources/lang/zh-CN/home.php b/resources/lang/zh-CN/home.php
index ab405240..4559c0a6 100644
--- a/resources/lang/zh-CN/home.php
+++ b/resources/lang/zh-CN/home.php
@@ -8,7 +8,7 @@ return [
'exchange_subscribe' => '更换',
'subscribe_warning' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。',
'reset_password_title' => '重置密码',
- 'username_placeholder' => '请输入用户名',
+ 'email_placeholder' => '请输入用户名',
'system_down' => '系统维护中',
'subscribe_baned' => '您的订阅功能被禁用,请联系管理员恢复',
'download' => '下载',
@@ -204,6 +204,6 @@ return [
'promote_link' => '通过您的推广链接注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。',
'promote_invite_code' => '通过您的邀请码注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。',
'invite_user_title' => '邀请记录',
- 'invite_user_username' => '用户名',
+ 'invite_user_email' => '邮箱',
'invite_user_created_at' => '注册时间',
];
diff --git a/resources/lang/zh-tw/auth.php b/resources/lang/zh-tw/auth.php
index bca41071..08d101a6 100644
--- a/resources/lang/zh-tw/auth.php
+++ b/resources/lang/zh-tw/auth.php
@@ -10,7 +10,7 @@ return [
'register' => '注 冊',
'send' => '發送',
'tip' => '提示',
- 'username' => '郵箱',
+ 'email' => '郵箱',
'password' => '密碼',
'confirm_password' => '請再次輸入密碼',
'back' => '返 回',
@@ -68,5 +68,6 @@ return [
'reset_password_same_fail' => '新舊密碼一樣,請重新輸入',
'reset_password_fail' => '重設密碼失敗',
'reset_password_new' => '新密碼設置成功,請自行登錄',
- 'request_error' => '請求異常,請刷新頁面後重試'
+ 'request_error' => '請求異常,請刷新頁面後重試',
+ 'username' => '昵稱'
];
\ No newline at end of file
diff --git a/resources/lang/zh-tw/home.php b/resources/lang/zh-tw/home.php
index 73bba442..2503c790 100644
--- a/resources/lang/zh-tw/home.php
+++ b/resources/lang/zh-tw/home.php
@@ -3,12 +3,12 @@
return [
'panel' => '用戶中心',
'subscribe_help' => '互動式教程',
- 'subscribe_help' => '訂閱鏈接',
+ 'subscribe_link' => '訂閱鏈接',
'copy_subscribe_address' => '複製',
'exchange_subscribe' => '更換',
'subscribe_warning' => '注意:該訂閱鏈接僅限個人使用,請勿傳播該鏈接,這會導致您的帳號流量使用情况异常。',
'reset_password_title' => '重置密碼',
- 'username_placeholder' => '請輸入用戶名',
+ 'email_placeholder' => '請輸入用戶名',
'system_down' => '系統維護中',
'subscribe_baned' => '您的訂閱功能被暫時禁用,請聯系管理員恢復',
'download' => '下載',
@@ -197,6 +197,6 @@ return [
'promote_link' => '通過您的推廣連結注册並啟動,您和新用戶都會獲得 :traffic 流量獎勵;當他們消費時,您將獲得他們消費金額的 :referral_percent% 作為獎勵。',
'promote_invite_code' => '通過您的邀請碼注册並啟動,您和新用戶都會獲得 :traffic 流量獎勵;當他們消費時,您將獲得他們消費金額的 :referral_percent% 作為獎勵。',
'invite_user_title' => '邀請記錄',
- 'invite_user_username' => '用戶名',
+ 'invite_user_email' => '郵箱',
'invite_user_created_at' => '註冊時間',
];
diff --git a/resources/views/admin/addUser.blade.php b/resources/views/admin/addUser.blade.php
index 758fd332..6e7e70a4 100644
--- a/resources/views/admin/addUser.blade.php
+++ b/resources/views/admin/addUser.blade.php
@@ -15,9 +15,9 @@
| 申请单ID:{{$info->id}} | 申请人:{{$info->user->username}} | 申请提现金额:¥{{$info->amount}} | 申请时间:{{$info->created_at}} | +申请单ID:{{$info->id}} | 申请人:{{$info->user->email}} | 申请提现金额:¥{{$info->amount}} | 申请时间:{{$info->created_at}} | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| # | @@ -41,7 +41,7 @@ @foreach($list as $vo)|||||||||||
| {{$vo->id}} | -{{empty($vo->user) ? '【账号已删除】' : $vo->user->username}} | +{{empty($vo->user) ? '【账号已删除】' : $vo->user->email}} | {{$vo->order->goods->name}} | diff --git a/resources/views/admin/applyList.blade.php b/resources/views/admin/applyList.blade.php index 6a94d81e..362ab3ad 100644 --- a/resources/views/admin/applyList.blade.php +++ b/resources/views/admin/applyList.blade.php @@ -11,7 +11,7 @@||||||||