瀏覽代碼

二维码组件添加+支付二维码修改;代码规范化

兔姬桑 4 年之前
父節點
當前提交
144450eb52
共有 100 個文件被更改,包括 1021 次插入957 次删除
  1. 3 3
      app/Components/CaptchaVerify.php
  2. 2 2
      app/Components/Curl.php
  3. 16 15
      app/Components/Helpers.php
  4. 1 1
      app/Components/IPIP.php
  5. 1 1
      app/Components/Namesilo.php
  6. 16 11
      app/Components/NetworkDetection.php
  7. 2 3
      app/Components/PushNotification.php
  8. 4 8
      app/Components/QQInfo.php
  9. 1 1
      app/Components/QQWry.php
  10. 2 6
      app/Console/Commands/AutoClearLog.php
  11. 30 36
      app/Console/Commands/AutoJob.php
  12. 2 6
      app/Console/Commands/AutoPingNode.php
  13. 1 5
      app/Console/Commands/AutoReportNode.php
  14. 2 6
      app/Console/Commands/AutoStatisticsNodeDailyTraffic.php
  15. 2 6
      app/Console/Commands/AutoStatisticsNodeHourlyTraffic.php
  16. 2 6
      app/Console/Commands/AutoStatisticsUserDailyTraffic.php
  17. 2 6
      app/Console/Commands/AutoStatisticsUserHourlyTraffic.php
  18. 7 7
      app/Console/Commands/DailyJob.php
  19. 20 22
      app/Console/Commands/NodeBlockedDetection.php
  20. 12 10
      app/Console/Commands/ServiceTimer.php
  21. 2 2
      app/Console/Commands/UserExpireAutoWarning.php
  22. 2 2
      app/Console/Commands/UserTrafficAbnormalAutoWarning.php
  23. 2 2
      app/Console/Commands/UserTrafficAutoWarning.php
  24. 1 5
      app/Console/Commands/updateTicket.php
  25. 6 6
      app/Console/Commands/updateUserLevel.php
  26. 8 15
      app/Console/Commands/updateUserName.php
  27. 3 7
      app/Console/Commands/upgradeUserResetTime.php
  28. 20 20
      app/Exceptions/Handler.php
  29. 9 8
      app/Http/Controllers/Admin/AffiliateController.php
  30. 6 5
      app/Http/Controllers/Admin/CouponController.php
  31. 8 6
      app/Http/Controllers/Admin/MarketingController.php
  32. 31 37
      app/Http/Controllers/Admin/RuleController.php
  33. 8 8
      app/Http/Controllers/Admin/SensitiveWordsController.php
  34. 9 9
      app/Http/Controllers/Admin/ShopController.php
  35. 6 5
      app/Http/Controllers/Admin/SubscribeController.php
  36. 20 20
      app/Http/Controllers/Admin/TicketController.php
  37. 15 15
      app/Http/Controllers/Admin/ToolsController.php
  38. 156 151
      app/Http/Controllers/AdminController.php
  39. 8 5
      app/Http/Controllers/Api/LoginController.php
  40. 3 6
      app/Http/Controllers/Api/PingController.php
  41. 11 8
      app/Http/Controllers/Api/WebApi/BaseController.php
  42. 4 4
      app/Http/Controllers/Api/WebApi/TrojanController.php
  43. 5 4
      app/Http/Controllers/Api/WebApi/V2RayController.php
  44. 4 4
      app/Http/Controllers/Api/WebApi/VNetController.php
  45. 94 77
      app/Http/Controllers/AuthController.php
  46. 15 13
      app/Http/Controllers/Controller.php
  47. 14 12
      app/Http/Controllers/Gateway/AbstractPayment.php
  48. 9 8
      app/Http/Controllers/Gateway/BitpayX.php
  49. 4 3
      app/Http/Controllers/Gateway/CodePay.php
  50. 7 7
      app/Http/Controllers/Gateway/F2Fpay.php
  51. 5 4
      app/Http/Controllers/Gateway/Local.php
  52. 6 8
      app/Http/Controllers/Gateway/PayJs.php
  53. 8 9
      app/Http/Controllers/Gateway/PayPal.php
  54. 40 39
      app/Http/Controllers/NodeController.php
  55. 23 13
      app/Http/Controllers/PaymentController.php
  56. 1 1
      app/Http/Controllers/ServiceController.php
  57. 5 4
      app/Http/Controllers/User/AffiliateController.php
  58. 20 10
      app/Http/Controllers/User/SubscribeController.php
  59. 129 108
      app/Http/Controllers/UserController.php
  60. 1 1
      app/Http/Kernel.php
  61. 1 1
      app/Http/Middleware/Authenticate.php
  62. 0 7
      app/Http/Middleware/VerifyCsrfToken.php
  63. 6 3
      app/Http/Middleware/WebApi.php
  64. 1 1
      app/Http/Middleware/isAdminlogin.php
  65. 8 11
      app/Http/Middleware/isForbidden.php
  66. 2 2
      app/Http/Middleware/isSecurity.php
  67. 1 1
      app/Listeners/EventListener.php
  68. 1 1
      app/Listeners/LogSendingMessage.php
  69. 1 1
      app/Listeners/LogSentMessage.php
  70. 2 2
      app/Mail/activeUser.php
  71. 2 2
      app/Mail/closeTicket.php
  72. 2 2
      app/Mail/newTicket.php
  73. 2 2
      app/Mail/nodeCrashWarning.php
  74. 2 2
      app/Mail/replyTicket.php
  75. 2 2
      app/Mail/resetPassword.php
  76. 2 2
      app/Mail/sendUserInfo.php
  77. 2 2
      app/Mail/sendVerifyCode.php
  78. 2 2
      app/Mail/userExpireWarning.php
  79. 2 2
      app/Mail/userExpireWarningToday.php
  80. 2 2
      app/Mail/userTrafficWarning.php
  81. 1 2
      app/Models/Article.php
  82. 0 1
      app/Models/Config.php
  83. 0 1
      app/Models/Country.php
  84. 7 8
      app/Models/Coupon.php
  85. 0 1
      app/Models/CouponLog.php
  86. 6 7
      app/Models/Goods.php
  87. 5 5
      app/Models/Invite.php
  88. 0 1
      app/Models/Label.php
  89. 0 1
      app/Models/Level.php
  90. 1 2
      app/Models/Marketing.php
  91. 2 2
      app/Models/NodeAuth.php
  92. 0 1
      app/Models/NodeCertificate.php
  93. 0 1
      app/Models/NodeRule.php
  94. 0 1
      app/Models/NotificationLog.php
  95. 74 13
      app/Models/Order.php
  96. 7 7
      app/Models/Payment.php
  97. 1 2
      app/Models/PaymentCallback.php
  98. 0 1
      app/Models/ProductsPool.php
  99. 9 9
      app/Models/ReferralApply.php
  100. 9 9
      app/Models/ReferralLog.php

+ 3 - 3
app/Components/CaptchaVerify.php

@@ -9,7 +9,7 @@ namespace App\Components;
  */
 class CaptchaVerify {
 	//从后台获取 hcaptcha_sitekey 和 hcaptcha_secret
-	public static function hCaptchaGetConfig() {
+	public static function hCaptchaGetConfig(): array {
 		return [
 			"sitekey" => Helpers::systemConfig()["hcaptcha_sitekey"],
 			"secret"  => Helpers::systemConfig()["hcaptcha_secret"],
@@ -18,7 +18,7 @@ class CaptchaVerify {
 	}
 
 	//从后台获取 Geetest_id 和 Geetest_key
-	public static function geetestCaptchaGetConfig() {
+	public static function geetestCaptchaGetConfig(): array {
 		return [
 			"geetest_id"  => Helpers::systemConfig()["geetest_id"],
 			"geetest_key" => Helpers::systemConfig()["geetest_key"]
@@ -26,7 +26,7 @@ class CaptchaVerify {
 	}
 
 	//从后台获取 google_captcha_sitekey 和 google_captcha_secret
-	public static function googleCaptchaGetConfig() {
+	public static function googleCaptchaGetConfig(): array {
 		return [
 			"sitekey" => Helpers::systemConfig()["google_captcha_sitekey"],
 			"secret"  => Helpers::systemConfig()["google_captcha_secret"],

+ 2 - 2
app/Components/Curl.php

@@ -13,8 +13,8 @@ class Curl {
 		$ch = curl_init();
 		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 		curl_setopt($ch, CURLOPT_TIMEOUT, 60);
-		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 		curl_setopt($ch, CURLOPT_URL, $url);
 
 		if($data){

+ 16 - 15
app/Components/Helpers.php

@@ -54,7 +54,7 @@ class Helpers {
 	}
 
 	// 生成用户的订阅码
-	public static function makeSubscribeCode() {
+	public static function makeSubscribeCode(): string {
 		$code = makeRandStr(5);
 		if(UserSubscribe::query()->whereCode($code)->exists()){
 			$code = self::makeSubscribeCode();
@@ -74,19 +74,19 @@ class Helpers {
 	 *
 	 * @return int
 	 */
-	public static function addUser($email, $password, $transfer_enable, $data, $referral_uid = 0) {
+	public static function addUser($email, $password, $transfer_enable, $data, $referral_uid = 0): int {
 		$user = new User();
 		$user->username = $email;
 		$user->email = $email;
 		$user->password = $password;
 		// 生成一个可用端口
-		$user->port = self::systemConfig()['is_rand_port']? Helpers::getRandPort() : Helpers::getOnlyPort();
+		$user->port = self::systemConfig()['is_rand_port']? self::getRandPort() : self::getOnlyPort();
 		$user->passwd = makeRandStr();
 		$user->vmess_id = createGuid();
 		$user->enable = 1;
-		$user->method = Helpers::getDefaultMethod();
-		$user->protocol = Helpers::getDefaultProtocol();
-		$user->obfs = Helpers::getDefaultObfs();
+		$user->method = self::getDefaultMethod();
+		$user->protocol = self::getDefaultProtocol();
+		$user->obfs = self::getDefaultObfs();
 		$user->transfer_enable = $transfer_enable;
 		$user->enable_time = date('Y-m-d');
 		$user->expire_time = date('Y-m-d', strtotime("+".$data." days"));
@@ -100,7 +100,7 @@ class Helpers {
 	}
 
 	// 获取系统配置
-	public static function systemConfig() {
+	public static function systemConfig(): array {
 		$config = Config::query()->get();
 		$data = [];
 		foreach($config as $vo){
@@ -115,10 +115,10 @@ class Helpers {
 	// 获取一个随机端口
 	public static function getRandPort() {
 		$config = self::systemConfig();
-		$port = mt_rand($config['min_port'], $config['max_port']);
+		$port = random_int($config['min_port'], $config['max_port']);
 
 		$exists_port = User::query()->pluck('port')->toArray();
-		if(in_array($port, $exists_port) || in_array($port, self::$denyPorts)){
+		if(in_array($port, $exists_port, true) || in_array($port, self::$denyPorts)){
 			$port = self::getRandPort();
 		}
 
@@ -131,8 +131,8 @@ class Helpers {
 		$port = $config['min_port'];
 
 		$exists_port = User::query()->where('port', '>=', $port)->pluck('port')->toArray();
-		while(in_array($port, $exists_port) || in_array($port, self::$denyPorts)){
-			$port = $port + 1;
+		while(in_array($port, $exists_port, true) || in_array($port, self::$denyPorts, true)){
+			++$port;
 		}
 
 		return $port;
@@ -171,7 +171,8 @@ class Helpers {
 	 *
 	 * @return int
 	 */
-	public static function addNotificationLog($title, $content, $type, $address = 'admin', $status = 1, $error = '') {
+	public static function addNotificationLog($title, $content, $type, $address = 'admin', $status = 1, $error = ''
+	): int {
 		$log = new NotificationLog();
 		$log->type = $type;
 		$log->address = $address;
@@ -194,7 +195,7 @@ class Helpers {
 	 *
 	 * @return int
 	 */
-	public static function addCouponLog($couponId, $goodsId, $orderId, $description = '') {
+	public static function addCouponLog($couponId, $goodsId, $orderId, $description = ''): int {
 		$log = new CouponLog();
 		$log->coupon_id = $couponId;
 		$log->goods_id = $goodsId;
@@ -216,7 +217,7 @@ class Helpers {
 	 *
 	 * @return int
 	 */
-	public static function addUserCreditLog($userId, $oid, $before, $after, $amount, $description = '') {
+	public static function addUserCreditLog($userId, $oid, $before, $after, $amount, $description = ''): int {
 		$log = new UserCreditLog();
 		$log->user_id = $userId;
 		$log->order_id = $oid;
@@ -240,7 +241,7 @@ class Helpers {
 	 *
 	 * @return int
 	 */
-	public static function addUserTrafficModifyLog($userId, $oid, $before, $after, $description = '') {
+	public static function addUserTrafficModifyLog($userId, $oid, $before, $after, $description = ''): int {
 		$log = new UserTrafficModifyLog();
 		$log->user_id = $userId;
 		$log->order_id = $oid;

+ 1 - 1
app/Components/IPIP.php

@@ -12,7 +12,7 @@ class IPIP {
 	 *
 	 * @return array|null
 	 */
-	public static function ip($ip) {
+	public static function ip($ip): ?array {
 		$filePath = public_path('ipip.ipdb');
 		$loc = new City($filePath);
 

+ 1 - 1
app/Components/Namesilo.php

@@ -10,7 +10,7 @@ class Namesilo {
 	protected static $host;
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$host = 'https://www.namesilo.com/api/';
 		self::$systemConfig = Helpers::systemConfig();
 	}

+ 16 - 11
app/Components/NetworkDetection.php

@@ -25,17 +25,16 @@ class NetworkDetection {
 				Log::warning("【".$checkName."阻断检测】检测".$ip."时,接口返回异常访问链接:".$url);
 
 				return false;
-			}elseif(!$ret['success']){
+			}
+
+			if(!$ret['success']){
 				if($ret['error'] == "execute timeout (3s)"){
 					sleep(10);
 
 					return self::networkCheck($ip, $type, $port);
-				}else{
-					Log::warning("【".$checkName."阻断检测】检测".$ip.($port?: '')."时,返回".json_encode($ret));
-
 				}
 
-
+				Log::warning("【".$checkName."阻断检测】检测".$ip.($port?: '')."时,返回".json_encode($ret));
 				return false;
 			}
 		}catch(Exception $e){
@@ -46,13 +45,17 @@ class NetworkDetection {
 
 		if($ret['firewall-enable'] && $ret['firewall-disable']){
 			return "通讯正常"; // 正常
-		}elseif($ret['firewall-enable'] && !$ret['firewall-disable']){
+		}
+
+		if($ret['firewall-enable'] && !$ret['firewall-disable']){
 			return "海外阻断"; // 国外访问异常
-		}elseif(!$ret['firewall-enable'] && $ret['firewall-disable']){
+		}
+
+		if(!$ret['firewall-enable'] && $ret['firewall-disable']){
 			return "国内阻断"; // 被墙
-		}else{
-			return "机器宕机"; // 服务器宕机
 		}
+
+		return "机器宕机"; // 服务器宕机
 	}
 
 	/**
@@ -71,7 +74,9 @@ class NetworkDetection {
 				Log::warning("【PING】检测".$ip."时,接口返回异常访问链接:".$url);
 
 				return false;
-			}elseif($ret['code'] != 1 || $ret['msg'] != "检测成功!"){
+			}
+
+			if($ret['code'] != 1 || $ret['msg'] != "检测成功!"){
 				Log::warning("【PING】检测".$ip."时,返回".json_encode($ret));
 
 				return false;
@@ -84,4 +89,4 @@ class NetworkDetection {
 
 		return $ret['data']; // 服务器宕机
 	}
-}
+}

+ 2 - 3
app/Components/PushNotification.php

@@ -34,7 +34,7 @@ class PushNotification {
 		try{
 			// TODO:一天仅可发送不超过500条
 			$url = 'https://sc.ftqq.com/'.Helpers::systemConfig()['server_chan_key'].'.send?text='.$title.'&desp='.urlencode($content);
-			$result = json_decode(Curl::send($url));
+			$result = json_decode(Curl::send($url), true);
 			if(empty(Helpers::systemConfig()['server_chan_key'])){
 				$result = new stdClass();
 				$result->errno = true;
@@ -50,7 +50,6 @@ class PushNotification {
 			Log::error('ServerChan消息推送异常:'.$e);
 		}
 
-
 		return $ret;
 	}
 
@@ -66,7 +65,7 @@ class PushNotification {
 		$ret = false;
 		try{
 			$url = 'https://api.day.app/'.Helpers::systemConfig()['bark_key'].'/'.$title.'/'.$content;
-			$result = json_decode(Curl::send($url));
+			$result = json_decode(Curl::send($url), true);
 			if($result){
 				if($result->code == 200){
 					Helpers::addNotificationLog($title, $content, 3);

+ 4 - 8
app/Components/QQInfo.php

@@ -35,10 +35,8 @@ class QQInfo {
 		$url = 'https://api.toubiec.cn/qq?qq='.$qq.'&size=100';
 		$ret = json_decode(Curl::send($url), true);
 		// 接口是否异常
-		if($ret){
-			if($ret['code'] == 200){
-				return $ret['name'];
-			}
+		if($ret && $ret['code'] == 200){
+			return $ret['name'];
 		}
 
 		echo $qq.PHP_EOL;
@@ -51,10 +49,8 @@ class QQInfo {
 		$url = 'https://api.unipay.qq.com/v1/r/1450000186/wechat_query?cmd=1&pf=mds_storeopen_qb-__mds_qqclub_tab_-html5&pfkey=pfkey&from_h5=1&from_https=1&openid=openid&openkey=openkey&session_id=hy_gameid&session_type=st_dummy&qq_appid=&offerId=1450000186&sandbox=&provide_uin='.$qq;
 		$ret = json_decode(Curl::send($url), true);
 		// 接口是否异常
-		if($ret){
-			if($ret['ret'] == 0){
-				return urldecode($ret['nick']);
-			}
+		if($ret && $ret['ret'] == 0){
+			return urldecode($ret['nick']);
 		}
 
 		echo $qq.PHP_EOL;

+ 1 - 1
app/Components/QQWry.php

@@ -12,7 +12,7 @@ class QQWry {
 	 *
 	 * @return array
 	 */
-	public static function ip($ip) {
+	public static function ip($ip): array {
 		$filePath = public_path('qqwry.dat');
 
 		return IpLocation::getLocation($ip, $filePath);

+ 2 - 6
app/Console/Commands/AutoClearLog.php

@@ -22,11 +22,7 @@ class AutoClearLog extends Command {
 	protected $signature = 'autoClearLog';
 	protected $description = '自动清除日志';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 清除日志
@@ -41,7 +37,7 @@ class AutoClearLog extends Command {
 	}
 
 	// 清除日志
-	private function clearLog() {
+	private function clearLog(): void {
 		try{
 			// 自动清除30分钟以前的节点负载信息日志
 			SsNodeInfo::query()->where('log_time', '<=', strtotime("-30 minutes"))->delete();

+ 30 - 36
app/Console/Commands/AutoJob.php

@@ -36,7 +36,7 @@ class AutoJob extends Command {
 	/*
 	 * 警告:除非熟悉业务流程,否则不推荐更改以下执行顺序,随意变更以下顺序可能导致系统异常
 	 */
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 关闭超时未支付在线订单
@@ -64,11 +64,9 @@ class AutoJob extends Command {
 		$this->checkNodeStatus();
 
 		// 检查 维护模式
-		if(self::$systemConfig['maintenance_mode']){
-			if(strtotime(self::$systemConfig['maintenance_time']) < time()){
-				Config::query()->whereName('maintenance_mode')->update(['value' => 0]);
-				Config::query()->whereName('maintenance_time')->update(['value' => '']);
-			}
+		if(self::$systemConfig['maintenance_mode'] && strtotime(self::$systemConfig['maintenance_time']) < time()){
+			Config::query()->whereName('maintenance_mode')->update(['value' => 0]);
+			Config::query()->whereName('maintenance_time')->update(['value' => '']);
 		}
 
 		$jobEndTime = microtime(true);
@@ -78,7 +76,7 @@ class AutoJob extends Command {
 	}
 
 	// 关闭超时未在线支付订单
-	private function closePayments() {
+	private function closePayments(): void {
 		// 关闭超时未支付的在线订单(15分钟关闭订单)
 		$paymentList = Payment::query()
 		                      ->whereStatus(0)
@@ -116,19 +114,17 @@ class AutoJob extends Command {
 	}
 
 	//返回优惠券
-	private function returnCoupon($coupon_id) {
+	private function returnCoupon($coupon_id): bool {
 		$coupon = Coupon::query()->whereId($coupon_id)->get();
-		if($coupon){
-			if($coupon->type < 3){
-				Coupon::query()->whereId($coupon_id)->increment('usage_count', 1, ['status' => 0]);
-				return true;
-			}
+		if($coupon && $coupon->type < 3){
+			Coupon::query()->whereId($coupon_id)->increment('usage_count', 1, ['status' => 0]);
+			return true;
 		}
 		return false;
 	}
 
 	// 关闭超时未支付订单
-	private function closeOrders() {
+	private function closeOrders(): void {
 		// 关闭超时未支付的支付订单(15分钟关闭订单)
 		$orderList = Order::query()
 		                  ->whereStatus(0)
@@ -161,7 +157,7 @@ class AutoJob extends Command {
 	}
 
 	// 注册验证码自动置无效 & 优惠券无效化
-	private function expireCode() {
+	private function expireCode(): void {
 		// 注册验证码自动置无效
 		VerifyCode::query()
 		          ->whereStatus(0)
@@ -179,7 +175,7 @@ class AutoJob extends Command {
 	}
 
 	// 封禁访问异常的订阅链接
-	private function blockSubscribe() {
+	private function blockSubscribe(): void {
 		if(self::$systemConfig['is_subscribe_ban']){
 			$userList = User::query()->where('status', '>=', 0)->whereEnable(1)->get();
 			foreach($userList as $user){
@@ -214,7 +210,7 @@ class AutoJob extends Command {
 	 * @param  int     $minutes      封禁时长,单位分钟
 	 * @param  string  $description  封禁理由
 	 */
-	private function addUserBanLog($userId, $minutes, $description) {
+	private function addUserBanLog($userId, $minutes, $description): void {
 		$log = new UserBanLog();
 		$log->user_id = $userId;
 		$log->minutes = $minutes;
@@ -223,7 +219,7 @@ class AutoJob extends Command {
 	}
 
 	// 封禁账号
-	private function blockUsers() {
+	private function blockUsers(): void {
 		// 封禁1小时内流量异常账号
 		if(self::$systemConfig['is_traffic_ban']){
 			$userList = User::query()->whereEnable(1)->where('status', '>=', 0)->whereBanTime(0)->get();
@@ -268,7 +264,7 @@ class AutoJob extends Command {
 	}
 
 	// 解封被临时封禁的账号
-	private function unblockUsers() {
+	private function unblockUsers(): void {
 		// 解封被临时封禁的账号
 		$userList = User::query()->whereEnable(0)->where('status', '>=', 0)->where('ban_time', '>', 0)->get();
 		foreach($userList as $user){
@@ -297,7 +293,7 @@ class AutoJob extends Command {
 	}
 
 	// 端口回收与分配
-	private function dispatchPort() {
+	private function dispatchPort(): void {
 		if(self::$systemConfig['auto_release_port']){
 			## 自动分配端口
 			$userList = User::query()->whereEnable(1)->where('status', '>=', 0)->wherePort(0)->get();
@@ -320,7 +316,7 @@ class AutoJob extends Command {
 	}
 
 	// 检测节点是否离线
-	private function checkNodeStatus() {
+	private function checkNodeStatus(): void {
 		if(self::$systemConfig['is_node_offline']){
 			$nodeList = SsNode::whereIsRelay(0)->whereStatus(1)->get();
 			foreach($nodeList as $node){
@@ -330,22 +326,20 @@ class AutoJob extends Command {
 				                     ->where('log_time', '>=', strtotime("-10 minutes"))
 				                     ->orderByDesc('id')
 				                     ->doesntExist();
-				if($nodeTTL){
-					if(self::$systemConfig['offline_check_times']){
-						// 已通知次数
-						$cacheKey = 'offline_check_times'.$node->id;
-						if(Cache::has($cacheKey)){
-							$times = Cache::get($cacheKey);
-						}else{
-							// 键将保留24小时
-							Cache::put($cacheKey, 1, Day);
-							$times = 1;
-						}
+				if($nodeTTL && self::$systemConfig['offline_check_times']){
+					// 已通知次数
+					$cacheKey = 'offline_check_times'.$node->id;
+					if(Cache::has($cacheKey)){
+						$times = Cache::get($cacheKey);
+					}else{
+						// 键将保留24小时
+						Cache::put($cacheKey, 1, Day);
+						$times = 1;
+					}
 
-						if($times < self::$systemConfig['offline_check_times']){
-							Cache::increment($cacheKey);
-							PushNotification::send('节点异常警告', "节点**{$node->name}【{$node->ip}】**异常:**心跳异常,可能离线了**");
-						}
+					if($times < self::$systemConfig['offline_check_times']){
+						Cache::increment($cacheKey);
+						PushNotification::send('节点异常警告', "节点**{$node->name}【{$node->ip}】**异常:**心跳异常,可能离线了**");
 					}
 				}
 			}

+ 2 - 6
app/Console/Commands/AutoPingNode.php

@@ -12,11 +12,7 @@ class AutoPingNode extends Command {
 	protected $signature = 'autoPingNode';
 	protected $description = '节点定时Ping测速';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		$nodeList = SsNode::query()->whereIsRelay(0)->whereStatus(1)->get();
@@ -31,7 +27,7 @@ class AutoPingNode extends Command {
 	}
 
 	// 节点Ping测速
-	private function pingNode($nodeId, $ip) {
+	private function pingNode($nodeId, $ip): void {
 		$result = NetworkDetection::ping($ip);
 
 		if($result){

+ 1 - 5
app/Console/Commands/AutoReportNode.php

@@ -13,11 +13,7 @@ class AutoReportNode extends Command {
 	protected $signature = 'autoReportNode';
 	protected $description = '自动报告节点昨日使用情况';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		if(Helpers::systemConfig()['node_daily_report']){

+ 2 - 6
app/Console/Commands/AutoStatisticsNodeDailyTraffic.php

@@ -12,11 +12,7 @@ class AutoStatisticsNodeDailyTraffic extends Command {
 	protected $signature = 'autoStatisticsNodeDailyTraffic';
 	protected $description = '自动统计节点每日流量';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		$nodeList = SsNode::query()->whereStatus(1)->orderBy('id')->get();
@@ -30,7 +26,7 @@ class AutoStatisticsNodeDailyTraffic extends Command {
 		Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
 	}
 
-	private function statisticsByNode($node_id) {
+	private function statisticsByNode($node_id): void {
 		$start_time = strtotime(date('Y-m-d 00:00:00', strtotime("-1 day")));
 		$end_time = strtotime(date('Y-m-d 23:59:59', strtotime("-1 day")));
 

+ 2 - 6
app/Console/Commands/AutoStatisticsNodeHourlyTraffic.php

@@ -12,11 +12,7 @@ class AutoStatisticsNodeHourlyTraffic extends Command {
 	protected $signature = 'autoStatisticsNodeHourlyTraffic';
 	protected $description = '自动统计节点每小时流量';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		$nodeList = SsNode::query()->whereStatus(1)->orderBy('id')->get();
@@ -30,7 +26,7 @@ class AutoStatisticsNodeHourlyTraffic extends Command {
 		Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
 	}
 
-	private function statisticsByNode($node_id) {
+	private function statisticsByNode($node_id): void {
 		$start_time = strtotime(date('Y-m-d H:i:s', strtotime("-1 hour")));
 		$end_time = time();
 

+ 2 - 6
app/Console/Commands/AutoStatisticsUserDailyTraffic.php

@@ -13,11 +13,7 @@ class AutoStatisticsUserDailyTraffic extends Command {
 	protected $signature = 'autoStatisticsUserDailyTraffic';
 	protected $description = '自动统计用户每日流量';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		$userList = User::query()->where('status', '>=', 0)->whereEnable(1)->get();
@@ -38,7 +34,7 @@ class AutoStatisticsUserDailyTraffic extends Command {
 		Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
 	}
 
-	private function statisticsByNode($user_id, $node_id = 0) {
+	private function statisticsByNode($user_id, $node_id = 0): void {
 		$start_time = strtotime(date('Y-m-d 00:00:00', strtotime("-1 day")));
 		$end_time = strtotime(date('Y-m-d 23:59:59', strtotime("-1 day")));
 

+ 2 - 6
app/Console/Commands/AutoStatisticsUserHourlyTraffic.php

@@ -13,11 +13,7 @@ class AutoStatisticsUserHourlyTraffic extends Command {
 	protected $signature = 'autoStatisticsUserHourlyTraffic';
 	protected $description = '自动统计用户每小时流量';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		$userList = User::query()->where('status', '>=', 0)->whereEnable(1)->get();
@@ -38,7 +34,7 @@ class AutoStatisticsUserHourlyTraffic extends Command {
 		Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
 	}
 
-	private function statisticsByNode($user_id, $node_id = 0) {
+	private function statisticsByNode($user_id, $node_id = 0): void {
 		$start_time = strtotime(date('Y-m-d H:i:s', strtotime("-1 hour")));
 		$end_time = time();
 

+ 7 - 7
app/Console/Commands/DailyJob.php

@@ -22,7 +22,7 @@ class DailyJob extends Command {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 过期用户处理
@@ -42,7 +42,7 @@ class DailyJob extends Command {
 		Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
 	}
 
-	private function expireUser() {
+	private function expireUser(): void {
 		// 过期用户处理
 		$userList = User::query()
 		                ->where('status', '>=', 0)
@@ -93,7 +93,7 @@ class DailyJob extends Command {
 	 * @param  int     $minutes      封禁时长,单位分钟
 	 * @param  string  $description  封禁理由
 	 */
-	private function addUserBanLog($userId, $minutes, $description) {
+	private function addUserBanLog($userId, $minutes, $description): void {
 		$log = new UserBanLog();
 		$log->user_id = $userId;
 		$log->minutes = $minutes;
@@ -102,7 +102,7 @@ class DailyJob extends Command {
 	}
 
 	// 关闭超过72小时未处理的工单
-	private function closeTickets() {
+	private function closeTickets(): void {
 		$ticketList = Ticket::query()
 		                    ->where('updated_at', '<=', date('Y-m-d', strtotime("-3 days")))
 		                    ->whereStatus(1)
@@ -116,7 +116,7 @@ class DailyJob extends Command {
 	}
 
 	// 重置用户流量
-	private function resetUserTraffic() {
+	private function resetUserTraffic(): void {
 		$userList = User::query()
 		                ->where('status', '>=', 0)
 		                ->where('expire_time', '>', date('Y-m-d'))
@@ -134,7 +134,7 @@ class DailyJob extends Command {
 			              ->whereUserId($user->id)
 			              ->whereStatus(2)
 			              ->whereIsExpire(0)
-			              ->whereHas('goods', function($q) {
+			              ->whereHas('goods', static function($q) {
 				              $q->whereType(2);
 			              })
 			              ->first();
@@ -150,7 +150,7 @@ class DailyJob extends Command {
 			     ->whereUserId($user->id)
 			     ->whereStatus(2)
 			     ->whereIsExpire(0)
-			     ->whereHas('goods', function($q) {
+			     ->whereHas('goods', static function($q) {
 				     $q->whereType(1);
 			     })
 			     ->update(['is_expire' => 1]);

+ 20 - 22
app/Console/Commands/NodeBlockedDetection.php

@@ -22,7 +22,7 @@ class NodeBlockedDetection extends Command {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 		if(self::$systemConfig['nodes_detection']){
 			if(!Cache::has('LastCheckTime')){
@@ -41,7 +41,7 @@ class NodeBlockedDetection extends Command {
 	}
 
 	// 监测节点状态
-	private function checkNodes() {
+	private function checkNodes(): void {
 		$nodeList = SsNode::query()->whereIsRelay(0)->whereStatus(1)->where('detection_type', '>', 0)->get();
 		$sendText = false;
 		$message = "| 线路 | 协议 | 状态 |\r\n| ------ | ------ | ------ |\r\n";
@@ -79,25 +79,23 @@ class NodeBlockedDetection extends Command {
 			}
 
 			// 节点检测次数
-			if($info){
-				if(self::$systemConfig['detection_check_times']){
-					// 已通知次数
-					$cacheKey = 'detection_check_times'.$node->id;
-					if(Cache::has($cacheKey)){
-						$times = Cache::get($cacheKey);
-					}else{
-						// 键将保留12小时,多10分钟防意外
-						Cache::put($cacheKey, 1, 43800);
-						$times = 1;
-					}
+			if($info && self::$systemConfig['detection_check_times']){
+				// 已通知次数
+				$cacheKey = 'detection_check_times'.$node->id;
+				if(Cache::has($cacheKey)){
+					$times = Cache::get($cacheKey);
+				}else{
+					// 键将保留12小时,多10分钟防意外
+					Cache::put($cacheKey, 1, 43800);
+					$times = 1;
+				}
 
-					if($times < self::$systemConfig['detection_check_times']){
-						Cache::increment($cacheKey);
-					}else{
-						Cache::forget($cacheKey);
-						SsNode::query()->whereId($node->id)->update(['status' => 0]);
-						$additionalMessage .= "\r\n节点【{$node->name}】自动进入维护状态\r\n";
-					}
+				if($times < self::$systemConfig['detection_check_times']){
+					Cache::increment($cacheKey);
+				}else{
+					Cache::forget($cacheKey);
+					SsNode::query()->whereId($node->id)->update(['status' => 0]);
+					$additionalMessage .= "\r\n节点【{$node->name}】自动进入维护状态\r\n";
 				}
 			}
 		}
@@ -109,7 +107,7 @@ class NodeBlockedDetection extends Command {
 		}
 
 		// 随机生成下次检测时间
-		Cache::put('LastCheckTime', time() + mt_rand(3000, Hour), 3700);
+		Cache::put('LastCheckTime', time() + random_int(3000, Hour), 3700);
 	}
 
 	/**
@@ -119,7 +117,7 @@ class NodeBlockedDetection extends Command {
 	 * @param  string  $content  消息内容
 	 *
 	 */
-	private function notifyMaster($title, $content) {
+	private function notifyMaster($title, $content): void {
 		$result = PushNotification::send($title, $content);
 		if(!$result && self::$systemConfig['webmaster_email']){
 			$logId = Helpers::addNotificationLog($title, $content, 1, self::$systemConfig['webmaster_email']);

+ 12 - 10
app/Console/Commands/ServiceTimer.php

@@ -15,11 +15,7 @@ class ServiceTimer extends Command {
 	protected $signature = 'serviceTimer';
 	protected $description = '服务计时器';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 扣减用户到期商品的流量
@@ -32,11 +28,17 @@ class ServiceTimer extends Command {
 	}
 
 	// 扣减用户到期商品的流量
-	private function decGoodsTraffic() {
+	private function decGoodsTraffic(): void {
 		//获取失效的套餐
-		$orderList = Order::query()->with(['goods'])->whereStatus(2)->whereIsExpire(0)->whereHas('goods', function($q) {
-			$q->whereType(2);
-		})->where('expire_at', '<=', date('Y-m-d H:i:s'))->get();
+		$orderList = Order::query()
+		                  ->with(['goods'])
+		                  ->whereStatus(2)
+		                  ->whereIsExpire(0)
+		                  ->whereHas('goods', static function($q) {
+			                  $q->whereType(2);
+		                  })
+		                  ->where('expire_at', '<=', date('Y-m-d H:i:s'))
+		                  ->get();
 		if($orderList->isNotEmpty()){
 			try{
 				DB::beginTransaction();
@@ -50,7 +52,7 @@ class ServiceTimer extends Command {
 					     ->whereUserId($order->user_id)
 					     ->whereStatus(2)
 					     ->whereIsExpire(0)
-					     ->whereHas('goods', function($q) {
+					     ->whereHas('goods', static function($q) {
 						     $q->whereType(1);
 					     })
 					     ->update(['is_expire' => 1]);

+ 2 - 2
app/Console/Commands/UserExpireAutoWarning.php

@@ -20,7 +20,7 @@ class UserExpireAutoWarning extends Command {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 用户临近到期自动发邮件提醒
@@ -34,7 +34,7 @@ class UserExpireAutoWarning extends Command {
 		Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
 	}
 
-	private function userExpireWarning() {
+	private function userExpireWarning(): void {
 		// 只取SSR没被禁用的用户,其他不用管
 		$userList = User::query()->whereEnable(1)->get();
 		foreach($userList as $user){

+ 2 - 2
app/Console/Commands/UserTrafficAbnormalAutoWarning.php

@@ -19,7 +19,7 @@ class UserTrafficAbnormalAutoWarning extends Command {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 用户流量异常警告
@@ -32,7 +32,7 @@ class UserTrafficAbnormalAutoWarning extends Command {
 	}
 
 	// 用户流量异常警告
-	private function userTrafficAbnormalWarning() {
+	private function userTrafficAbnormalWarning(): void {
 		// 1小时内流量异常用户(多往前取5分钟,防止数据统计任务执行时间过长导致没有数据)
 		$userTotalTrafficList = UserTrafficHourly::query()
 		                                         ->whereNodeId(0)

+ 2 - 2
app/Console/Commands/UserTrafficAutoWarning.php

@@ -19,7 +19,7 @@ class UserTrafficAutoWarning extends Command {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function handle() {
+	public function handle(): void {
 		$jobStartTime = microtime(true);
 
 		// 用户流量超过警告阈值自动发邮件提醒
@@ -34,7 +34,7 @@ class UserTrafficAutoWarning extends Command {
 	}
 
 	// 用户流量超过警告阈值自动发邮件提醒
-	private function userTrafficWarning() {
+	private function userTrafficWarning(): void {
 		$userList = User::query()->where('status', '>=', 0)->whereEnable(1)->where('transfer_enable', '>', 0)->get();
 		foreach($userList as $user){
 			// 用户名不是邮箱的跳过

+ 1 - 5
app/Console/Commands/updateTicket.php

@@ -11,11 +11,7 @@ class updateTicket extends Command {
 	protected $signature = 'updateTicket';
 	protected $description = '更新工单';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		Log::info('----------------------------【更新工单】开始----------------------------');
 		// 获取管理员
 		$adminList = User::query()->whereIsAdmin(1)->get();

+ 6 - 6
app/Console/Commands/updateUserLevel.php

@@ -12,11 +12,7 @@ class updateUserLevel extends Command {
 	protected $signature = 'updateUserLevel';
 	protected $description = '更新用户等级';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		Log::info('----------------------------【用户等级升级】开始----------------------------');
 		// 预设level 0
 		$users = User::query()->where('level', '<>', 0)->get();
@@ -26,7 +22,11 @@ class updateUserLevel extends Command {
 		// 获取商品列表,取新等级
 		$goodList = Goods::query()->where('level', '<>', 0)->whereType(2)->get();
 		// 取生效的套餐
-		$orderList = Order::query()->whereIn('goods_id', $goodList->pluck('id')->toArray())->whereStatus(2)->whereIsExpire(0)->get();
+		$orderList = Order::query()
+		                  ->whereIn('goods_id', $goodList->pluck('id')->toArray())
+		                  ->whereStatus(2)
+		                  ->whereIsExpire(0)
+		                  ->get();
 		foreach($orderList as $order){
 			$ret = User::query()->whereId($order->user_id)->update(['level' => $order->goods->level]);
 

+ 8 - 15
app/Console/Commands/updateUserName.php

@@ -11,11 +11,7 @@ class updateUserName extends Command {
 	protected $signature = 'updateUserName';
 	protected $description = '升级用户昵称';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		Log::info('----------------------------【升级用户昵称】开始----------------------------');
 
 		$userList = User::query()->get();
@@ -48,20 +44,17 @@ function process($id) {
 	if($user->qq){
 		$name = QQInfo::getName3($user->qq);
 		// 检测用户注册是否为QQ邮箱
-	}elseif(strpos(strtolower($user->email), '@qq') != false){
+	}elseif(stripos($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);
-				}
+		}elseif(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);
 			}
 		}
 	}

+ 3 - 7
app/Console/Commands/upgradeUserResetTime.php

@@ -10,11 +10,7 @@ class upgradeUserResetTime extends Command {
 	protected $signature = 'upgradeUserResetTime';
 	protected $description = '升级用户重置日期';
 
-	public function __construct() {
-		parent::__construct();
-	}
-
-	public function handle() {
+	public function handle(): void {
 		Log::info('----------------------------【升级用户重置日期】开始----------------------------');
 
 		$userList = User::query()->get();
@@ -28,7 +24,7 @@ class upgradeUserResetTime extends Command {
 				// 案例:31 29,重置日 大于 本月最后一天
 				if($resetDay > $last_day){
 					//往后推一个月
-					$resetDay = $resetDay - $last_day;
+					$resetDay -= $last_day;
 					$reset_time = date('Y-m-'.$resetDay, strtotime("+1 month"));
 					//案例:20<30<31
 				}elseif($resetDay < $last_day && $resetDay > $today){
@@ -40,7 +36,7 @@ class upgradeUserResetTime extends Command {
 				}elseif($resetDay < $today){
 					//类似第一种情况,向后推一月
 					if($resetDay > $next_last_day){
-						$resetDay = $resetDay - $next_last_day;
+						$resetDay -= $next_last_day;
 						$reset_time = date('Y-m-'.$resetDay, strtotime("+1 month"));
 					}else{
 						$reset_time = date('Y-m-'.$resetDay, strtotime("+1 month"));

+ 20 - 20
app/Exceptions/Handler.php

@@ -7,10 +7,10 @@ use Exception;
 use Illuminate\Auth\AuthenticationException;
 use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 use Illuminate\Http\Request;
-use Illuminate\Http\Response;
 use Illuminate\Session\TokenMismatchException;
 use Log;
 use ReflectionException;
+use Response;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
 class Handler extends ExceptionHandler {
@@ -57,7 +57,7 @@ class Handler extends ExceptionHandler {
 	 * @param  Request    $request
 	 * @param  Exception  $exception
 	 *
-	 * @return Response
+	 * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response
 	 */
 	public function render($request, Exception $exception) {
 		// 调试模式下直接返回错误信息
@@ -71,57 +71,57 @@ class Handler extends ExceptionHandler {
 
 			if($request->ajax()){
 				return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('error.MissingPage')]);
-			}else{
-				return Response::view('auth.error', ['message' => trans('error.MissingPage')]);
 			}
+
+			return Response::view('auth.error', ['message' => trans('error.MissingPage')]);
 		}
 
 		// 捕获身份校验异常
 		if($exception instanceof AuthenticationException){
 			if($request->ajax()){
-				return Respone::json(['status' => 'fail', 'data' => '', 'message' => trans('error.Unauthorized')]);
-			}else{
-				return Respone::view('auth.error', ['message' => trans('error.Unauthorized')]);
+				return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('error.Unauthorized')]);
 			}
+
+			return Response::view('auth.error', ['message' => trans('error.Unauthorized')]);
 		}
 
 		// 捕获CSRF异常
 		if($exception instanceof TokenMismatchException){
 			if($request->ajax()){
-				return Respone::json([
+				return Response::json([
 					'status'  => 'fail',
 					'data'    => '',
 					'message' => trans('error.RefreshPage').'<a href="/login" target="_blank">'.trans('error.Refresh').'</a>'
 				]);
-			}else{
-				return Respone::view('auth.error', [
-					'message' => trans('error.RefreshPage').'<a href="/login" target="_blank">'.trans('error.Refresh').'</a>'
-				]);
 			}
+
+			return Response::view('auth.error', [
+				'message' => trans('error.RefreshPage').'<a href="/login" target="_blank">'.trans('error.Refresh').'</a>'
+			]);
 		}
 
 		// 捕获反射异常
 		if($exception instanceof ReflectionException){
 			if($request->ajax()){
-				return Respone::json(['status' => 'fail', 'data' => '', 'message' => trans('error.SystemError')]);
-			}else{
-				return Respone::view('auth.error', ['message' => trans('error.SystemError')]);
+				return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('error.SystemError')]);
 			}
+
+			return Response::view('auth.error', ['message' => trans('error.SystemError')]);
 		}
 
 		// 捕获系统错误异常
 		if($exception instanceof ErrorException){
 			if($request->ajax()){
-				return Respone::json([
+				return Response::json([
 					'status'  => 'fail',
 					'data'    => '',
 					'message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="/logs" target="_blank">'.trans('error.log').'</a>'
 				]);
-			}else{
-				return Respone::view('auth.error', [
-					'message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="/logs" target="_blank">'.trans('error.log').'</a>'
-				]);
 			}
+
+			return Response::view('auth.error', [
+				'message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="/logs" target="_blank">'.trans('error.log').'</a>'
+			]);
 		}
 
 		return parent::render($request, $exception);

+ 9 - 8
app/Http/Controllers/Admin/AffiliateController.php

@@ -6,6 +6,7 @@ use App\Components\Helpers;
 use App\Http\Controllers\Controller;
 use App\Models\ReferralApply;
 use App\Models\ReferralLog;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
 
@@ -19,18 +20,18 @@ use Response;
 class AffiliateController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
 	// 提现申请列表
-	public function affiliateList(Request $request) {
+	public function affiliateList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 		$status = $request->input('status');
 
 		$query = ReferralApply::with('user');
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -45,7 +46,7 @@ class AffiliateController extends Controller {
 	}
 
 	// 提现申请详情
-	public function affiliateDetail(Request $request) {
+	public function affiliateDetail(Request $request): \Illuminate\Http\Response {
 		$id = $request->input('id');
 
 		$list = null;
@@ -66,7 +67,7 @@ class AffiliateController extends Controller {
 	}
 
 	// 设置提现申请状态
-	public function setAffiliateStatus(Request $request) {
+	public function setAffiliateStatus(Request $request): JsonResponse {
 		$id = $request->input('id');
 		$status = $request->input('status');
 
@@ -86,7 +87,7 @@ class AffiliateController extends Controller {
 	}
 
 	// 用户返利流水记录
-	public function userRebateList(Request $request) {
+	public function userRebateList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 		$ref_email = $request->input('ref_email');
 		$status = $request->input('status');
@@ -94,13 +95,13 @@ class AffiliateController extends Controller {
 		$query = ReferralLog::query()->with(['user', 'order'])->orderBy('status')->orderByDesc('id');
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
 
 		if(isset($ref_email)){
-			$query->whereHas('ref_user', function($q) use ($ref_email) {
+			$query->whereHas('ref_user', static function($q) use ($ref_email) {
 				$q->where('email', 'like', '%'.$ref_email.'%');
 			});
 		}

+ 6 - 5
app/Http/Controllers/Admin/CouponController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
 use App\Models\Coupon;
 use DB;
 use Exception;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
@@ -23,7 +24,7 @@ use Validator;
  */
 class CouponController extends Controller {
 	// 优惠券列表
-	public function couponList(Request $request) {
+	public function couponList(Request $request): \Illuminate\Http\Response {
 		$sn = $request->input('sn');
 		$type = $request->input('type');
 		$status = $request->input('status');
@@ -97,7 +98,7 @@ class CouponController extends Controller {
 					return Redirect::back()->withInput()->withErrors('LOGO不合法');
 				}
 
-				$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+				$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 				$move = $file->move(base_path().'/public/upload/image/', $logoName);
 				$logo = $move? '/upload/image/'.$logoName : '';
 			}else{
@@ -110,7 +111,7 @@ class CouponController extends Controller {
 					$obj = new Coupon();
 					$obj->name = $request->input('name');
 					$obj->logo = $logo;
-					$obj->sn = $num == 1? ($request->input('sn')?: makeRandStr(8)) : makeRandStr(8);
+					$obj->sn = $num == 1 && $request->input('sn')? $request->input('sn') : makeRandStr(8);
 					$obj->type = $type;
 					$obj->usage_count = $request->input('usage_count');
 					$obj->amount = $type == 2? 0 : $request->input('amount');
@@ -140,14 +141,14 @@ class CouponController extends Controller {
 	}
 
 	// 删除优惠券
-	public function delCoupon(Request $request) {
+	public function delCoupon(Request $request): JsonResponse {
 		Coupon::query()->whereId($request->input('id'))->delete();
 
 		return Response::json(['status' => 'success', 'data' => '', 'message' => '删除成功']);
 	}
 
 	// 导出卡券
-	public function exportCoupon() {
+	public function exportCoupon(): void {
 		$voucherList = Coupon::type(1)->whereStatus(0)->get();
 		$discountCouponList = Coupon::type(2)->whereStatus(0)->get();
 		$refillList = Coupon::type(3)->whereStatus(0)->get();

+ 8 - 6
app/Http/Controllers/Admin/MarketingController.php

@@ -8,6 +8,7 @@ use App\Models\Marketing;
 use DB;
 use Exception;
 use GuzzleHttp\Client;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 use Response;
@@ -22,12 +23,12 @@ use Response;
 class MarketingController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
 	// 邮件群发消息列表
-	public function emailList(Request $request) {
+	public function emailList(Request $request): \Illuminate\Http\Response {
 		$status = $request->input('status');
 
 		$query = Marketing::query()->whereType(1);
@@ -42,7 +43,7 @@ class MarketingController extends Controller {
 	}
 
 	// 消息通道群发列表
-	public function pushList(Request $request) {
+	public function pushList(Request $request): \Illuminate\Http\Response {
 		$status = $request->input('status');
 
 		$query = Marketing::query()->whereType(2);
@@ -57,7 +58,7 @@ class MarketingController extends Controller {
 	}
 
 	// 添加推送消息
-	public function addPushMarketing(Request $request) {
+	public function addPushMarketing(Request $request): ?JsonResponse {
 		$title = $request->input('title');
 		$content = $request->input('content');
 
@@ -76,7 +77,7 @@ class MarketingController extends Controller {
 				]
 			]);
 
-			$result = json_decode($response->getBody());
+			$result = json_decode($response->getBody(), true);
 			if($result->code){ // 失败
 				$this->addMarketing(2, $title, $content, -1, $result->message);
 
@@ -97,7 +98,8 @@ class MarketingController extends Controller {
 		}
 	}
 
-	private function addMarketing($type = 1, $title = '', $content = '', $status = 1, $error = '', $receiver = '') {
+	private function addMarketing($type = 1, $title = '', $content = '', $status = 1, $error = '', $receiver = ''
+	): bool {
 		$marketing = new Marketing();
 		$marketing->type = $type;
 		$marketing->receiver = $receiver;

+ 31 - 37
app/Http/Controllers/Admin/RuleController.php

@@ -9,6 +9,7 @@ use App\Models\RuleGroupNode;
 use App\Models\RuleLog;
 use App\Models\SsNode;
 use Exception;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Redirect;
 use Response;
@@ -16,7 +17,7 @@ use Validator;
 
 class RuleController extends Controller {
 	// 审计规则列表
-	public function ruleList(Request $request) {
+	public function ruleList(Request $request): \Illuminate\Http\Response {
 		$type = $request->input('type');
 		$query = Rule::query();
 
@@ -29,7 +30,7 @@ class RuleController extends Controller {
 	}
 
 	// 添加审计规则
-	public function addRule(Request $request) {
+	public function addRule(Request $request): ?JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'type'    => 'required|between:1,4',
 			'name'    => 'required',
@@ -48,13 +49,12 @@ class RuleController extends Controller {
 
 		if($obj->id){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '提交成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 		}
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 	}
 
 	// 编辑审计规则
-	public function editRule(Request $request) {
+	public function editRule(Request $request): ?JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'id'           => 'required|exists:rule,id',
 			'rule_name'    => 'required',
@@ -71,14 +71,12 @@ class RuleController extends Controller {
 		]);
 		if($ret){
 			return Response::json(['status' => 'success', 'message' => '操作成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => '操作失败']);
 		}
-
+		return Response::json(['status' => 'fail', 'message' => '操作失败']);
 	}
 
 	// 删除审计规则
-	public function delRule(Request $request) {
+	public function delRule(Request $request): JsonResponse {
 		$id = $request->input('id');
 		try{
 			Rule::query()->whereId($id)->delete();
@@ -86,7 +84,7 @@ class RuleController extends Controller {
 			$RuleGroupList = RuleGroup::query()->get();
 			foreach($RuleGroupList as $RuleGroup){
 				$rules = explode(',', $RuleGroup->rules);
-				if(in_array($id, $rules)){
+				if(in_array($id, $rules, true)){
 					$rules = implode(',', array_diff($rules, [$id]));
 					RuleGroup::query()->whereId($RuleGroup->id)->update(['rules' => $rules]);
 				}
@@ -98,7 +96,7 @@ class RuleController extends Controller {
 	}
 
 	// 审计规则分组列表
-	public function ruleGroupList(Request $request) {
+	public function ruleGroupList(Request $request): \Illuminate\Http\Response {
 		$view['ruleGroupList'] = RuleGroup::query()->paginate(15)->appends($request->except('page'));
 		return Response::view('admin.rule.ruleGroupList', $view);
 	}
@@ -124,14 +122,11 @@ class RuleController extends Controller {
 
 			if($obj->id){
 				return Redirect::back()->with('successMsg', '操作成功');
-			}else{
-				return Redirect::back()->withInput()->withErrors('操作失败');
 			}
-
-		}else{
-			$view['ruleList'] = Rule::query()->get();
-			return Response::view('admin.rule.ruleGroupInfo', $view);
+			return Redirect::back()->withInput()->withErrors('操作失败');
 		}
+		$view['ruleList'] = Rule::query()->get();
+		return Response::view('admin.rule.ruleGroupInfo', $view);
 	}
 
 	// 编辑审计规则分组
@@ -177,20 +172,19 @@ class RuleController extends Controller {
 				return Redirect::back()->with('successMsg', '操作成功');
 			}
 			return Redirect::back()->withInput()->withErrors('操作失败');
+		}
 
-		}else{
-			$ruleGroup = RuleGroup::query()->find($id);
-			if(!$ruleGroup){
-				return Redirect::back();
-			}
-			$view['ruleList'] = Rule::query()->get();
-
-			return view('admin.rule.ruleGroupInfo', $view)->with(compact('ruleGroup'));
+		$ruleGroup = RuleGroup::query()->find($id);
+		if(!$ruleGroup){
+			return Redirect::back();
 		}
+		$view['ruleList'] = Rule::query()->get();
+
+		return view('admin.rule.ruleGroupInfo', $view)->with(compact('ruleGroup'));
 	}
 
 	// 删除审计规则分组
-	public function delRuleGroup(Request $request) {
+	public function delRuleGroup(Request $request): JsonResponse {
 		$id = $request->input('id');
 		$ruleGroup = RuleGroup::query()->whereId($id)->get();
 		if(!$ruleGroup){
@@ -203,6 +197,7 @@ class RuleController extends Controller {
 		}catch(Exception $e){
 			return Response::json(['status' => 'fail', 'message' => '删除失败,'.$e->getMessage()]);
 		}
+
 		return Response::json(['status' => 'success', 'message' => '清理成功']);
 	}
 
@@ -244,22 +239,21 @@ class RuleController extends Controller {
 					RuleGroup::query()->whereId($id)->update(['nodes' => $nodes]);
 					RuleGroupNode::query()->whereRuleGroupId($id)->delete();
 				}
-
 			}catch(Exception $e){
 				return Redirect::back()->withInput()->withErrors($e->getMessage());
 			}
+
 			return Redirect::back()->with('successMsg', '操作成功');
+		}
 
-		}else{
-			$view['ruleGroup'] = RuleGroup::query()->find($id);
-			$view['nodeList'] = SsNode::query()->get();
+		$view['ruleGroup'] = RuleGroup::query()->find($id);
+		$view['nodeList'] = SsNode::query()->get();
 
-			return Response::view('admin.rule.assignNode', $view);
-		}
+		return Response::view('admin.rule.assignNode', $view);
 	}
 
 	// 用户触发审计规则日志
-	public function ruleLogList(Request $request) {
+	public function ruleLogList(Request $request): \Illuminate\Http\Response {
 		$uid = $request->input('uid');
 		$email = $request->input('email');
 		$nodeId = $request->input('node_id');
@@ -270,7 +264,7 @@ class RuleController extends Controller {
 			$query->whereUserId($uid);
 		}
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -288,7 +282,7 @@ class RuleController extends Controller {
 	}
 
 	// 清除所有审计触发日志
-	public function clearLog() {
+	public function clearLog(): ?JsonResponse {
 		try{
 			$ret = RuleLog::query()->delete();
 		}catch(Exception $e){
@@ -297,8 +291,8 @@ class RuleController extends Controller {
 		$result = RuleLog::query()->doesntExist();
 		if($ret || $result){
 			return Response::json(['status' => 'success', 'message' => '清理成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => '清理失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'message' => '清理失败']);
 	}
 }

+ 8 - 8
app/Http/Controllers/Admin/SensitiveWordsController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
 use App\Models\SensitiveWords;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
 use Validator;
@@ -17,14 +18,14 @@ use Validator;
  */
 class SensitiveWordsController extends Controller {
 	// 敏感词列表
-	public function sensitiveWordsList() {
+	public function sensitiveWordsList(): \Illuminate\Http\Response {
 		$view['list'] = SensitiveWords::query()->orderByDesc('id')->paginate(15);
 
 		return Response::view('admin.config.sensitiveWordsList', $view);
 	}
 
 	// 添加敏感词
-	public function addSensitiveWords(Request $request) {
+	public function addSensitiveWords(Request $request): ?JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'words' => 'required|unique:sensitive_words'
 		], [
@@ -46,19 +47,18 @@ class SensitiveWordsController extends Controller {
 		$obj->save();
 		if($obj->id){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '添加失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '添加失败']);
 	}
 
 	// 删除敏感词
-	public function delSensitiveWords(Request $request) {
+	public function delSensitiveWords(Request $request): ?JsonResponse {
 		$result = SensitiveWords::query()->whereId($request->input('id'))->delete();
 		if($result){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '删除成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败']);
 		}
-	}
 
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败']);
+	}
 }

+ 9 - 9
app/Http/Controllers/Admin/ShopController.php

@@ -7,6 +7,7 @@ use App\Models\Goods;
 use App\Models\Level;
 use DB;
 use Exception;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 use Redirect;
@@ -23,7 +24,7 @@ use Validator;
  */
 class ShopController extends Controller {
 	// 商品列表
-	public function goodsList(Request $request) {
+	public function goodsList(Request $request): \Illuminate\Http\Response {
 		$type = $request->input('type');
 		$status = $request->input('status');
 
@@ -68,7 +69,7 @@ class ShopController extends Controller {
 					return Redirect::back()->withInput()->withErrors('LOGO不合法');
 				}
 
-				$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+				$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 				$move = $file->move(base_path().'/public/upload/image/', $logoName);
 				$logo = $move? '/upload/image/'.$logoName : '';
 			}
@@ -147,7 +148,7 @@ class ShopController extends Controller {
 					return Redirect::back()->withInput();
 				}
 
-				$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+				$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 				$move = $file->move(base_path().'/public/upload/image/', $logoName);
 				$logo = $move? '/upload/image/'.$logoName : '';
 				Goods::query()->whereId($id)->update(['logo' => $logo]);
@@ -184,17 +185,16 @@ class ShopController extends Controller {
 			}
 
 			return Redirect::to('shop/edit?id='.$id);
-		}else{
-			$goods = Goods::query()->whereId($id)->first();
+		}
 
-			$view['level_list'] = Level::query()->orderBy('level')->get();
+		$goods = Goods::query()->whereId($id)->first();
+		$view['level_list'] = Level::query()->orderBy('level')->get();
 
-			return view('admin.shop.goodsInfo', $view)->with(compact('goods'));
-		}
+		return view('admin.shop.goodsInfo', $view)->with(compact('goods'));
 	}
 
 	// 删除商品
-	public function delGoods(Request $request) {
+	public function delGoods(Request $request): JsonResponse {
 		try{
 			Goods::query()->whereId($request->input('id'))->delete();
 		}catch(Exception $e){

+ 6 - 5
app/Http/Controllers/Admin/SubscribeController.php

@@ -6,6 +6,7 @@ use App\Components\Helpers;
 use App\Http\Controllers\Controller;
 use App\Models\UserSubscribe;
 use App\Models\UserSubscribeLog;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
 
@@ -19,12 +20,12 @@ use Response;
 class SubscribeController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
 	// 订阅码列表
-	public function subscribeList(Request $request) {
+	public function subscribeList(Request $request): \Illuminate\Http\Response {
 		$user_id = $request->input('user_id');
 		$email = $request->input('email');
 		$status = $request->input('status');
@@ -36,7 +37,7 @@ class SubscribeController extends Controller {
 		}
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -51,7 +52,7 @@ class SubscribeController extends Controller {
 	}
 
 	//订阅记录
-	public function subscribeLog(Request $request) {
+	public function subscribeLog(Request $request): \Illuminate\Http\Response {
 		$id = $request->input('id');
 		$query = UserSubscribeLog::with('user:email');
 
@@ -65,7 +66,7 @@ class SubscribeController extends Controller {
 	}
 
 	// 设置用户的订阅的状态
-	public function setSubscribeStatus(Request $request) {
+	public function setSubscribeStatus(Request $request): JsonResponse {
 		$id = $request->input('id');
 		$status = $request->input('status', 0);
 

+ 20 - 20
app/Http/Controllers/Admin/TicketController.php

@@ -11,6 +11,7 @@ use App\Models\Ticket;
 use App\Models\TicketReply;
 use App\Models\User;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Mail;
 use Response;
@@ -25,18 +26,18 @@ use Response;
 class TicketController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
 	// 工单列表
-	public function ticketList(Request $request) {
+	public function ticketList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 
 		$query = Ticket::query()->whereIn('admin_id', [0, Auth::id()]);
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -47,7 +48,7 @@ class TicketController extends Controller {
 	}
 
 	// 创建工单
-	public function createTicket(Request $request) {
+	public function createTicket(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 		$email = $request->input('email');
 		$title = $request->input('title');
@@ -57,7 +58,9 @@ class TicketController extends Controller {
 
 		if(!$user){
 			return Response::json(['status' => 'fail', 'message' => '用户不存在']);
-		}elseif($user == Auth::user()){
+		}
+
+		if($user == Auth::user()){
 			return Response::json(['status' => 'fail', 'message' => '不能对自己发起工单']);
 		}
 
@@ -75,9 +78,9 @@ class TicketController extends Controller {
 
 		if($obj->id){
 			return Response::json(['status' => 'success', 'message' => '工单创建成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => '工单创建失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'message' => '工单创建失败']);
 	}
 
 	// 回复工单
@@ -86,7 +89,7 @@ class TicketController extends Controller {
 
 		if($request->isMethod('POST')){
 			$content = clean($request->input('content'));
-			$content = str_replace("eval", "", str_replace("atob", "", $content));
+			$content = str_replace(["atob", "eval"], "", $content);
 			$content = substr($content, 0, 300);
 
 			$obj = new TicketReply();
@@ -98,8 +101,7 @@ class TicketController extends Controller {
 			if($obj->id){
 				// 将工单置为已回复
 				$ticket = Ticket::query()->with(['user'])->whereId($id)->first();
-				$ticket->status = 1;
-				$ticket->save();
+				Ticket::query()->whereId($id)->update(['status' => 1]);
 
 				$title = "工单回复提醒";
 				$content = "标题:".$ticket->title."<br>管理员回复:".$content;
@@ -120,19 +122,19 @@ class TicketController extends Controller {
 				}
 
 				return Response::json(['status' => 'success', 'data' => '', 'message' => '回复成功']);
-			}else{
-				return Response::json(['status' => 'fail', 'data' => '', 'message' => '回复失败']);
 			}
-		}else{
-			$view['ticket'] = Ticket::query()->whereId($id)->first();
-			$view['replyList'] = TicketReply::query()->whereTicketId($id)->orderBy('id')->get();
 
-			return Response::view('admin.ticket.replyTicket', $view);
+			return Response::json(['status' => 'fail', 'data' => '', 'message' => '回复失败']);
 		}
+
+		$view['ticket'] = Ticket::query()->whereId($id)->first();
+		$view['replyList'] = TicketReply::query()->whereTicketId($id)->orderBy('id')->get();
+
+		return Response::view('admin.ticket.replyTicket', $view);
 	}
 
 	// 关闭工单
-	public function closeTicket(Request $request) {
+	public function closeTicket(Request $request): JsonResponse {
 		$id = $request->input('id');
 
 		$ticket = Ticket::query()->with(['user'])->whereId($id)->first();
@@ -140,8 +142,7 @@ class TicketController extends Controller {
 			return Response::json(['status' => 'fail', 'data' => '', 'message' => '关闭失败']);
 		}
 
-		$ticket->status = 2;
-		$ret = $ticket->save();
+		$ret = Ticket::query()->whereId($id)->update(['status' => 2]);
 		if(!$ret){
 			return Response::json(['status' => 'fail', 'data' => '', 'message' => '关闭失败']);
 		}
@@ -155,5 +156,4 @@ class TicketController extends Controller {
 
 		return Response::json(['status' => 'success', 'data' => '', 'message' => '关闭成功']);
 	}
-
 }

+ 15 - 15
app/Http/Controllers/Admin/ToolsController.php

@@ -12,6 +12,7 @@ use Illuminate\Http\Request;
 use Redirect;
 use Response;
 use Session;
+use Symfony\Component\HttpFoundation\BinaryFileResponse;
 
 class ToolsController extends Controller {
 	// SS(R)链接反解析
@@ -43,9 +44,8 @@ class ToolsController extends Controller {
 			file_put_contents(public_path('downloads/decompile.json'), $txt);
 
 			return Response::json(['status' => 'success', 'data' => $txt, 'message' => '反解析成功']);
-		}else{
-			return Response::view('admin.tools.decompile');
 		}
+		return Response::view('admin.tools.decompile');
 	}
 
 	// 格式转换(SS转SSR)
@@ -64,7 +64,7 @@ class ToolsController extends Controller {
 			}
 
 			// 校验格式
-			$content = json_decode($content);
+			$content = json_decode($content, true);
 			if(empty($content->port_password)){
 				return Response::json([
 					'status'  => 'fail',
@@ -98,18 +98,18 @@ class ToolsController extends Controller {
 			file_put_contents(public_path('downloads/convert.json'), $json);
 
 			return Response::json(['status' => 'success', 'data' => $json, 'message' => '转换成功']);
-		}else{
-			// 加密方式、协议、混淆
-			$view['method_list'] = Helpers::methodList();
-			$view['protocol_list'] = Helpers::protocolList();
-			$view['obfs_list'] = Helpers::obfsList();
-
-			return Response::view('admin.tools.convert', $view);
 		}
+
+		// 加密方式、协议、混淆
+		$view['method_list'] = Helpers::methodList();
+		$view['protocol_list'] = Helpers::protocolList();
+		$view['obfs_list'] = Helpers::obfsList();
+
+		return Response::view('admin.tools.convert', $view);
 	}
 
 	// 下载转换好的JSON文件
-	public function download(Request $request) {
+	public function download(Request $request): BinaryFileResponse {
 		$type = $request->input('type');
 		if(empty($type)){
 			exit('参数异常');
@@ -158,7 +158,7 @@ class ToolsController extends Controller {
 
 			// 读取文件内容
 			$data = file_get_contents($save_path.'/'.$new_name);
-			$data = json_decode($data);
+			$data = json_decode($data, true);
 			if(!$data){
 				Session::flash('errorMsg', '内容格式解析异常,请上传符合SSR(R)配置规范的JSON文件');
 
@@ -199,13 +199,13 @@ class ToolsController extends Controller {
 			Session::flash('successMsg', '导入成功');
 
 			return Redirect::back();
-		}else{
-			return Response::view('admin.tools.import');
 		}
+
+		return Response::view('admin.tools.import');
 	}
 
 	// 日志分析
-	public function analysis() {
+	public function analysis(): \Illuminate\Http\Response {
 		$file = storage_path('app/ssserver.log');
 		if(!file_exists($file)){
 			Session::flash('analysisErrorMsg', $file.' 不存在,请先创建文件');

+ 156 - 151
app/Http/Controllers/AdminController.php

@@ -34,6 +34,8 @@ use Auth;
 use DB;
 use Exception;
 use Hash;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Log;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
@@ -41,6 +43,7 @@ use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 use Redirect;
 use Response;
 use Session;
+use Symfony\Component\HttpFoundation\BinaryFileResponse;
 use Validator;
 
 /**
@@ -53,11 +56,11 @@ use Validator;
 class AdminController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function index() {
+	public function index(): \Illuminate\Http\Response {
 		$past = strtotime(date('Y-m-d', strtotime("-".self::$systemConfig['expire_days']." days")));
 
 		$view['expireDays'] = self::$systemConfig['expire_days'];
@@ -71,7 +74,7 @@ class AdminController extends Controller {
 		                                 ->count(); // 不活跃用户数
 		$view['onlineUserCount'] = User::query()->where('t', '>=', time() - Minute * 10)->count(); // 10分钟内在线用户数
 		$view['expireWarningUserCount'] = User::query()
-		                                      ->where('expire_time', '>=', date('Y-m-d', strtotime("now")))
+		                                      ->where('expire_time', '>=', date('Y-m-d'))
 		                                      ->where('expire_time', '<=', date('Y-m-d',
 			                                      strtotime("+".self::$systemConfig['expire_days']." days")))
 		                                      ->count(); // 临近过期用户数
@@ -121,7 +124,7 @@ class AdminController extends Controller {
 	}
 
 	// 用户列表
-	public function userList(Request $request) {
+	public function userList(Request $request): \Illuminate\Http\Response {
 		$id = $request->input('id');
 		$email = $request->input('email');
 		$wechat = $request->input('wechat');
@@ -233,7 +236,7 @@ class AdminController extends Controller {
 			$user->trafficWarning = $totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)? 1 : 0;
 
 			// 订阅地址
-			$user->link = (self::$systemConfig['subscribe_domain']? self::$systemConfig['subscribe_domain'] : self::$systemConfig['website_url']).'/s/'.$user->subscribe->code;
+			$user->link = (self::$systemConfig['subscribe_domain']?: self::$systemConfig['website_url']).'/s/'.$user->subscribe->code;
 		}
 
 		$view['userList'] = $userList;
@@ -267,7 +270,7 @@ class AdminController extends Controller {
 			$user->qq = $request->input('qq');
 			$user->enable_time = $request->input('enable_time')?: date('Y-m-d');
 			$user->expire_time = $request->input('expire_time')?: date('Y-m-d', strtotime("+365 days"));
-			$user->remark = str_replace("eval", "", str_replace("atob", "", $request->input('remark')));
+			$user->remark = str_replace(["atob", "eval"], "", $request->input('remark'));
 			$user->level = $request->input('level')?: 0;
 			$user->reg_ip = getClientIp();
 			$user->reset_time = $request->input('reset_time') > date('Y-m-d')? $request->input('reset_time') : null;
@@ -288,18 +291,18 @@ class AdminController extends Controller {
 					'后台手动添加用户');
 
 				return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
-			}else{
-				return Response::json(['status' => 'fail', 'data' => '', 'message' => '添加失败']);
 			}
-		}else{
-			// 生成一个可用端口
-			$view['method_list'] = Helpers::methodList();
-			$view['protocol_list'] = Helpers::protocolList();
-			$view['obfs_list'] = Helpers::obfsList();
-			$view['level_list'] = Level::query()->orderBy('level')->get();
 
-			return Response::view('admin.user.userInfo', $view);
+			return Response::json(['status' => 'fail', 'data' => '', 'message' => '添加失败']);
 		}
+
+		// 生成一个可用端口
+		$view['method_list'] = Helpers::methodList();
+		$view['protocol_list'] = Helpers::protocolList();
+		$view['obfs_list'] = Helpers::obfsList();
+		$view['level_list'] = Level::query()->orderBy('level')->get();
+
+		return Response::view('admin.user.userInfo', $view);
 	}
 
 	// 生成端口
@@ -308,7 +311,7 @@ class AdminController extends Controller {
 	}
 
 	// 批量生成账号
-	public function batchAddUsers(Request $request) {
+	public function batchAddUsers(Request $request): ?JsonResponse {
 		$amount = $request->input('amount');
 		DB::beginTransaction();
 		try{
@@ -399,11 +402,9 @@ class AdminController extends Controller {
 					$data['is_admin'] = intval($is_admin);
 				}
 
-				if(!empty($password)){
-					// 非演示环境才可以修改管理员密码
-					if(!(env('APP_DEMO') && $id == 1)){
-						$data['password'] = Hash::make($password);
-					}
+				// 非演示环境才可以修改管理员密码
+				if(!empty($password) && !(env('APP_DEMO') && $id == 1)){
+					$data['password'] = Hash::make($password);
 				}
 
 				User::query()->whereId($id)->update($data);
@@ -440,7 +441,7 @@ class AdminController extends Controller {
 	}
 
 	// 删除用户
-	public function delUser(Request $request) {
+	public function delUser(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		if($id <= 1){
@@ -469,7 +470,7 @@ class AdminController extends Controller {
 	}
 
 	// 文章列表
-	public function articleList(Request $request) {
+	public function articleList(Request $request): \Illuminate\Http\Response {
 		$view['list'] = Article::query()->orderByDesc('sort')->paginate(15)->appends($request->except('page'));
 
 		return Response::view('admin.article.articleList', $view);
@@ -499,7 +500,7 @@ class AdminController extends Controller {
 						return Redirect::back()->withInput();
 					}
 
-					$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+					$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 					$move = $file->move(base_path().'/public/upload/image/', $logoName);
 					$logo = $move? '/upload/image/'.$logoName : '';
 				}
@@ -521,9 +522,9 @@ class AdminController extends Controller {
 			}
 
 			return Redirect::to('admin/articleList');
-		}else{
-			return Response::view('admin.article.addArticle');
 		}
+
+		return Response::view('admin.article.addArticle');
 	}
 
 	// 编辑文章
@@ -553,7 +554,7 @@ class AdminController extends Controller {
 						return Redirect::back()->withInput();
 					}
 
-					$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+					$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 					$move = $file->move(base_path().'/public/upload/image/', $logoName);
 					$logo = $move? '/upload/image/'.$logoName : '';
 				}
@@ -573,27 +574,27 @@ class AdminController extends Controller {
 			}
 
 			return Redirect::to('admin/editArticle?id='.$id);
-		}else{
-			$view['article'] = Article::query()->whereId($id)->first();
-
-			return Response::view('admin.article.editArticle', $view);
 		}
+
+		$view['article'] = Article::query()->whereId($id)->first();
+
+		return Response::view('admin.article.editArticle', $view);
 	}
 
 	// 删除文章
-	public function delArticle(Request $request) {
+	public function delArticle(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		$ret = Article::query()->whereId($id)->delete();
 		if($ret){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '删除成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败']);
 	}
 
 	// 流量日志
-	public function trafficLog(Request $request) {
+	public function trafficLog(Request $request): \Illuminate\Http\Response {
 		$port = $request->input('port');
 		$user_id = $request->input('user_id');
 		$email = $request->input('email');
@@ -604,7 +605,7 @@ class AdminController extends Controller {
 		$query = UserTrafficLog::query()->with(['user', 'node']);
 
 		if(isset($port)){
-			$query->whereHas('user', function($q) use ($port) {
+			$query->whereHas('user', static function($q) use ($port) {
 				$q->wherePort($port);
 			});
 		}
@@ -614,7 +615,7 @@ class AdminController extends Controller {
 		}
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -663,50 +664,53 @@ class AdminController extends Controller {
 			$infoType = $request->input('type');
 
 			$node = SsNode::query()->whereId($node_id)->first();
-			$proxyType = $node->type == 1? ($node->compatible? 'SS' : 'SSR') : 'V2Ray';
+			if($node->type == 1){
+				if($node->compatible){
+					$proxyType = 'SS';
+				}else{
+					$proxyType = 'SSR';
+				}
+			}else{
+				$proxyType = 'V2Ray';
+			}
+
 			$data = $this->getUserNodeInfo($id, $node->id, $infoType != 'text'? 0 : 1);
 
 			return Response::json(['status' => 'success', 'data' => $data, 'title' => $proxyType]);
 
-		}else{
-			$view['nodeList'] = SsNode::query()
-			                          ->whereStatus(1)
-			                          ->orderByDesc('sort')
-			                          ->orderBy('id')
-			                          ->paginate(15)
-			                          ->appends($request->except('page'));
-			$view['user'] = $user;
 		}
 
+		$view['nodeList'] = SsNode::query()
+		                          ->whereStatus(1)
+		                          ->orderByDesc('sort')
+		                          ->orderBy('id')
+		                          ->paginate(15)
+		                          ->appends($request->except('page'));
+		$view['user'] = $user;
+
 		return Response::view('admin.user.export', $view);
 	}
 
 	// 导出原版SS用户配置信息
-	public function exportSSJson() {
+	public function exportSSJson(): BinaryFileResponse {
 		$userList = User::query()->where('port', '>', 0)->get();
-		$defaultMethod = Helpers::getDefaultMethod();
 
 		$json = '';
 		if(!$userList->isEmpty()){
-			$tmp = [];
-			foreach($userList as $key => $user){
-				$tmp[] = '"'.$user->port.'":"'.$user->passwd.'"';
+			$userPassword = [];
+			foreach($userList as $user){
+				$userPassword[] = $user->port.":".$user->passwd;
 			}
 
-			$userPassword = implode(",\n\t\t", $tmp);
-			$json = <<<EOF
-{
-	"server":"0.0.0.0",
-    "local_address":"127.0.0.1",
-    "local_port":1080,
-    "port_password":{
-        {$userPassword}
-    },
-    "timeout":300,
-    "method":"{$defaultMethod}",
-    "fast_open":false
-}
-EOF;
+			$json = json_encode([
+				'server'        => '0.0.0.0',
+				'local_address' => '127.0.0.1',
+				'local_port'    => 1080,
+				'port_password' => $userPassword,
+				'timeout'       => 300,
+				'method'        => Helpers::getDefaultMethod(),
+				'fast_open'     => false,
+			]);
 		}
 
 		// 生成JSON文件
@@ -724,24 +728,25 @@ EOF;
 	// 修改个人资料
 	public function profile(Request $request) {
 		if($request->isMethod('POST')){
-			$old_password = $request->input('old_password');
 			$new_password = $request->input('new_password');
 
-			if(!Hash::check($old_password, Auth::getUser()->password)){
+			if(!Hash::check($request->input('old_password'), Auth::getUser()->password)){
 				return Redirect::back()->withErrors('旧密码错误,请重新输入');
-			}elseif(Hash::check($new_password, Auth::getUser()->password)){
+			}
+
+			if(Hash::check($new_password, Auth::getUser()->password)){
 				return Redirect::back()->withErrors('新密码不可与旧密码一样,请重新输入');
 			}
 
 			$ret = User::uid()->update(['password' => Hash::make($new_password)]);
 			if(!$ret){
 				return Redirect::back()->withErrors('修改失败');
-			}else{
-				return Redirect::back()->with('successMsg', '修改成功');
 			}
-		}else{
-			return Response::view('admin.config.profile');
+
+			return Redirect::back()->with('successMsg', '修改成功');
 		}
+
+		return Response::view('admin.config.profile');
 	}
 
 	// 用户流量监控
@@ -763,7 +768,7 @@ EOF;
 		$userTrafficDaily = UserTrafficDaily::query()
 		                                    ->whereUserId($user->id)
 		                                    ->whereNodeId(0)
-		                                    ->where('created_at', '>=', date('Y-m', time()))
+		                                    ->where('created_at', '>=', date('Y-m'))
 		                                    ->orderBy('created_at')
 		                                    ->pluck('total')
 		                                    ->toArray();
@@ -781,7 +786,7 @@ EOF;
 		$userTrafficHourly = UserTrafficHourly::query()
 		                                      ->whereUserId($user->id)
 		                                      ->whereNodeId(0)
-		                                      ->where('created_at', '>=', date('Y-m-d', time()))
+		                                      ->where('created_at', '>=', date('Y-m-d'))
 		                                      ->orderBy('created_at')
 		                                      ->pluck('total')
 		                                      ->toArray();
@@ -840,37 +845,37 @@ EOF;
 			$ssConfig->save();
 
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
-		}else{
-			$labelList = Label::query()->get();
-			foreach($labelList as $label){
-				$label->nodeCount = SsNodeLabel::query()->whereLabelId($label->id)->groupBy('label_id')->count();
-			}
-
-			$view['method_list'] = SsConfig::type(1)->get();
-			$view['protocol_list'] = SsConfig::type(2)->get();
-			$view['obfs_list'] = SsConfig::type(3)->get();
-			$view['country_list'] = Country::query()->get();
-			$view['level_list'] = Level::query()->get();
-			$view['labelList'] = $labelList;
+		}
 
-			return Response::view('admin.config.config', $view);
+		$labelList = Label::query()->get();
+		foreach($labelList as $label){
+			$label->nodeCount = SsNodeLabel::query()->whereLabelId($label->id)->groupBy('label_id')->count();
 		}
+
+		$view['method_list'] = SsConfig::type(1)->get();
+		$view['protocol_list'] = SsConfig::type(2)->get();
+		$view['obfs_list'] = SsConfig::type(3)->get();
+		$view['country_list'] = Country::query()->get();
+		$view['level_list'] = Level::query()->get();
+		$view['labelList'] = $labelList;
+
+		return Response::view('admin.config.config', $view);
 	}
 
 	// 删除配置
-	public function delConfig(Request $request) {
+	public function delConfig(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		$ret = SsConfig::query()->whereId($id)->delete();
 		if($ret){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '删除成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败']);
 	}
 
 	// 设置默认配置
-	public function setDefaultConfig(Request $request) {
+	public function setDefaultConfig(Request $request): JsonResponse {
 		$id = $request->input('id');
 
 		if(empty($id)){
@@ -892,7 +897,7 @@ EOF;
 	}
 
 	// 设置系统扩展信息,例如客服、统计代码
-	public function setExtend(Request $request) {
+	public function setExtend(Request $request): ?RedirectResponse {
 		$websiteAnalytics = $request->input('website_analytics');
 		$websiteCustomerService = $request->input('website_customer_service');
 
@@ -911,7 +916,7 @@ EOF;
 					return Redirect::back();
 				}
 
-				$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+				$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 				$move = $file->move(base_path().'/public/upload/image/', $logoName);
 				$websiteHomeLogo = $move? '/upload/image/'.$logoName : '';
 
@@ -930,7 +935,7 @@ EOF;
 					return Redirect::back();
 				}
 
-				$logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
+				$logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType;
 				$move = $file->move(base_path().'/public/upload/image/', $logoName);
 				$websiteLogo = $move? '/upload/image/'.$logoName : '';
 
@@ -955,7 +960,7 @@ EOF;
 	}
 
 	// 添加等级
-	public function addLevel(Request $request) {
+	public function addLevel(Request $request): ?JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'level'      => 'required|numeric|unique:level,level',
 			'level_name' => 'required',
@@ -972,13 +977,13 @@ EOF;
 
 		if($obj->id){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '提交成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 	}
 
 	// 编辑等级
-	public function updateLevel(Request $request) {
+	public function updateLevel(Request $request): JsonResponse {
 		$id = $request->input('id');
 		$level = $request->input('level');
 
@@ -1009,7 +1014,7 @@ EOF;
 	}
 
 	// 删除等级
-	public function delLevel(Request $request) {
+	public function delLevel(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		$validator = Validator::make($request->all(), [
@@ -1035,13 +1040,13 @@ EOF;
 		}
 		if($ret){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 	}
 
 	// 添加国家/地区
-	public function addCountry(Request $request) {
+	public function addCountry(Request $request): ?JsonResponse {
 		$name = $request->input('country_name');
 		$code = $request->input('country_code');
 
@@ -1065,13 +1070,13 @@ EOF;
 
 		if($obj->id){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '提交成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 	}
 
 	// 编辑国家/地区
-	public function updateCountry(Request $request) {
+	public function updateCountry(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 		$name = $request->input('country_name');
 		$code = $request->input('country_code');
@@ -1102,13 +1107,13 @@ EOF;
 		$ret = Country::query()->whereId($id)->update(['name' => $name, 'code' => $code]);
 		if($ret){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 	}
 
 	// 删除国家/地区
-	public function delCountry(Request $request) {
+	public function delCountry(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		if(empty($id)){
@@ -1133,13 +1138,13 @@ EOF;
 		}
 		if($ret){
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
 	}
 
 	// 系统设置
-	public function system() {
+	public function system(): \Illuminate\Http\Response {
 		$view = self::$systemConfig;
 		$view['label_list'] = Label::query()->orderByDesc('sort')->orderBy('id')->get();
 
@@ -1147,7 +1152,7 @@ EOF;
 	}
 
 	// 设置某个配置项
-	public function setConfig(Request $request) {
+	public function setConfig(Request $request): JsonResponse {
 		$name = $request->input('name');
 		$value = $request->input('value');
 
@@ -1161,8 +1166,8 @@ EOF;
 		}
 
 		// 如果开启用户邮件重置密码,则先设置网站名称和网址
-		if(in_array($name, ['is_reset_password', 'is_activate_account', 'expire_warning', 'traffic_warning'])
-		   && $value != '0'){
+		if($value != '0'
+		   && in_array($name, ['is_reset_password', 'is_activate_account', 'expire_warning', 'traffic_warning'])){
 			$config = Config::query()->whereName('website_name')->first();
 			if($config->value == ''){
 				return Response::json(['status' => 'fail', 'message' => '设置失败:启用该配置需要先设置【网站名称】']);
@@ -1175,7 +1180,7 @@ EOF;
 		}
 
 		// 支付设置判断
-		if(in_array($name, ['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay']) && $value != ''){
+		if($value != '' && in_array($name, ['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay'])){
 			switch($value){
 				case 'f2fpay':
 					if(!self::$systemConfig['f2fpay_app_id'] || !self::$systemConfig['f2fpay_private_key']
@@ -1223,13 +1228,13 @@ EOF;
 				'website_security_code'
 			];
 
-			if(in_array($name, $denyConfig)){
+			if(in_array($name, $denyConfig, true)){
 				return Response::json(['status' => 'fail', 'message' => '演示环境禁止修改该配置']);
 			}
 		}
 
 		// 如果是返利比例,则需要除100
-		if(in_array($name, ['referral_percent'])){
+		if($name == 'referral_percent'){
 			$value = intval($value) / 100;
 		}
 
@@ -1240,7 +1245,7 @@ EOF;
 	}
 
 	// 推送通知测试
-	public function sendTestNotification() {
+	public function sendTestNotification(): JsonResponse {
 		if(self::$systemConfig['is_notification']){
 			$result = PushNotification::send('这是测试的标题', 'SSRPanel_OM测试内容');
 			if($result == false){
@@ -1250,16 +1255,16 @@ EOF;
 				case 'serverChan':
 					if(!$result->errno){
 						return Response::json(['status' => 'success', 'message' => '发送成功,请查看手机是否收到推送消息']);
-					}else{
-						return Response::json(['status' => 'fail', 'message' => $result? $result->errmsg : '未知']);
 					}
+
+					return Response::json(['status' => 'fail', 'message' => $result? $result->errmsg : '未知']);
 					break;
 				case 'bark':
 					if($result->code == 200){
 						return Response::json(['status' => 'success', 'message' => '发送成功,请查看手机是否收到推送消息']);
-					}else{
-						return Response::json(['status' => 'fail', 'message' => $result->message]);
 					}
+
+					return Response::json(['status' => 'fail', 'message' => $result->message]);
 					break;
 				default:
 			}
@@ -1269,7 +1274,7 @@ EOF;
 	}
 
 	// 邀请码列表
-	public function inviteList(Request $request) {
+	public function inviteList(Request $request): \Illuminate\Http\Response {
 		$view['inviteList'] = Invite::query()
 		                            ->with(['generator', 'user'])
 		                            ->orderBy('status')
@@ -1281,7 +1286,7 @@ EOF;
 	}
 
 	// 生成邀请码
-	public function makeInvite() {
+	public function makeInvite(): JsonResponse {
 		for($i = 0; $i < 10; $i++){
 			$obj = new Invite();
 			$obj->uid = 0;
@@ -1296,7 +1301,7 @@ EOF;
 	}
 
 	// 导出邀请码
-	public function exportInvite() {
+	public function exportInvite(): void {
 		$inviteList = Invite::query()->whereStatus(0)->orderBy('id')->get();
 
 		$filename = '邀请码'.date('Ymd').'.xlsx';
@@ -1333,7 +1338,7 @@ EOF;
 	}
 
 	// 订单列表
-	public function orderList(Request $request) {
+	public function orderList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 		$order_sn = $request->input('order_sn');
 		$is_coupon = $request->input('is_coupon');
@@ -1347,7 +1352,7 @@ EOF;
 		$query = Order::query()->with(['user', 'goods', 'coupon']);
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -1396,7 +1401,7 @@ EOF;
 	}
 
 	// 重置用户流量
-	public function resetUserTraffic(Request $request) {
+	public function resetUserTraffic(Request $request): JsonResponse {
 		$id = $request->input('id');
 
 		User::query()->whereId($id)->update(['u' => 0, 'd' => 0]);
@@ -1443,13 +1448,13 @@ EOF;
 	}
 
 	// 用户余额变动记录
-	public function userCreditLogList(Request $request) {
+	public function userCreditLogList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 
 		$query = UserCreditLog::query()->with(['user'])->orderByDesc('id');
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -1460,13 +1465,13 @@ EOF;
 	}
 
 	// 用户封禁记录
-	public function userBanLogList(Request $request) {
+	public function userBanLogList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 
 		$query = UserBanLog::query()->with(['user'])->orderByDesc('id');
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -1477,13 +1482,13 @@ EOF;
 	}
 
 	// 用户流量变动记录
-	public function userTrafficLogList(Request $request) {
+	public function userTrafficLogList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 
 		$query = UserTrafficModifyLog::query()->with(['user', 'order', 'order.goods']);
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
@@ -1494,7 +1499,7 @@ EOF;
 	}
 
 	// 用户在线IP记录
-	public function userOnlineIPList(Request $request) {
+	public function userOnlineIPList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 		$port = $request->input('port');
 		$wechat = $request->input('wechat');
@@ -1539,7 +1544,7 @@ EOF;
 	}
 
 	// 转换成某个用户的身份
-	public function switchToUser(Request $request) {
+	public function switchToUser(Request $request): JsonResponse {
 		$id = $request->input('user_id');
 
 		$user = User::query()->find($id);
@@ -1566,9 +1571,9 @@ EOF;
 			$label->save();
 
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
-		}else{
-			return Response::view('admin.label.addLabel');
 		}
+
+		return Response::view('admin.label.addLabel');
 	}
 
 	// 编辑标签
@@ -1581,16 +1586,16 @@ EOF;
 			Label::query()->whereId($id)->update(['name' => $name, 'sort' => $sort]);
 
 			return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
-		}else{
-			$id = $request->input('id');
-			$view['label'] = Label::query()->whereId($id)->first();
-
-			return Response::view('admin.label.editLabel', $view);
 		}
+
+		$id = $request->input('id');
+		$view['label'] = Label::query()->whereId($id)->first();
+
+		return Response::view('admin.label.editLabel', $view);
 	}
 
 	// 删除标签
-	public function delLabel(Request $request) {
+	public function delLabel(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		DB::beginTransaction();
@@ -1609,7 +1614,7 @@ EOF;
 	}
 
 	// 邮件发送日志列表
-	public function notificationLog(Request $request) {
+	public function notificationLog(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 		$type = $request->input('type');
 
@@ -1629,7 +1634,7 @@ EOF;
 	}
 
 	// 在线IP监控(实时)
-	public function onlineIPMonitor(Request $request) {
+	public function onlineIPMonitor(Request $request): \Illuminate\Http\Response {
 		$ip = $request->input('ip');
 		$email = $request->input('email');
 		$port = $request->input('port');
@@ -1643,25 +1648,25 @@ EOF;
 		}
 
 		if(isset($email)){
-			$query->whereHas('user', function($q) use ($email) {
+			$query->whereHas('user', static function($q) use ($email) {
 				$q->where('email', 'like', '%'.$email.'%');
 			});
 		}
 
 		if(isset($port)){
-			$query->whereHas('user', function($q) use ($port) {
+			$query->whereHas('user', static function($q) use ($port) {
 				$q->wherePort($port);
 			});
 		}
 
 		if(isset($nodeId)){
-			$query->whereHas('node', function($q) use ($nodeId) {
+			$query->whereHas('node', static function($q) use ($nodeId) {
 				$q->whereId($nodeId);
 			});
 		}
 
 		if(isset($userId)){
-			$query->whereHas('user', function($q) use ($userId) {
+			$query->whereHas('user', static function($q) use ($userId) {
 				$q->whereId($userId);
 			});
 		}
@@ -1669,7 +1674,7 @@ EOF;
 		$list = $query->groupBy('user_id', 'node_id')->orderByDesc('id');
 		foreach($list as $vo){
 			// 跳过上报多IP的
-			if(strpos($vo->ip, ',') == true || $vo->ip == null){
+			if($vo->ip == null || strpos($vo->ip, ',') === true){
 				continue;
 			}
 			$ipInfo = QQWry::ip($vo->ip);

+ 8 - 5
app/Http/Controllers/Api/LoginController.php

@@ -12,6 +12,7 @@ use Cache;
 use DB;
 use Exception;
 use Hash;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
 
@@ -25,12 +26,12 @@ use Response;
 class LoginController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
 	// 登录返回订阅信息
-	public function login(Request $request) {
+	public function login(Request $request): ?JsonResponse {
 		$email = $request->input('email');
 		$password = $request->input('password');
 		$cacheKey = 'request_times_'.md5(getClientIp());
@@ -55,7 +56,9 @@ class LoginController extends Controller {
 			Cache::increment($cacheKey);
 
 			return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号不存在或已被禁用']);
-		}elseif(!Hash::check($password, $user->password)){
+		}
+
+		if(!Hash::check($password, $user->password)){
 			return Response::json(['status' => 'fail', 'data' => [], 'message' => '用户名或密码错误']);
 		}
 
@@ -71,7 +74,7 @@ class LoginController extends Controller {
 			$this->subscribeLog($subscribe->id, getClientIp(), 'API访问');
 
 			// 订阅链接
-			$url = self::$systemConfig['subscribe_domain']? self::$systemConfig['subscribe_domain'] : self::$systemConfig['website_url'];
+			$url = self::$systemConfig['subscribe_domain']?: self::$systemConfig['website_url'];
 
 			// 节点列表
 			$nodeList = SsNode::query()->whereStatus(1)->where('level', '<=', $user->level)->get();
@@ -124,7 +127,7 @@ class LoginController extends Controller {
 	}
 
 	// 写入订阅访问日志
-	private function subscribeLog($subscribeId, $ip, $headers) {
+	private function subscribeLog($subscribeId, $ip, $headers): void {
 		$log = new UserSubscribeLog();
 		$log->sid = $subscribeId;
 		$log->request_ip = $ip;

+ 3 - 6
app/Http/Controllers/Api/PingController.php

@@ -48,12 +48,9 @@ class PingController extends Controller {
 			return response()->json(['status' => 0, 'message' => 'token invalid']);
 		}
 
-		// 如果不是IPv4
-		if(false === filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)){
-			// 如果是IPv6
-			if(filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
-				$host = '['.$host.']';
-			}
+		if((false === filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))// 如果不是IPv4
+		   && filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){// 如果是IPv6
+			$host = '['.$host.']';
 		}
 
 		try{

+ 11 - 8
app/Http/Controllers/Api/WebApi/BaseController.php

@@ -12,12 +12,13 @@ use App\Models\SsNodeIp;
 use App\Models\SsNodeOnlineLog;
 use App\Models\User;
 use App\Models\UserTrafficLog;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
 
 class BaseController {
 	// 上报节点心跳信息
-	public function setNodeStatus(Request $request, $id) {
+	public function setNodeStatus(Request $request, $id): JsonResponse {
 		$cpu = intval($request->input('cpu')) / 100;
 		$mem = intval($request->input('mem')) / 100;
 		$disk = intval($request->input('disk')) / 100;
@@ -42,7 +43,7 @@ class BaseController {
 	}
 
 	// 返回数据
-	public function returnData($message, $status = 'fail', $code = 400, $data = '', $addition = false) {
+	public function returnData($message, $status = 'fail', $code = 400, $data = '', $addition = false): JsonResponse {
 		$data = ['status' => $status, 'code' => $code, 'data' => $data, 'message' => $message];
 
 		if($addition){
@@ -53,13 +54,15 @@ class BaseController {
 	}
 
 	// 上报节点在线人数
-	public function setNodeOnline(Request $request, $id) {
+	public function setNodeOnline(Request $request, $id): JsonResponse {
 		$inputArray = $request->all();
 		$onlineCount = 0;
 		foreach($inputArray as $input){
 			if(!array_key_exists('ip', $input) || !array_key_exists('uid', $input)){
 				return $this->returnData('上报节点在线情况失败,请检查字段');
-			}elseif(!isset($input['ip']) || !isset($input['uid'])){
+			}
+
+			if(!isset($input['ip'], $input['uid'])){
 				return $this->returnData('上报节点在线情况失败,请检查字段');
 			}
 
@@ -91,7 +94,7 @@ class BaseController {
 	}
 
 	// 上报用户流量日志
-	public function setUserTraffic(Request $request, $id) {
+	public function setUserTraffic(Request $request, $id): JsonResponse {
 		$inputArray = $request->all();
 
 		foreach($inputArray as $input){
@@ -121,7 +124,7 @@ class BaseController {
 
 
 	// 获取节点的审计规则
-	public function getNodeRule($id) {
+	public function getNodeRule($id): JsonResponse {
 		$nodeRule = RuleGroupNode::whereNodeId($id)->first();
 		$data = [];
 		//节点未设置任何审计规则
@@ -137,7 +140,7 @@ class BaseController {
 							'type'    => $rule->type_api_label,
 							'pattern' => $rule->pattern
 						];
-						array_push($data, $new);
+						$data[] = $new;
 					}
 				}
 
@@ -151,7 +154,7 @@ class BaseController {
 	}
 
 	// 上报用户触发的审计规则记录
-	public function addRuleLog(Request $request, $id) {
+	public function addRuleLog(Request $request, $id): JsonResponse {
 		if($request->has(['uid', 'rule_id', 'reason'])){
 			$obj = new RuleLog();
 			$obj->user_id = $request->input('uid');

+ 4 - 4
app/Http/Controllers/Api/WebApi/TrojanController.php

@@ -5,11 +5,11 @@ namespace App\Http\Controllers\Api\WebApi;
 use App\Components\Helpers;
 use App\Models\SsNode;
 use App\Models\User;
-use Illuminate\Http\Request;
+use Illuminate\Http\JsonResponse;
 
 class TrojanController extends BaseController {
 	// 获取节点信息
-	public function getNodeInfo($id) {
+	public function getNodeInfo($id): JsonResponse {
 		$node = SsNode::query()->whereId($id)->first();
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
@@ -25,7 +25,7 @@ class TrojanController extends BaseController {
 	}
 
 	// 获取节点可用的用户列表
-	public function getUserList(Request $request, $id) {
+	public function getUserList($id): JsonResponse {
 		$node = SsNode::query()->whereId($id)->first();
 		$users = User::query()->where('status', '<>', -1)->whereEnable(1)->where('level', '>=', $node->level)->get();
 		$data = [];
@@ -36,7 +36,7 @@ class TrojanController extends BaseController {
 				'password'    => str_replace('-', '', $user->vmess_id),
 				'speed_limit' => $user->speed_limit
 			];
-			array_push($data, $new);
+			$data[] = $new;
 		}
 
 		if($data){

+ 5 - 4
app/Http/Controllers/Api/WebApi/V2RayController.php

@@ -6,11 +6,12 @@ use App\Components\Helpers;
 use App\Models\NodeCertificate;
 use App\Models\SsNode;
 use App\Models\User;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 
 class V2RayController extends BaseController {
 	// 获取节点信息
-	public function getNodeInfo($id) {
+	public function getNodeInfo($id): JsonResponse {
 		$node = SsNode::query()->whereId($id)->first();
 		$nodeTls = NodeCertificate::query()->whereId($node->server)->first();
 
@@ -37,7 +38,7 @@ class V2RayController extends BaseController {
 	}
 
 	// 获取节点可用的用户列表
-	public function getUserList(Request $request, $id) {
+	public function getUserList($id): JsonResponse {
 		$node = SsNode::query()->whereId($id)->first();
 		$users = User::query()->where('status', '<>', -1)->whereEnable(1)->where('level', '>=', $node->level)->get();
 		$data = [];
@@ -48,7 +49,7 @@ class V2RayController extends BaseController {
 				'vmess_uid'   => $user->vmess_id,
 				'speed_limit' => $user->speed_limit
 			];
-			array_push($data, $new);
+			$data[] = $new;
 		}
 
 		if($data){
@@ -59,7 +60,7 @@ class V2RayController extends BaseController {
 	}
 
 	// 上报节点伪装域名证书信息
-	public function addCertificate(Request $request, $id) {
+	public function addCertificate(Request $request, $id): JsonResponse {
 		if($request->has(['key', 'pem'])){
 			$node = SsNode::find($id);
 			$obj = new NodeCertificate();

+ 4 - 4
app/Http/Controllers/Api/WebApi/VNetController.php

@@ -4,11 +4,11 @@ namespace App\Http\Controllers\Api\WebApi;
 
 use App\Models\SsNode;
 use App\Models\User;
-use Illuminate\Http\Request;
+use Illuminate\Http\JsonResponse;
 
 class VNetController extends BaseController {
 	// 获取节点信息
-	public function getNodeInfo($id) {
+	public function getNodeInfo($id): JsonResponse {
 		$node = SsNode::query()->whereId($id)->first();
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
@@ -29,7 +29,7 @@ class VNetController extends BaseController {
 	}
 
 	// 获取节点可用的用户列表
-	public function getUserList(Request $request, $id) {
+	public function getUserList($id): JsonResponse {
 		$node = SsNode::query()->whereId($id)->first();
 		$users = User::query()->where('status', '<>', -1)->whereEnable(1)->where('level', '>=', $node->level)->get();
 		$data = [];
@@ -46,7 +46,7 @@ class VNetController extends BaseController {
 				'speed_limit' => $user->speed_limit,
 				'enable'      => $user->enable
 			];
-			array_push($data, $new);
+			$data[] = $new;
 		}
 
 		if($data){

+ 94 - 77
app/Http/Controllers/AuthController.php

@@ -20,6 +20,7 @@ use Cache;
 use Captcha;
 use Cookie;
 use Hash;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Log;
 use Mail;
@@ -38,7 +39,7 @@ use Validator;
 class AuthController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
@@ -76,7 +77,9 @@ class AuthController extends Controller {
 
 					return Redirect::back()->withInput()->withErrors(trans('auth.login_ban',
 						['email' => self::$systemConfig['webmaster_email']]));
-				}elseif($user->status == 0 && self::$systemConfig['is_activate_account']){
+				}
+
+				if($user->status == 0 && self::$systemConfig['is_activate_account']){
 					Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
 
 					return Redirect::back()
@@ -97,17 +100,17 @@ class AuthController extends Controller {
 			}
 
 			return Redirect::to('/');
-		}else{
-			if(Auth::check()){
-				if(Auth::getUser()->is_admin){
-					return Redirect::to('admin');
-				}
+		}
 
-				return Redirect::to('/');
+		if(Auth::check()){
+			if(Auth::getUser()->is_admin){
+				return Redirect::to('admin');
 			}
 
-			return Response::view('auth.login');
+			return Redirect::to('/');
 		}
+
+		return Response::view('auth.login');
 	}
 
 	// 校验验证码
@@ -160,7 +163,7 @@ class AuthController extends Controller {
 	 * @param  string  $userId  用户ID
 	 * @param  string  $ip      IP地址
 	 */
-	private function addUserLoginLog($userId, $ip) {
+	private function addUserLoginLog($userId, $ip): void {
 		if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
 			Log::info('识别到IPv6,尝试解析:'.$ip);
 			$ipInfo = getIPv6($ip);
@@ -204,7 +207,7 @@ class AuthController extends Controller {
 
 	// 退出
 
-	public function logout() {
+	public function logout(): RedirectResponse {
 		Auth::logout();
 
 		return Redirect::to('login');
@@ -244,10 +247,10 @@ class AuthController extends Controller {
 			// 防止重复提交
 			if($register_token != Session::get('register_token')){
 				return Redirect::back()->withInput()->withErrors(trans('auth.repeat_request'));
-			}else{
-				Session::forget('register_token');
 			}
 
+			Session::forget('register_token');
+
 			// 是否开启注册
 			if(!self::$systemConfig['is_register']){
 				return Redirect::back()->withErrors(trans('auth.register_close'));
@@ -285,21 +288,21 @@ class AuthController extends Controller {
 					return Redirect::back()
 					               ->withInput($request->except(['verify_code']))
 					               ->withErrors(trans('auth.captcha_null'));
-				}else{
-					$verifyCode = VerifyCode::query()
-					                        ->whereAddress($email)
-					                        ->whereCode($verify_code)
-					                        ->whereStatus(0)
-					                        ->firstOrFail();
-					if(!$verifyCode){
-						return Redirect::back()
-						               ->withInput($request->except(['verify_code']))
-						               ->withErrors(trans('auth.captcha_overtime'));
-					}
+				}
 
-					$verifyCode->status = 1;
-					$verifyCode->save();
+				$verifyCode = VerifyCode::query()
+				                        ->whereAddress($email)
+				                        ->whereCode($verify_code)
+				                        ->whereStatus(0)
+				                        ->firstOrFail();
+				if(!$verifyCode){
+					return Redirect::back()
+					               ->withInput($request->except(['verify_code']))
+					               ->withErrors(trans('auth.captcha_overtime'));
 				}
+
+				$verifyCode->status = 1;
+				$verifyCode->save();
 			}
 
 			// 是否校验验证码
@@ -309,14 +312,12 @@ class AuthController extends Controller {
 			}
 
 			// 24小时内同IP注册限制
-			if(self::$systemConfig['register_ip_limit']){
-				if(Cache::has($cacheKey)){
-					$registerTimes = Cache::get($cacheKey);
-					if($registerTimes >= self::$systemConfig['register_ip_limit']){
-						return Redirect::back()
-						               ->withInput($request->except(['code']))
-						               ->withErrors(trans('auth.register_anti'));
-					}
+			if(self::$systemConfig['register_ip_limit'] && Cache::has($cacheKey)){
+				$registerTimes = Cache::get($cacheKey);
+				if($registerTimes >= self::$systemConfig['register_ip_limit']){
+					return Redirect::back()
+					               ->withInput($request->except(['code']))
+					               ->withErrors(trans('auth.register_anti'));
 				}
 			}
 
@@ -379,12 +380,10 @@ class AuthController extends Controller {
 				// 则直接给推荐人加流量
 				if($referral_uid){
 					$referralUser = User::query()->whereId($referral_uid)->first();
-					if($referralUser){
-						if($referralUser->expire_time >= date('Y-m-d')){
-							User::query()
-							    ->whereId($referral_uid)
-							    ->increment('transfer_enable', self::$systemConfig['referral_traffic'] * MB);
-						}
+					if($referralUser && $referralUser->expire_time >= date('Y-m-d')){
+						User::query()
+						    ->whereId($referral_uid)
+						    ->increment('transfer_enable', self::$systemConfig['referral_traffic'] * MB);
 					}
 				}
 
@@ -396,14 +395,14 @@ class AuthController extends Controller {
 			}
 
 			return Redirect::to('login')->withInput();
-		}else{
-			$view['emailList'] = self::$systemConfig['is_email_filtering'] != 2? false : SensitiveWords::query()
-			                                                                                           ->whereType(2)
-			                                                                                           ->get();
-			Session::put('register_token', makeRandStr(16));
-
-			return Response::view('auth.register', $view);
 		}
+
+		$view['emailList'] = self::$systemConfig['is_email_filtering'] != 2? false : SensitiveWords::query()
+		                                                                                           ->whereType(2)
+		                                                                                           ->get();
+		Session::put('register_token', makeRandStr(16));
+
+		return Response::view('auth.register', $view);
 	}
 
 	//邮箱检查
@@ -413,13 +412,13 @@ class AuthController extends Controller {
 		switch(self::$systemConfig['is_email_filtering']){
 			// 黑名单
 			case 1:
-				if(in_array(strtolower($emailSuffix[1]), $sensitiveWords)){
+				if(in_array(strtolower($emailSuffix[1]), $sensitiveWords, true)){
 					return Response::json(['status' => 'fail', 'message' => trans('auth.email_banned')]);
 				}
 				break;
 			//白名单
 			case 2:
-				if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords)){
+				if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords, true)){
 					return Response::json(['status' => 'fail', 'message' => trans('auth.email_invalid')]);
 				}
 				break;
@@ -438,7 +437,7 @@ class AuthController extends Controller {
 	 *
 	 * @return array
 	 */
-	private function getAff($code = '', $aff = null) {
+	private function getAff($code = '', $aff = null): array {
 		// 邀请人ID
 		$referral_uid = 0;
 
@@ -533,9 +532,9 @@ class AuthController extends Controller {
 			Cache::put('resetPassword_'.md5($email), $resetTimes + 1, Day);
 
 			return Redirect::back()->with('successMsg', trans('auth.reset_password_success_tip'));
-		}else{
-			return Response::view('auth.resetPassword');
 		}
+
+		return Response::view('auth.resetPassword');
 	}
 
 	// 重设密码
@@ -560,11 +559,17 @@ class AuthController extends Controller {
 			$verify = Verify::type(1)->with('user')->whereToken($token)->first();
 			if(!$verify){
 				return Redirect::to('login');
-			}elseif($verify->status == 1){
+			}
+
+			if($verify->status == 1){
 				return Redirect::back()->withErrors(trans('auth.overtime'));
-			}elseif($verify->user->status < 0){
+			}
+
+			if($verify->user->status < 0){
 				return Redirect::back()->withErrors(trans('auth.email_banned'));
-			}elseif(Hash::check($password, $verify->user->password)){
+			}
+
+			if(Hash::check($password, $verify->user->password)){
 				return Redirect::back()->withErrors(trans('auth.reset_password_same_fail'));
 			}
 
@@ -579,21 +584,23 @@ class AuthController extends Controller {
 			$verify->save();
 
 			return Redirect::back()->with('successMsg', trans('auth.reset_password_new'));
-		}else{
-			$verify = Verify::type(1)->whereToken($token)->first();
-			if(!$verify){
-				return Redirect::to('login');
-			}elseif(time() - strtotime($verify->created_at) >= 1800){
-				// 置为已失效
-				$verify->status = 2;
-				$verify->save();
-			}
+		}
 
-			// 重新获取一遍verify
-			$view['verify'] = Verify::type(1)->whereToken($token)->first();
+		$verify = Verify::type(1)->whereToken($token)->first();
+		if(!$verify){
+			return Redirect::to('login');
+		}
 
-			return Response::view('auth.reset', $view);
+		if(time() - strtotime($verify->created_at) >= 1800){
+			// 置为已失效
+			$verify->status = 2;
+			$verify->save();
 		}
+
+		// 重新获取一遍verify
+		$view['verify'] = Verify::type(1)->whereToken($token)->first();
+
+		return Response::view('auth.reset', $view);
 	}
 
 	// 激活账号页
@@ -619,7 +626,9 @@ class AuthController extends Controller {
 			if($user->status < 0){
 				return Redirect::back()->withErrors(trans('auth.login_ban',
 					['email' => self::$systemConfig['webmaster_email']]));
-			}elseif($user->status > 0){
+			}
+
+			if($user->status > 0){
 				return Redirect::back()->withErrors(trans('auth.email_normal'));
 			}
 
@@ -645,9 +654,9 @@ class AuthController extends Controller {
 			Cache::put('activeUser_'.md5($email), $activeTimes + 1, Day);
 
 			return Redirect::back()->with('successMsg', trans('auth.register_active_tip'));
-		}else{
-			return Response::view('auth.activeUser');
 		}
+
+		return Response::view('auth.activeUser');
 	}
 
 	// 激活账号
@@ -659,19 +668,27 @@ class AuthController extends Controller {
 		$verify = Verify::type(1)->with('user')->whereToken($token)->first();
 		if(!$verify){
 			return Redirect::to('login');
-		}elseif(empty($verify->user)){
+		}
+
+		if(empty($verify->user)){
 			Session::flash('errorMsg', trans('auth.overtime'));
 
 			return Response::view('auth.active');
-		}elseif($verify->status > 0){
+		}
+
+		if($verify->status > 0){
 			Session::flash('errorMsg', trans('auth.overtime'));
 
 			return Response::view('auth.active');
-		}elseif($verify->user->status != 0){
+		}
+
+		if($verify->user->status != 0){
 			Session::flash('errorMsg', trans('auth.email_normal'));
 
 			return Response::view('auth.active');
-		}elseif(time() - strtotime($verify->created_at) >= 1800){
+		}
+
+		if(time() - strtotime($verify->created_at) >= 1800){
 			Session::flash('errorMsg', trans('auth.overtime'));
 
 			// 置为已失效
@@ -754,7 +771,7 @@ class AuthController extends Controller {
 	}
 
 	// 生成注册验证码
-	private function addVerifyCode($email, $code) {
+	private function addVerifyCode($email, $code): void {
 		$verify = new VerifyCode();
 		$verify->address = $email;
 		$verify->code = $code;
@@ -763,14 +780,14 @@ class AuthController extends Controller {
 	}
 
 	// 公开的邀请码列表
-	public function free() {
+	public function free(): \Illuminate\Http\Response {
 		$view['inviteList'] = Invite::query()->whereUid(0)->whereStatus(0)->paginate();
 
 		return Response::view('auth.free', $view);
 	}
 
 	// 切换语言
-	public function switchLang($locale) {
+	public function switchLang($locale): RedirectResponse {
 		Session::put("locale", $locale);
 
 		return Redirect::back();

+ 15 - 13
app/Http/Controllers/Controller.php

@@ -10,6 +10,7 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 use Illuminate\Foundation\Bus\DispatchesJobs;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 use Illuminate\Routing\Controller as BaseController;
+use RuntimeException;
 
 class Controller extends BaseController {
 	use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
@@ -36,7 +37,7 @@ class Controller extends BaseController {
 			return false;
 		}
 
-		$fp = fopen($file, "r+");
+		$fp = fopen($file, 'rb+');
 		assert($n > 0);
 		$pos = $n + 1;
 		$lines = [];
@@ -63,8 +64,8 @@ class Controller extends BaseController {
 	 *
 	 * @return int
 	 */
-	public function countLine($file) {
-		$fp = fopen($file, "r");
+	public function countLine($file): int {
+		$fp = fopen($file, 'rb');
 		$i = 0;
 		while(!feof($fp)){
 			//每次读取2M
@@ -81,20 +82,23 @@ class Controller extends BaseController {
 	}
 
 	// 获取敏感词
-	public function sensitiveWords($type) {
+	public function sensitiveWords($type): array {
 		return SensitiveWords::query()->whereType($type)->get()->pluck('words')->toArray();
 	}
 
 	// 将Base64图片转换为本地图片并保存
-	function base64ImageSaver($base64_image_content) {
+	public function base64ImageSaver($base64_image_content): ?string {
 		// 匹配出图片的格式
 		if(preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
 			$type = $result[2];
 
 			$directory = date('Ymd');
 			$path = '/assets/images/qrcode/'.$directory.'/';
-			if(!file_exists(public_path($path))){ // 检查是否有该文件夹,如果没有就创建,并给予最高权限
-				mkdir(public_path($path), 0755, true);
+			// 检查是否有该文件夹,如果没有就创建,并给予最高权限
+			if(!file_exists(public_path($path))
+			   && !mkdir($concurrentDirectory = public_path($path), 0755, true)
+			   && !is_dir($concurrentDirectory)){
+				throw new RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
 			}
 
 			$fileName = makeRandStr(18, true).".{$type}";
@@ -103,12 +107,10 @@ class Controller extends BaseController {
 				chmod(public_path($path.$fileName), 0744);
 
 				return $path.$fileName;
-			}else{
-				return '';
 			}
-		}else{
-			return '';
 		}
+
+		return '';
 	}
 
 	/**
@@ -120,12 +122,12 @@ class Controller extends BaseController {
 	 *
 	 * @return string
 	 */
-	function getUserNodeInfo($uid, $nodeId, $infoType) {
+	public function getUserNodeInfo($uid, $nodeId, $infoType): ?string {
 		$user = User::whereId($uid)->first();
 		$node = SsNode::whereId($nodeId)->first();
 		$scheme = null;
 		// 获取分组名称
-		$group = $node->getLevel()->first()->name;
+		$group = $node->getLevel->name;
 		$host = $node->server?: $node->ip;
 		$data = null;
 		switch($node->type){

+ 14 - 12
app/Http/Controllers/Gateway/AbstractPayment.php

@@ -9,21 +9,22 @@ use App\Models\Payment;
 use App\Models\PaymentCallback;
 use App\Models\ReferralLog;
 use App\Models\User;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 
 abstract class AbstractPayment {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	abstract public function purchase(Request $request);
+	abstract public function purchase(Request $request): JsonResponse;
 
-	abstract public function notify(Request $request);
+	abstract public function notify(Request $request): void;
 
-	protected function postPayment($data, $method) {
+	protected function postPayment($data, $method): int {
 		// 获取需要的信息
 		$payment = Payment::whereTradeNo($data)->first();
 		// 是否为余额购买套餐
@@ -37,7 +38,7 @@ abstract class AbstractPayment {
 		$user = User::find($order->user_id);
 
 		//余额充值
-		if($order->goods_id == 0 || $order->goods_id == NULL){
+		if($order->goods_id == 0 || $order->goods_id == null){
 			Order::query()->whereOid($order->oid)->update(['status' => 2]);
 			User::query()->whereId($order->user_id)->increment('credit', $order->amount * 100);
 			// 余额变动记录日志
@@ -61,7 +62,7 @@ abstract class AbstractPayment {
 				                   ->with(['goods'])
 				                   ->whereIsExpire(0)
 				                   ->whereStatus(2)
-				                   ->whereHas('goods', function($q) {
+				                   ->whereHas('goods', static function($q) {
 					                   $q->whereType(2);
 				                   })
 				                   ->exists();
@@ -78,7 +79,7 @@ abstract class AbstractPayment {
 					]);
 				}else{
 					// 如果买的是套餐,则先将之前购买的套餐都无效化,重置用户已用、可用流量为0
-					Order::query()->whereUserId($user->id)->with(['goods'])->whereHas('goods', function($q) {
+					Order::query()->whereUserId($user->id)->with(['goods'])->whereHas('goods', static function($q) {
 						$q->where('type', '<=', 2);
 					})->whereIsExpire(0)->whereStatus(2)->where('oid', '<>', $order->oid)->update([
 						'expire_at' => date('Y-m-d H:i:s'),
@@ -146,7 +147,7 @@ abstract class AbstractPayment {
 	 *
 	 * @return int
 	 */
-	private function addReferralLog($userId, $refUserId, $oid, $amount, $refAmount) {
+	private function addReferralLog($userId, $refUserId, $oid, $amount, $refAmount): int {
 		$log = new ReferralLog();
 		$log->user_id = $userId;
 		$log->ref_user_id = $refUserId;
@@ -154,11 +155,12 @@ abstract class AbstractPayment {
 		$log->amount = $amount;
 		$log->ref_amount = $refAmount;
 		$log->status = 0;
+		$log->save();
 
-		return $log->save();
+		return 0;
 	}
 
-	protected function creatNewPayment($uid, $oid, $amount) {
+	protected function creatNewPayment($uid, $oid, $amount): Payment {
 		$payment = new Payment();
 		$payment->trade_no = self::generateGuid();
 		$payment->user_id = $uid;
@@ -169,7 +171,7 @@ abstract class AbstractPayment {
 		return $payment;
 	}
 
-	public static function generateGuid() {
+	public static function generateGuid(): string {
 		mt_srand((double) microtime() * 10000);
 		$charId = strtoupper(md5(uniqid(mt_rand() + time(), true)));
 		$hyphen = chr(45);
@@ -188,7 +190,7 @@ abstract class AbstractPayment {
 	 * @param  int     $amount        交易金额
 	 * @return int
 	 */
-	protected function addPamentCallback($trade_no, $out_trade_no, $amount) {
+	protected function addPamentCallback($trade_no, $out_trade_no, $amount): int {
 		$log = new PaymentCallback();
 		$log->trade_no = $trade_no;
 		$log->out_trade_no = $out_trade_no;

+ 9 - 8
app/Http/Controllers/Gateway/BitpayX.php

@@ -4,13 +4,14 @@ namespace App\Http\Controllers\Gateway;
 
 use App\Models\Payment;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Response;
 
 class BitpayX extends AbstractPayment {
 	private $bitpayGatewayUri = 'https://api.mugglepay.com/v1/';
 
-	public function purchase($request) {
-		$payment = $this->creatNewPayment(Auth::id(),$request->input('oid'),$request->input('amount'));
+	public function purchase($request): JsonResponse {
+		$payment = $this->creatNewPayment(Auth::id(), $request->input('oid'), $request->input('amount'));
 
 		$data = [
 			'merchant_order_id' => $payment->trade_no,
@@ -74,20 +75,20 @@ class BitpayX extends AbstractPayment {
 		}
 		curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
 		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
-		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
-		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
+		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
 		$data = curl_exec($curl);
 		curl_close($curl);
 
 		return $data;
 	}
 
-	public function notify($request) {
+	public function notify($request): void {
 		$inputString = file_get_contents('php://input', 'r');
 		$inputStripped = str_replace(["\r", "\n", "\t", "\v"], '', $inputString);
 		$inputJSON = json_decode($inputStripped, true); //convert JSON into array
 		$data = [];
-		if($inputJSON !== null){
+		if($inputJSON != null){
 			$data = [
 				'status'            => $inputJSON['status'],
 				'order_id'          => $inputJSON['order_id'],
@@ -100,7 +101,7 @@ class BitpayX extends AbstractPayment {
 		// 准备待签名数据
 		$str_to_sign = $this->prepareSignId($inputJSON['merchant_order_id']);
 		$resultVerify = $this->verify($str_to_sign, $inputJSON['token']);
-		$isPaid = $data !== null && $data['status'] !== null && $data['status'] === 'PAID';
+		$isPaid = $data != null && $data['status'] != null && $data['status'] === 'PAID';
 
 		if($resultVerify && $isPaid){
 			$this->postPayment($inputJSON['merchant_order_id'], 'BitPayX');
@@ -113,7 +114,7 @@ class BitpayX extends AbstractPayment {
 		exit();
 	}
 
-	private function verify($data, $signature) {
+	private function verify($data, $signature): bool {
 		$mySign = $this->sign($data);
 
 		return $mySign === $signature;

+ 4 - 3
app/Http/Controllers/Gateway/CodePay.php

@@ -4,11 +4,12 @@ namespace App\Http\Controllers\Gateway;
 
 use App\Models\Payment;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Response;
 
 class CodePay extends AbstractPayment {
-	public function purchase($request) {
-		$payment = $this->creatNewPayment(Auth::id(),$request->input('oid'),$request->input('amount'));
+	public function purchase($request): JsonResponse {
+		$payment = $this->creatNewPayment(Auth::id(), $request->input('oid'), $request->input('amount'));
 
 		$data = [
 			'id'         => parent::$systemConfig['codepay_id'],
@@ -46,7 +47,7 @@ class CodePay extends AbstractPayment {
 		return Response::json(['status' => 'success', 'url' => $url, 'message' => '创建订单成功!']);
 	}
 
-	public function notify($request) {
+	public function notify($request): void {
 		ksort($_POST);
 		reset($_POST);
 		$sign = '';

+ 7 - 7
app/Http/Controllers/Gateway/F2Fpay.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Gateway;
 use App\Models\Payment;
 use Auth;
 use Exception;
+use Illuminate\Http\JsonResponse;
 use InvalidArgumentException;
 use Log;
 use Payment\Client;
@@ -14,7 +15,7 @@ use Response;
 class F2Fpay extends AbstractPayment {
 	private static $aliConfig;
 
-	function __construct() {
+	public function __construct() {
 		parent::__construct();
 		self::$aliConfig = [
 			'use_sandbox'     => false,
@@ -29,8 +30,8 @@ class F2Fpay extends AbstractPayment {
 		];
 	}
 
-	public function purchase($request) {
-		$payment = $this->creatNewPayment(Auth::id(),$request->input('oid'),$request->input('amount'));
+	public function purchase($request): JsonResponse {
+		$payment = $this->creatNewPayment(Auth::id(), $request->input('oid'), $request->input('amount'));
 
 		$data = [
 			'body'        => '',
@@ -54,13 +55,12 @@ class F2Fpay extends AbstractPayment {
 			exit;
 		}
 
-		Payment::whereId($payment->id)
-		       ->update(['qr_code' => 'http://qr.topscan.com/api.php?text='.urlencode($result['qr_code']).'&el=1&w=400&m=10&logo=https://t.alipayobjects.com/tfscom/T1Z5XfXdxmXXXXXXXX.png']);//后备:https://cli.im/api/qrcode/code?text=".$result['qr_code']."&mhid=5EfGCwztyckhMHcmI9ZcOKs
+		Payment::whereId($payment->id)->update(['qr_code' => 1, 'url' => $result['qr_code']]);
 
 		return Response::json(['status' => 'success', 'data' => $payment->trade_no, 'message' => '创建订单成功!']);
 	}
 
-	public function notify($request) {
+	public function notify($request): void {
 		$data = [
 			'trade_no'       => $request->input('out_trade_no'),
 			'transaction_id' => $request->input('trade_no'),
@@ -85,7 +85,7 @@ class F2Fpay extends AbstractPayment {
 		if($result['code'] == 10000 && $result['msg'] == "Success"){
 			$ret = "success";
 			if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS'){
-				self::postPayment($request->input('out_trade_no'), '支付宝当面付');
+				$this->postPayment($request->input('out_trade_no'), '支付宝当面付');
 			}else{
 				Log::info('支付宝当面付-POST:交易失败['.getClientIp().']');
 			}

+ 5 - 4
app/Http/Controllers/Gateway/Local.php

@@ -8,26 +8,27 @@ use App\Models\Goods;
 use App\Models\Order;
 use App\Models\User;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Response;
 
 class Local extends AbstractPayment {
-	public function purchase($request) {
+	public function purchase($request): JsonResponse {
 		$amount = $request->input('amount');
 		$order = Order::whereOid($request->input('oid'))->first();
 		$goods = Goods::query()->whereStatus(1)->whereId($request->input('goods_id'))->first();
 		$user = Auth::getUser();
 
-		if($goods){
+		if($user && $goods){
 			User::query()->whereId($user->id)->decrement('credit', $amount * 100);
 			// 记录余额操作日志
 			Helpers::addUserCreditLog($user->id, $order->oid, $user->credit, $user->credit - $amount, -1 * $amount,
 				'购买商品:'.$goods->name);
 		}
 
-		self::postPayment($order->oid, '余额');
+		$this->postPayment($order->oid, '余额');
 
 		return Response::json(['status' => 'success', 'message' => '购买完成!']);
 	}
 
-	public function notify($request) { }
+	public function notify($request): void { }
 }

+ 6 - 8
app/Http/Controllers/Gateway/PayJs.php

@@ -4,13 +4,14 @@ namespace App\Http\Controllers\Gateway;
 
 use App\Models\Payment;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Response;
 use Xhat\Payjs\Payjs as Pay;
 
 class PayJs extends AbstractPayment {
 	private static $config;
 
-	function __construct() {
+	public function __construct() {
 		parent::__construct();
 		self::$config = [
 			'mchid' => self::$systemConfig['payjs_mch_id'],   // 配置商户号
@@ -18,7 +19,7 @@ class PayJs extends AbstractPayment {
 		];
 	}
 
-	public function purchase($request) {
+	public function purchase($request): JsonResponse {
 		$payment = $this->creatNewPayment(Auth::id(), $request->input('oid'), $request->input('amount'));
 
 		$result = (new Pay($this::$config))->cashier([
@@ -29,23 +30,20 @@ class PayJs extends AbstractPayment {
 		]);
 
 		// 获取收款二维码内容
-		Payment::whereId($payment->id)->update([
-			'url'     => $result,
-			'qr_code' => 'http://qr.topscan.com/api.php?text='.urlencode($result).'&el=1&w=400&m=10&logo='.parent::$systemConfig['website_url'].'/assets/images/payment/wechat.png'
-		]);
+		Payment::whereId($payment->id)->update(['qr_code' => 1, 'url' => $result]);
 
 		//$this->addPamentCallback($payment->trade_no, null, $payment->amount * 100);
 		return Response::json(['status' => 'success', 'data' => $payment->trade_no, 'message' => '创建订单成功!']);
 	}
 
-	public function notify($request) {
+	public function notify($request): void {
 		$data = (new Pay($this::$config))->notify();
 
 		if($data['return_code'] == 1){
 			//			PaymentCallback::query()
 			//			               ->whereTradeNo($data['out_trade_no'])
 			//			               ->update(['out_trade_no' => $data['payjs_order_id'], 'status' => 1]);
-			$this::postPayment($data['out_trade_no'], 'PayJs');
+			$this->postPayment($data['out_trade_no'], 'PayJs');
 			exit("success");
 		}
 		exit("fail");

+ 8 - 9
app/Http/Controllers/Gateway/PayPal.php

@@ -8,6 +8,7 @@ use App\Models\Order;
 use App\Models\Payment;
 use Auth;
 use Exception;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 use Response;
@@ -41,14 +42,12 @@ class PayPal extends AbstractPayment {
 		$this->exChange = 7;
 		$exChangeRate = json_decode(Curl::send('http://api.k780.com/?app=finance.rate&scur=USD&tcur=CNY&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4'),
 			true);
-		if($exChangeRate){
-			if($exChangeRate['success']){
-				$this->exChange = $exChangeRate['result']['rate'];
-			}
+		if($exChangeRate && $exChangeRate['success']){
+			$this->exChange = $exChangeRate['result']['rate'];
 		}
 	}
 
-	public function purchase($request) {
+	public function purchase($request): JsonResponse {
 		$payment = $this->creatNewPayment(Auth::id(), $request->input('oid'), $request->input('amount'));
 
 		$data = $this->getCheckoutData($payment->trade_no, $payment->amount);
@@ -69,7 +68,7 @@ class PayPal extends AbstractPayment {
 		}
 	}
 
-	protected function getCheckoutData($trade_no, $amount) {
+	protected function getCheckoutData($trade_no, $amount): array {
 		$amount = 0.3 + ceil($amount / $this->exChange * 100) / 100;
 
 		return [
@@ -114,7 +113,7 @@ class PayPal extends AbstractPayment {
 		return redirect('/invoices');
 	}
 
-	public function notify($request) {
+	public function notify($request): void {
 		$request->merge(['cmd' => '_notify-validate']);
 		foreach($request->input() as $key => $value){
 			if($value == null){
@@ -125,9 +124,9 @@ class PayPal extends AbstractPayment {
 
 		$response = (string) $this->provider->verifyIPN($post);
 
-		if($response === 'VERIFIED' && $request['invoice']){
+		if($response == 'VERIFIED' && $request['invoice']){
 			if(Payment::whereTradeNo($request['invoice'])->first()->status == 0){
-				self::postPayment($request['invoice'], 'PayPal');
+				$this->postPayment($request['invoice'], 'PayPal');
 			}
 			exit("success");
 		}

+ 40 - 39
app/Http/Controllers/NodeController.php

@@ -23,6 +23,7 @@ use App\Models\UserTrafficHourly;
 use App\Models\UserTrafficLog;
 use DB;
 use Exception;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 use Redirect;
@@ -32,7 +33,7 @@ use Validator;
 
 class NodeController extends Controller {
 	// 节点列表
-	public function nodeList(Request $request) {
+	public function nodeList(Request $request): \Illuminate\Http\Response {
 		$status = $request->input('status');
 
 		$query = SsNode::query();
@@ -71,7 +72,7 @@ class NodeController extends Controller {
 		return Response::view('admin.node.nodeList', $view);
 	}
 
-	public function checkNode(Request $request) {
+	public function checkNode(Request $request): JsonResponse {
 		$id = $request->input('id');
 		$node = SsNode::query()->whereId($id)->first();
 		// 使用DDNS的node先获取ipv4地址
@@ -174,7 +175,7 @@ class NodeController extends Controller {
 			$domain = explode('.', $domain);
 			$domainSuffix = end($domain); // 取得域名后缀
 
-			if(!in_array($domainSuffix, config('domains'))){
+			if(!in_array($domainSuffix, config('domains'), true)){
 				return Response::json(['status' => 'fail', 'message' => '绑定域名不合法']);
 			}
 		}
@@ -223,7 +224,7 @@ class NodeController extends Controller {
 	}
 
 	// 生成节点标签
-	private function makeLabels($nodeId, $labels) {
+	private function makeLabels($nodeId, $labels): void {
 		// 先删除所有该节点的标签
 		SsNodeLabel::query()->whereNodeId($nodeId)->delete();
 
@@ -327,7 +328,7 @@ class NodeController extends Controller {
 	}
 
 	// 删除节点
-	public function delNode(Request $request) {
+	public function delNode(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		$node = SsNode::query()->whereId($id)->first();
@@ -353,7 +354,7 @@ class NodeController extends Controller {
 			$RuleGroupList = RuleGroup::query()->get();
 			foreach($RuleGroupList as $RuleGroup){
 				$nodes = explode(',', $RuleGroup->nodes);
-				if(in_array($id, $nodes)){
+				if(in_array($id, $nodes, true)){
 					$nodes = implode(',', array_diff($nodes, [$id]));
 					RuleGroup::query()->whereId($RuleGroup->id)->update(['nodes' => $nodes]);
 				}
@@ -388,11 +389,11 @@ class NodeController extends Controller {
 		$nodeTrafficDaily = SsNodeTrafficDaily::query()
 		                                      ->with(['info'])
 		                                      ->whereNodeId($node->id)
-		                                      ->where('created_at', '>=', date('Y-m', time()))
+		                                      ->where('created_at', '>=', date('Y-m'))
 		                                      ->orderBy('created_at')
 		                                      ->pluck('total')
 		                                      ->toArray();
-		$dailyTotal = date('d', time()) - 1;//今天不算,减一
+		$dailyTotal = date('d') - 1;//今天不算,减一
 		$dailyCount = count($nodeTrafficDaily);
 		for($x = 0; $x < ($dailyTotal - $dailyCount); $x++){
 			$dailyData[$x] = 0;
@@ -405,11 +406,11 @@ class NodeController extends Controller {
 		$nodeTrafficHourly = SsNodeTrafficHourly::query()
 		                                        ->with(['info'])
 		                                        ->whereNodeId($node->id)
-		                                        ->where('created_at', '>=', date('Y-m-d', time()))
+		                                        ->where('created_at', '>=', date('Y-m-d'))
 		                                        ->orderBy('created_at')
 		                                        ->pluck('total')
 		                                        ->toArray();
-		$hourlyTotal = date('H', time());
+		$hourlyTotal = date('H');
 		$hourlyCount = count($nodeTrafficHourly);
 		for($x = 0; $x < ($hourlyTotal - $hourlyCount); $x++){
 			$hourlyData[$x] = 0;
@@ -443,7 +444,7 @@ class NodeController extends Controller {
 	}
 
 	// Ping节点延迟
-	public function pingNode(Request $request) {
+	public function pingNode(Request $request): ?JsonResponse {
 		$node = SsNode::query()->whereId($request->input('id'))->first();
 		if(!$node){
 			return Response::json(['status' => 'fail', 'message' => '节点不存在,请重试']);
@@ -458,13 +459,13 @@ class NodeController extends Controller {
 			$data[3] = $result['Hong Kong']['time']?: '无';
 
 			return Response::json(['status' => 'success', 'message' => $data]);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => 'Ping访问失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'message' => 'Ping访问失败']);
 	}
 
 	// Ping节点延迟日志
-	public function pingLog(Request $request) {
+	public function pingLog(Request $request): \Illuminate\Http\Response {
 		$node_id = $request->input('nodeId');
 		$query = SsNodePing::query();
 		if(isset($node_id)){
@@ -478,32 +479,32 @@ class NodeController extends Controller {
 	}
 
 	// 节点授权列表
-	public function authList(Request $request) {
+	public function authList(Request $request): \Illuminate\Http\Response {
 		$view['list'] = NodeAuth::query()->orderBy('id')->paginate(15)->appends($request->except('page'));
 		return Response::view('admin.node.authList', $view);
 	}
 
 	// 添加节点授权
-	public function addAuth() {
+	public function addAuth(): JsonResponse {
 		$nodeArray = SsNode::query()->whereStatus(1)->orderBy('id')->pluck('id')->toArray();
 		$authArray = NodeAuth::query()->orderBy('id')->pluck('node_id')->toArray();
 
 		if($nodeArray == $authArray){
 			return Response::json(['status' => 'success', 'message' => '没有需要生成授权的节点']);
-		}else{
-			foreach(array_diff($nodeArray, $authArray) as $nodeId){
-				$obj = new NodeAuth();
-				$obj->node_id = $nodeId;
-				$obj->key = makeRandStr(16);
-				$obj->secret = makeRandStr(8);
-				$obj->save();
-			}
+		}
+
+		foreach(array_diff($nodeArray, $authArray) as $nodeId){
+			$obj = new NodeAuth();
+			$obj->node_id = $nodeId;
+			$obj->key = makeRandStr(16);
+			$obj->secret = makeRandStr(8);
+			$obj->save();
 		}
 		return Response::json(['status' => 'success', 'message' => '生成成功']);
 	}
 
 	// 删除节点授权
-	public function delAuth(Request $request) {
+	public function delAuth(Request $request): JsonResponse {
 		try{
 			NodeAuth::query()->whereId($request->input('id'))->delete();
 		}catch(Exception $e){
@@ -513,20 +514,20 @@ class NodeController extends Controller {
 	}
 
 	// 重置节点授权
-	public function refreshAuth(Request $request) {
+	public function refreshAuth(Request $request): ?JsonResponse {
 		$ret = NodeAuth::query()->whereId($request->input('id'))->update([
 			'key'    => makeRandStr(16),
 			'secret' => makeRandStr(8)
 		]);
 		if($ret){
 			return Response::json(['status' => 'success', 'message' => '操作成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => '操作失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'message' => '操作失败']);
 	}
 
 	// 域名证书列表
-	public function certificateList(Request $request) {
+	public function certificateList(Request $request): \Illuminate\Http\Response {
 		$DvList = NodeCertificate::query()->orderBy('id')->paginate(15)->appends($request->except('page'));
 		foreach($DvList as $Dv){
 			if($Dv->key && $Dv->pem){
@@ -537,8 +538,8 @@ class NodeController extends Controller {
 				$Dv->to = $DvInfo['validTo']? date('Y-m-d', $DvInfo['validTo_time_t']) : null;
 			}
 		}
-			$view['list'] = $DvList;
-			return Response::view('admin.node.certificateList', $view);
+		$view['list'] = $DvList;
+		return Response::view('admin.node.certificateList', $view);
 	}
 
 	// 添加域名证书
@@ -552,12 +553,12 @@ class NodeController extends Controller {
 
 			if($obj->id){
 				return Response::json(['status' => 'success', 'message' => '生成成功']);
-			}else{
-				return Response::json(['status' => 'fail', 'message' => '生成失败']);
 			}
-		}else{
-			return Response::view('admin.node.certificateInfo');
+
+			return Response::json(['status' => 'fail', 'message' => '生成失败']);
 		}
+
+		return Response::view('admin.node.certificateInfo');
 	}
 
 	// 编辑域名证书
@@ -575,14 +576,14 @@ class NodeController extends Controller {
 				}
 			}
 			return Response::json(['status' => 'fail', 'message' => '修改失败']);
-		}else{
-			$view['Dv'] = $Dv;
-			return Response::view('admin.node.certificateInfo', $view);
 		}
+
+		$view['Dv'] = $Dv;
+		return Response::view('admin.node.certificateInfo', $view);
 	}
 
 	// 删除域名证书
-	public function delCertificate(Request $request) {
+	public function delCertificate(Request $request): JsonResponse {
 		try{
 			NodeCertificate::query()->whereId($request->input('id'))->delete();
 		}catch(Exception $e){

+ 23 - 13
app/Http/Controllers/PaymentController.php

@@ -15,6 +15,7 @@ use App\Models\Order;
 use App\Models\Payment;
 use App\Models\PaymentCallback;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
 use Response;
@@ -29,7 +30,7 @@ use Response;
 class PaymentController extends Controller {
 	private static $method;
 
-	public static function notify(Request $request) {
+	public static function notify(Request $request): int {
 		self::$method = $request->input('method');
 
 		Log::info(self::$method."回调接口[POST]:".self::$method.var_export($request->all(), true));
@@ -59,16 +60,18 @@ class PaymentController extends Controller {
 		}
 	}
 
-	public static function getStatus(Request $request) {
+	public static function getStatus(Request $request): JsonResponse {
 		$payment = Payment::whereTradeNo($request->input('trade_no'))->first();
 		if($payment){
 			if($payment->status == 1){
 				return Response::json(['status' => 'success', 'message' => '支付成功']);
-			}elseif($payment->status == -1){
+			}
+
+			if($payment->status == -1){
 				return Response::json(['status' => 'error', 'message' => '订单超时未支付,已自动关闭']);
-			}else{
-				return Response::json(['status' => 'fail', 'message' => '等待支付']);
 			}
+
+			return Response::json(['status' => 'fail', 'message' => '等待支付']);
 		}
 
 		return Response::json(['status' => 'error', 'message' => '未知订单']);
@@ -80,6 +83,7 @@ class PaymentController extends Controller {
 		$coupon_sn = $request->input('coupon_sn');
 		self::$method = $request->input('method');
 		$credit = $request->input('amount');
+		$pay_type = $request->input('pay_type');
 		$amount = 0;
 
 		$goods = Goods::query()->whereStatus(1)->whereId($goods_id)->first();
@@ -96,7 +100,7 @@ class PaymentController extends Controller {
 			}
 
 			// 是否有生效的套餐
-			$activePlan = Order::uid()->with(['goods'])->whereHas('goods', function($q) {
+			$activePlan = Order::uid()->with(['goods'])->whereHas('goods', static function($q) {
 				$q->whereType(2);
 			})->whereStatus(2)->whereIsExpire(0)->doesntExist();
 
@@ -147,7 +151,9 @@ class PaymentController extends Controller {
 			// 价格异常判断
 			if($amount < 0){
 				return Response::json(['status' => 'fail', 'message' => '订单创建失败:订单总价异常']);
-			}elseif($amount == 0 && self::$method != 'credit'){
+			}
+
+			if($amount == 0 && self::$method != 'credit'){
 				return Response::json(['status' => 'fail', 'message' => '订单创建失败:订单总价为0,无需使用在线支付']);
 			}
 
@@ -157,7 +163,7 @@ class PaymentController extends Controller {
 			}
 		}
 
-		$orderSn = date('ymdHis').mt_rand(100000, 999999);
+		$orderSn = date('ymdHis').random_int(100000, 999999);
 
 		// 生成订单
 		$order = new Order();
@@ -169,6 +175,7 @@ class PaymentController extends Controller {
 		$order->amount = $amount;
 		$order->expire_at = $credit? null : date("Y-m-d H:i:s", strtotime("+".$goods->days." days"));
 		$order->is_expire = 0;
+		$order->pay_type = $pay_type;
 		$order->pay_way = self::$method;
 		$order->status = 0;
 		$order->save();
@@ -188,7 +195,7 @@ class PaymentController extends Controller {
 		return self::getClient()->purchase($request);
 	}
 
-	public function close(Request $request) {
+	public function close(Request $request): JsonResponse {
 		$oid = $request->input('oid');
 		$order = Order::query()->whereOid($oid)->first();
 		$payment = Payment::query()->whereOid($oid)->first();
@@ -210,17 +217,20 @@ class PaymentController extends Controller {
 	}
 
 	// 支付单详情
-	public function detail($trade_no) {
+	public function detail($trade_no): \Illuminate\Http\Response {
 		$payment = Payment::uid()->with(['order', 'order.goods'])->whereTradeNo($trade_no)->first();
 		$view['payment'] = $payment;
-		$view['name'] = $payment->order->goods? $payment->order->goods->name : '余额充值';
-		$view['days'] = $payment->order->goods? $payment->order->goods->days : 0;
+		$goods = $payment->order->goods;
+		$view['name'] = $goods? $goods->name : '余额充值';
+		$view['days'] = $goods? $goods->days : 0;
+		$view['pay_type'] = $payment->order->pay_type_label?: 0;
+		$view['pay_type_icon'] = $payment->order->pay_type_icon;
 
 		return Response::view('user.payment', $view);
 	}
 
 	// 回调日志
-	public function callbackList(Request $request) {
+	public function callbackList(Request $request): \Illuminate\Http\Response {
 		$status = $request->input('status', 0);
 
 		$query = PaymentCallback::query();

+ 1 - 1
app/Http/Controllers/ServiceController.php

@@ -9,7 +9,7 @@ use App\Models\Order;
 use App\Models\User;
 
 class ServiceController extends Controller {
-	public function activePrepaidOrder($oid) {
+	public function activePrepaidOrder($oid): void {
 		// 取出预支付订单
 		$prepaidOrder = Order::find($oid);
 		//去除使用中的套餐和 流量包

+ 5 - 4
app/Http/Controllers/User/AffiliateController.php

@@ -9,18 +9,19 @@ use App\Models\ReferralApply;
 use App\Models\ReferralLog;
 use App\Models\User;
 use Auth;
+use Illuminate\Http\JsonResponse;
 use Response;
 
 class AffiliateController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
 	// 推广返利
-	public function referral() {
-		if(Order::uid()->whereStatus(2)->doesntExist() && ReferralLog::uid()->doesntExist()){
+	public function referral(): \Illuminate\Http\Response {
+		if(ReferralLog::uid()->doesntExist() && Order::uid()->whereStatus(2)->doesntExist()){
 			return Response::view('auth.error',
 				['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>']);
 		}
@@ -45,7 +46,7 @@ class AffiliateController extends Controller {
 	}
 
 	// 申请提现
-	public function extractMoney() {
+	public function extractMoney(): JsonResponse {
 		// 判断账户是否过期
 		if(Auth::getUser()->expire_time < date('Y-m-d')){
 			return Response::json(['status' => 'fail', 'message' => '申请失败:账号已过期,请先购买服务吧']);

+ 20 - 10
app/Http/Controllers/User/SubscribeController.php

@@ -16,7 +16,7 @@ class SubscribeController extends Controller {
 	protected static $systemConfig;
 	private $subType;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
@@ -31,7 +31,9 @@ class SubscribeController extends Controller {
 		$subscribe = UserSubscribe::query()->whereCode($code)->first();
 		if(!$subscribe){
 			exit($this->infoGenerator('使用的订阅链接错误!请重新从官网获取!'));
-		}elseif($subscribe->status != 1){
+		}
+
+		if($subscribe->status != 1){
 			exit($this->infoGenerator('您的订阅链接已被封禁,请前往官网查询原因!'));
 		}
 
@@ -39,19 +41,27 @@ class SubscribeController extends Controller {
 		$user = User::query()->whereId($subscribe->user_id)->first();
 		if(!$user){
 			exit($this->infoGenerator('错误订阅链接,账号不存在!请前往官网重新获取订阅链接'));
-		}elseif($user->status == -1){
+		}
+
+		if($user->status == -1){
 			exit($this->infoGenerator('您的账号已经被禁止使用,请重新注册'));
-		}elseif($user->enable != 1){
+		}
+
+		if($user->enable != 1){
 			$unusedTransfer = $user->transfer_enable - $user->u - $user->d;
 			if($user->ban_time > 0){
 				exit($this->infoGenerator('您的账号处于封禁状态,请在'.date('Y-m-d H:i:s', $user->ban_time).'之后再更新!'));
-			}elseif($unusedTransfer <= 0){
+			}
+
+			if($unusedTransfer <= 0){
 				exit($this->infoGenerator('账号流量耗尽!请前往官网购买或重置流量!'));
-			}elseif($user->expire_time < date('Y-m-d')){
+			}
+
+			if($user->expire_time < date('Y-m-d')){
 				exit($this->infoGenerator('账号过期!请前往官网购买!'));
-			}else{
-				exit($this->infoGenerator('账号存在问题,请前往官网查询!'));
 			}
+
+			exit($this->infoGenerator('账号存在问题,请前往官网查询!'));
 		}
 
 		// 更新访问次数
@@ -109,7 +119,7 @@ class SubscribeController extends Controller {
 	}
 
 	// 抛出错误的节点信息,用于兼容防止客户端订阅失败
-	private function infoGenerator($text) {
+	private function infoGenerator($text): string {
 		$result = null;
 		switch($this->subType){
 			case 2:
@@ -140,7 +150,7 @@ class SubscribeController extends Controller {
 	}
 
 	// 写入订阅访问日志
-	private function subscribeLog($subscribeId, $ip, $headers) {
+	private function subscribeLog($subscribeId, $ip, $headers): void {
 		$log = new UserSubscribeLog();
 		$log->sid = $subscribeId;
 		$log->request_ip = $ip;

+ 129 - 108
app/Http/Controllers/UserController.php

@@ -27,6 +27,7 @@ use Cache;
 use DB;
 use Exception;
 use Hash;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Illuminate\Validation\Rule;
 use Log;
@@ -46,11 +47,11 @@ use Validator;
 class UserController extends Controller {
 	protected static $systemConfig;
 
-	function __construct() {
+	public function __construct() {
 		self::$systemConfig = Helpers::systemConfig();
 	}
 
-	public function index() {
+	public function index(): \Illuminate\Http\Response {
 		$user = Auth::getUser();
 		$totalTransfer = $user->transfer_enable;
 		$usedTransfer = $user->u + $user->d;
@@ -86,11 +87,11 @@ class UserController extends Controller {
 		$userTrafficDaily = UserTrafficDaily::query()
 		                                    ->whereUserId($user->id)
 		                                    ->whereNodeId(0)
-		                                    ->where('created_at', '<=', date('Y-m-d', time()))
+		                                    ->where('created_at', '<=', date('Y-m-d'))
 		                                    ->orderBy('created_at')
 		                                    ->pluck('total')
 		                                    ->toArray();
-		$dailyTotal = date('d', time()) - 1; // 今天不算,减一
+		$dailyTotal = date('d') - 1; // 今天不算,减一
 		$dailyCount = count($userTrafficDaily);
 		for($x = 0; $x < $dailyTotal - $dailyCount; $x++){
 			$dailyData[$x] = 0;
@@ -103,7 +104,7 @@ class UserController extends Controller {
 		$userTrafficHourly = UserTrafficHourly::query()
 		                                      ->whereUserId($user->id)
 		                                      ->whereNodeId(0)
-		                                      ->where('created_at', '>=', date('Y-m-d', time()))
+		                                      ->where('created_at', '>=', date('Y-m-d'))
 		                                      ->orderBy('created_at')
 		                                      ->pluck('total')
 		                                      ->toArray();
@@ -136,7 +137,7 @@ class UserController extends Controller {
 	}
 
 	// 签到
-	public function checkIn() {
+	public function checkIn(): JsonResponse {
 		$user = Auth::getUser();
 		// 系统开启登录加积分功能才可以签到
 		if(!self::$systemConfig['is_checkin']){
@@ -148,7 +149,7 @@ class UserController extends Controller {
 			return Response::json(['status' => 'fail', 'message' => '已经签到过了,明天再来吧']);
 		}
 
-		$traffic = mt_rand((int) self::$systemConfig['min_rand_traffic'],
+		$traffic = random_int((int) self::$systemConfig['min_rand_traffic'],
 				(int) self::$systemConfig['max_rand_traffic']) * MB;
 		$ret = User::uid()->increment('transfer_enable', $traffic);
 		if(!$ret){
@@ -174,47 +175,51 @@ class UserController extends Controller {
 
 			$node = SsNode::query()->whereId($node_id)->first();
 			// 生成节点信息
-			$proxyType = $node->type == 1? ($node->compatible? 'SS' : 'SSR') : 'V2Ray';
+			if($node->type == 1){
+				$proxyType = $node->compatible? 'SS' : 'SSR';
+			}else{
+				$proxyType = 'V2Ray';
+			}
 			$data = $this->getUserNodeInfo(Auth::id(), $node->id, $infoType != 'text'? 0 : 1);
 
 			return Response::json(['status' => 'success', 'data' => $data, 'title' => $proxyType]);
-		}else{
-			// 获取当前用户可用节点
-			$nodeList = SsNode::query()
-			                  ->whereStatus(1)
-			                  ->where('level', '<=', Auth::getUser()->level)
-			                  ->orderByDesc('sort')
-			                  ->orderBy('id')
-			                  ->get();
-
-			foreach($nodeList as $node){
-				$node->ct = number_format(SsNodePing::query()->whereNodeId($node->id)->where('ct', '>', '0')->avg('ct'),
-					1, '.', '');
-				$node->cu = number_format(SsNodePing::query()->whereNodeId($node->id)->where('cu', '>', '0')->avg('cu'),
-					1, '.', '');
-				$node->cm = number_format(SsNodePing::query()->whereNodeId($node->id)->where('cm', '>', '0')->avg('cm'),
-					1, '.', '');
-				$node->hk = number_format(SsNodePing::query()->whereNodeId($node->id)->where('hk', '>', '0')->avg('hk'),
-					1, '.', '');
-
-				// 节点在线状态
-				$node->offline = SsNodeInfo::query()
-				                           ->whereNodeId($node->id)
-				                           ->where('log_time', '>=', strtotime("-10 minutes"))
-				                           ->orderByDesc('id')
-				                           ->doesntExist();
-				// 节点标签
-				$node->labels = SsNodeLabel::query()->whereNodeId($node->id)->get();
-			}
-			$view['nodeList'] = $nodeList?: [];
 		}
 
+		// 获取当前用户可用节点
+		$nodeList = SsNode::query()
+		                  ->whereStatus(1)
+		                  ->where('level', '<=', Auth::getUser()->level)
+		                  ->orderByDesc('sort')
+		                  ->orderBy('id')
+		                  ->get();
+
+		foreach($nodeList as $node){
+			$node->ct = number_format(SsNodePing::query()->whereNodeId($node->id)->where('ct', '>', '0')->avg('ct'), 1,
+				'.', '');
+			$node->cu = number_format(SsNodePing::query()->whereNodeId($node->id)->where('cu', '>', '0')->avg('cu'), 1,
+				'.', '');
+			$node->cm = number_format(SsNodePing::query()->whereNodeId($node->id)->where('cm', '>', '0')->avg('cm'), 1,
+				'.', '');
+			$node->hk = number_format(SsNodePing::query()->whereNodeId($node->id)->where('hk', '>', '0')->avg('hk'), 1,
+				'.', '');
+
+			// 节点在线状态
+			$node->offline = SsNodeInfo::query()
+			                           ->whereNodeId($node->id)
+			                           ->where('log_time', '>=', strtotime("-10 minutes"))
+			                           ->orderByDesc('id')
+			                           ->doesntExist();
+			// 节点标签
+			$node->labels = SsNodeLabel::query()->whereNodeId($node->id)->get();
+		}
+		$view['nodeList'] = $nodeList?: [];
+
 
 		return Response::view('user.nodeList', $view);
 	}
 
 	// 公告详情
-	public function article(Request $request) {
+	public function article(Request $request): \Illuminate\Http\Response {
 		$view['info'] = Article::query()->findOrFail($request->input('id'));
 
 		return Response::view('user.article', $view);
@@ -235,49 +240,53 @@ class UserController extends Controller {
 			if($old_password && $new_password){
 				if(!Hash::check($old_password, $user->password)){
 					return Redirect::to('profile#tab_1')->withErrors('旧密码错误,请重新输入');
-				}elseif(Hash::check($new_password, $user->password)){
+				}
+
+				if(Hash::check($new_password, $user->password)){
 					return Redirect::to('profile#tab_1')->withErrors('新密码不可与旧密码一样,请重新输入');
 				}
 
 				// 演示环境禁止改管理员密码
-				if(env('APP_DEMO') && $user->id == 1){
+				if($user->id == 1 && env('APP_DEMO')){
 					return Redirect::to('profile#tab_1')->withErrors('演示环境禁止修改管理员密码');
 				}
 
 				$ret = User::uid()->update(['password' => Hash::make($new_password)]);
 				if(!$ret){
 					return Redirect::to('profile#tab_1')->withErrors('修改失败');
-				}else{
-					return Redirect::to('profile#tab_1')->with('successMsg', '修改成功');
 				}
+
+				return Redirect::to('profile#tab_1')->with('successMsg', '修改成功');
 				// 修改代理密码
-			}elseif($passwd){
+			}
+
+			if($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('修改失败,昵称不能为空值');
 				}
 
-				$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', '修改成功');
-				}
+				return Redirect::to('profile#tab_3')->with('successMsg', '修改成功');
+			}
+
+			// 修改联系方式
+			if(empty($username)){
+				return Redirect::to('profile#tab_2')->withErrors('修改失败,昵称不能为空值');
 			}
-		}else{
-			return Response::view('user.profile');
+
+			$ret = User::uid()->update(['username' => $username, 'wechat' => $wechat, 'qq' => $qq]);
+			if(!$ret){
+				return Redirect::to('profile#tab_2')->withErrors('修改失败');
+			}
+
+			return Redirect::to('profile#tab_2')->with('successMsg', '修改成功');
 		}
+
+		return Response::view('user.profile');
 	}
 
 	// 商品列表
-	public function services(Request $request) {
+	public function services(Request $request): \Illuminate\Http\Response {
 		$user = Auth::getUser();
 		// 余额充值商品,只取10个
 		$view['chargeGoodsList'] = Goods::type(3)->whereStatus(1)->orderBy('price')->limit(10)->get();
@@ -293,51 +302,51 @@ class UserController extends Controller {
 		                   ->whereUserId($user->id)
 		                   ->whereStatus(2)
 		                   ->whereIsExpire(0)
-		                   ->whereHas('goods', function($q) {
+		                   ->whereHas('goods', static function($q) {
 			                   $q->whereType(2);
 		                   })
 		                   ->first();
 		$renewPrice = $renewOrder? Goods::query()->whereId($renewOrder->goods_id)->first() : 0;
 		$view['renewTraffic'] = $renewPrice? $renewPrice->renew : 0;
 		// 有重置日时按照重置日为标准,否者就以过期日为标准
-		$dataPlusDays = $user->reset_time? $user->reset_time : $user->expire_time;
+		$dataPlusDays = $user->reset_time?: $user->expire_time;
 		$view['dataPlusDays'] = $dataPlusDays > date('Y-m-d')? round((strtotime($dataPlusDays) - strtotime(date('Y-m-d'))) / Day) : 0;
 
 		return Response::view('user.services', $view);
 	}
 
 	//重置流量
-	public function resetUserTraffic() {
+	public function resetUserTraffic(): ?JsonResponse {
 		$user = Auth::getUser();
-		$temp = Order::uid()->whereStatus(2)->whereIsExpire(0)->with(['goods'])->whereHas('goods', function($q) {
+		$temp = Order::uid()->whereStatus(2)->whereIsExpire(0)->with(['goods'])->whereHas('goods', static function($q) {
 			$q->whereType(2);
 		})->first();
 		$renewCost = Goods::query()->whereId($temp->goods_id)->first()->renew;
 		if($user->credit < $renewCost){
 			return Response::json(['status' => 'fail', 'message' => '余额不足,请充值余额']);
-		}else{
-			User::uid()->update(['u' => 0, 'd' => 0]);
+		}
 
-			// 扣余额
-			User::query()->whereId($user->id)->decrement('credit', $renewCost * 100);
+		User::uid()->update(['u' => 0, 'd' => 0]);
 
-			// 记录余额操作日志
-			Helpers::addUserCreditLog($user->id, '', $user->credit, $user->credit - $renewCost, -1 * $renewCost,
-				'用户自行重置流量');
+		// 扣余额
+		User::query()->whereId($user->id)->decrement('credit', $renewCost * 100);
 
-			return Response::json(['status' => 'success', 'message' => '重置成功']);
-		}
+		// 记录余额操作日志
+		Helpers::addUserCreditLog($user->id, '', $user->credit, $user->credit - $renewCost, -1 * $renewCost,
+			'用户自行重置流量');
+
+		return Response::json(['status' => 'success', 'message' => '重置成功']);
 	}
 
 	// 工单
-	public function ticketList(Request $request) {
+	public function ticketList(Request $request): \Illuminate\Http\Response {
 		$view['ticketList'] = Ticket::uid()->orderByDesc('id')->paginate(10)->appends($request->except('page'));
 
 		return Response::view('user.ticketList', $view);
 	}
 
 	// 订单
-	public function invoices(Request $request) {
+	public function invoices(Request $request): \Illuminate\Http\Response {
 		$view['orderList'] = Order::uid()
 		                          ->with(['user', 'goods', 'coupon', 'payment'])
 		                          ->orderByDesc('oid')
@@ -347,32 +356,34 @@ class UserController extends Controller {
 		return Response::view('user.invoices', $view);
 	}
 
-	public function activeOrder(Request $request) {
+	public function activeOrder(Request $request): JsonResponse {
 		$oid = $request->input('oid');
 		$prepaidOrder = Order::query()->whereOid($oid)->first();
 		if(!$prepaidOrder){
 			return Response::json(['status' => 'fail', 'message' => '查无此单!']);
-		}elseif($prepaidOrder->status != 3){
+		}
+
+		if($prepaidOrder->status != 3){
 			return Response::json(['status' => 'fail', 'message' => '非预支付订单,无需再次启动!']);
-		}else{
-			(new ServiceController)->activePrepaidOrder($oid);
 		}
 
+		(new ServiceController)->activePrepaidOrder($oid);
+
 		return Response::json(['status' => 'success', 'message' => '激活成功']);
 	}
 
 	// 订单明细
-	public function invoiceDetail($sn) {
+	public function invoiceDetail($sn): \Illuminate\Http\Response {
 		$view['order'] = Order::uid()->with(['goods', 'coupon', 'payment'])->whereOrderSn($sn)->firstOrFail();
 
 		return Response::view('user.invoiceDetail', $view);
 	}
 
 	// 添加工单
-	public function createTicket(Request $request) {
+	public function createTicket(Request $request): ?JsonResponse {
 		$title = $request->input('title');
 		$content = clean($request->input('content'));
-		$content = str_replace("eval", "", str_replace("atob", "", $content));
+		$content = str_replace(["atob", "eval"], "", $content);
 
 		if(empty($title) || empty($content)){
 			return Response::json(['status' => 'fail', 'message' => '请输入标题和内容']);
@@ -398,9 +409,9 @@ class UserController extends Controller {
 			PushNotification::send($emailTitle, $content);
 
 			return Response::json(['status' => 'success', 'message' => '提交成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => '提交失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'message' => '提交失败']);
 	}
 
 	// 回复工单
@@ -411,7 +422,7 @@ class UserController extends Controller {
 
 		if($request->isMethod('POST')){
 			$content = clean($request->input('content'));
-			$content = str_replace("eval", "", str_replace("atob", "", $content));
+			$content = str_replace(["atob", "eval"], "", $content);
 			$content = substr($content, 0, 300);
 
 			if(empty($content)){
@@ -445,19 +456,19 @@ class UserController extends Controller {
 				PushNotification::send($title, $content);
 
 				return Response::json(['status' => 'success', 'message' => '回复成功']);
-			}else{
-				return Response::json(['status' => 'fail', 'message' => '回复失败']);
 			}
-		}else{
-			$view['ticket'] = $ticket;
-			$view['replyList'] = TicketReply::query()->whereTicketId($id)->with('user')->orderBy('id')->get();
 
-			return Response::view('user.replyTicket', $view);
+			return Response::json(['status' => 'fail', 'message' => '回复失败']);
 		}
+
+		$view['ticket'] = $ticket;
+		$view['replyList'] = TicketReply::query()->whereTicketId($id)->with('user')->orderBy('id')->get();
+
+		return Response::view('user.replyTicket', $view);
 	}
 
 	// 关闭工单
-	public function closeTicket(Request $request) {
+	public function closeTicket(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
 		$ret = Ticket::uid()->whereId($id)->update(['status' => 2]);
@@ -465,13 +476,13 @@ class UserController extends Controller {
 			PushNotification::send('工单关闭提醒', '工单:ID'.$id.'用户已手动关闭');
 
 			return Response::json(['status' => 'success', 'message' => '关闭成功']);
-		}else{
-			return Response::json(['status' => 'fail', 'message' => '关闭失败']);
 		}
+
+		return Response::json(['status' => 'fail', 'message' => '关闭失败']);
 	}
 
 	// 邀请码
-	public function invite() {
+	public function invite(): \Illuminate\Http\Response {
 		if(Order::uid()->whereStatus(2)->whereIsExpire(0)->where('origin_amount', '>', 0)->doesntExist()){
 			return Response::view('auth.error',
 				['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>']);
@@ -486,7 +497,7 @@ class UserController extends Controller {
 	}
 
 	// 生成邀请码
-	public function makeInvite() {
+	public function makeInvite(): JsonResponse {
 		if(Auth::getUser()->invite_num <= 0){
 			return Response::json(['status' => 'fail', 'message' => '生成失败:已无邀请码生成名额']);
 		}
@@ -505,7 +516,7 @@ class UserController extends Controller {
 	}
 
 	// 使用优惠券
-	public function redeemCoupon(Request $request) {
+	public function redeemCoupon(Request $request): JsonResponse {
 		$coupon_sn = $request->input('coupon_sn');
 		$good_price = $request->input('price');
 
@@ -516,18 +527,28 @@ class UserController extends Controller {
 		$coupon = Coupon::query()->whereSn($coupon_sn)->whereIn('type', [1, 2])->first();
 		if(!$coupon){
 			return Response::json(['status' => 'fail', 'title' => '优惠券不存在', 'message' => '请确认优惠券是否输入正确!']);
-		}elseif($coupon->status == 1){
+		}
+
+		if($coupon->status == 1){
 			return Response::json(['status' => 'fail', 'title' => '抱歉', 'message' => '优惠券已被使用!']);
-		}elseif($coupon->status == 2){
+		}
+
+		if($coupon->status == 2){
 			return Response::json(['status' => 'fail', 'title' => '抱歉', 'message' => '优惠券已失效!']);
-		}elseif($coupon->available_end < time()){
+		}
+
+		if($coupon->available_end < time()){
 			$coupon->status = 2;
 			$coupon->save();
 
 			return Response::json(['status' => 'fail', 'title' => '抱歉', 'message' => '优惠券已失效!']);
-		}elseif($coupon->available_start > time()){
+		}
+
+		if($coupon->available_start > time()){
 			return Response::json(['status' => 'fail', 'title' => '优惠券尚未生效', 'message' => '请等待活动正式开启']);
-		}elseif($good_price < $coupon->rule){
+		}
+
+		if($good_price < $coupon->rule){
 			return Response::json(['status' => 'fail', 'title' => '使用条件未满足', 'message' => '请购买价格更高的套餐']);
 		}
 
@@ -554,7 +575,7 @@ class UserController extends Controller {
 		                           ->with(['goods'])
 		                           ->whereIsExpire(0)
 		                           ->whereStatus(2)
-		                           ->whereHas('goods', function($q) {
+		                           ->whereHas('goods', static function($q) {
 			                           $q->whereType(2);
 		                           })
 		                           ->exists();
@@ -564,7 +585,7 @@ class UserController extends Controller {
 	}
 
 	// 帮助中心
-	public function help() {
+	public function help(): \Illuminate\Http\Response {
 		//$view['articleList'] = Article::type(1)->orderByDesc('sort')->orderByDesc('id')->limit(10)->paginate(5);
 		$data = [];
 		if(SsNode::query()->whereType(1)->whereStatus(1)->exists()){
@@ -592,7 +613,7 @@ class UserController extends Controller {
 		// 订阅连接
 		$subscribe = UserSubscribe::query()->whereUserId(Auth::id())->first();
 		$view['subscribe_status'] = $subscribe->status;
-		$subscribe_link = (self::$systemConfig['subscribe_domain']? self::$systemConfig['subscribe_domain'] : self::$systemConfig['website_url']).'/s/'.$subscribe->code;
+		$subscribe_link = (self::$systemConfig['subscribe_domain']?: self::$systemConfig['website_url']).'/s/'.$subscribe->code;
 		$view['link'] = $subscribe_link;
 		$view['subscribe_link'] = 'sub://'.base64url_encode($subscribe_link);
 		$view['Shadowrocket_link'] = 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.(self::$systemConfig['website_name'].'-'.self::$systemConfig['website_url']);
@@ -604,7 +625,7 @@ class UserController extends Controller {
 	}
 
 	// 更换订阅地址
-	public function exchangeSubscribe() {
+	public function exchangeSubscribe(): ?JsonResponse {
 		DB::beginTransaction();
 		try{
 			// 更换订阅码
@@ -626,7 +647,7 @@ class UserController extends Controller {
 	}
 
 	// 转换成管理员的身份
-	public function switchToAdmin() {
+	public function switchToAdmin(): JsonResponse {
 		if(!Session::has('admin')){
 			return Response::json(['status' => 'fail', 'message' => '非法请求']);
 		}
@@ -639,11 +660,11 @@ class UserController extends Controller {
 	}
 
 	// 卡券余额充值
-	public function charge(Request $request) {
+	public function charge(Request $request): ?JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'coupon_sn' => [
 				'required',
-				Rule::exists('coupon', 'sn')->where(function($query) {
+				Rule::exists('coupon', 'sn')->where(static function($query) {
 					$query->whereType(3)->whereStatus(0);
 				}),
 			]

+ 1 - 1
app/Http/Kernel.php

@@ -6,7 +6,7 @@ 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\isAdminLogin;
 use App\Http\Middleware\isForbidden;
 use App\Http\Middleware\isLogin;
 use App\Http\Middleware\isMaintenance;

+ 1 - 1
app/Http/Middleware/Authenticate.php

@@ -13,7 +13,7 @@ class Authenticate extends Middleware {
 	 */
 	protected function redirectTo($request) {
 		if(!$request->expectsJson()){
-			return route('login');
+			return route('/login');
 		}
 	}
 }

+ 0 - 7
app/Http/Middleware/VerifyCsrfToken.php

@@ -5,13 +5,6 @@ namespace App\Http\Middleware;
 use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
 
 class VerifyCsrfToken extends Middleware {
-	/**
-	 * Indicates whether the XSRF-TOKEN cookie should be set on the response.
-	 *
-	 * @var bool
-	 */
-	protected $addHttpCookie = true;
-
 	/**
 	 * The URIs that should be excluded from CSRF verification.
 	 *

+ 6 - 3
app/Http/Middleware/WebApi.php

@@ -5,6 +5,7 @@ namespace App\Http\Middleware;
 use App\Models\NodeAuth;
 use App\Models\SsNode;
 use Closure;
+use Illuminate\Http\JsonResponse;
 use Response;
 
 class WebApi {
@@ -21,9 +22,11 @@ class WebApi {
 		$key = $request->header('key');
 		$time = $request->header('timestamp');
 
-		if($key === null){// 未提供 key
+		if(isset($key)){// 未提供 key
 			return $this->returnData('Your key is null!');
-		}elseif($id === null){// 未提供 node
+		}
+
+		if(isset($id)){// 未提供 node
 			return $this->returnData('Your Node Id is null!');
 		}
 
@@ -45,7 +48,7 @@ class WebApi {
 	}
 
 	// 返回数据
-	public function returnData($message) {
+	public function returnData($message): JsonResponse {
 		return Response::json(['status' => 'fail', 'code' => 404, 'data' => '', 'message' => $message]);
 	}
 }

+ 1 - 1
app/Http/Middleware/isAdminlogin.php

@@ -6,7 +6,7 @@ use Closure;
 use Illuminate\Http\Request;
 use Redirect;
 
-class isAdminlogin {
+class isAdminLogin {
 	/**
 	 * Handle an incoming request.
 	 *

+ 8 - 11
app/Http/Middleware/isForbidden.php

@@ -21,12 +21,10 @@ class isForbidden {
 	 */
 	public function handle($request, Closure $next) {
 		// 拒绝机器人访问
-		if(Helpers::systemConfig()['is_forbid_robot']){
-			if(Agent::isRobot()){
-				Log::info("识别到机器人访问(".getClientIp().")");
+		if(Helpers::systemConfig()['is_forbid_robot'] && Agent::isRobot()){
+			Log::info("识别到机器人访问(".getClientIp().")");
 
-				return response()->view('auth.error', ['message' => trans('error.ForbiddenRobot')], 404);
-			}
+			return response()->view('auth.error', ['message' => trans('error.ForbiddenRobot')], 404);
 		}
 
 		// 拒绝通过订阅链接域名访问网站,防止网站被探测
@@ -72,9 +70,9 @@ class isForbidden {
 		if(!in_array($ipInfo['country'], ['本机地址', '局域网'])){
 			// 拒绝大陆IP访问
 			if(Helpers::systemConfig()['is_forbid_china']){
-				if(($ipInfo['country'] == '中国' && !in_array($ipInfo['province'], ['香港', '澳门', '台湾']))
-				   || ($isIPv6
-				       && $ipInfo['country'] == 'China')){
+				if(($isIPv6 && $ipInfo['country'] == 'China')
+				   || ($ipInfo['country'] == '中国'
+				       && !in_array($ipInfo['province'], ['香港', '澳门', '台湾']))){
 					Log::info('识别到大陆IP,拒绝访问:'.$ip);
 
 					return response()->view('auth.error', ['message' => trans('error.ForbiddenChina')], 403);
@@ -83,9 +81,8 @@ class isForbidden {
 
 			// 拒绝非大陆IP访问
 			if(Helpers::systemConfig()['is_forbid_oversea']){
-				if($ipInfo['country'] != '中国' || in_array($ipInfo['province'], ['香港', '澳门', '台湾'])
-				   || ($isIPv6
-				       && $ipInfo['country'] != 'China')){
+				if(($isIPv6 && $ipInfo['country'] != 'China') || $ipInfo['country'] != '中国'
+				   || in_array($ipInfo['province'], ['香港', '澳门', '台湾'])){
 					Log::info('识别到海外IP,拒绝访问:'.$ip.' - '.$ipInfo['country']);
 
 					return response()->view('auth.error', ['message' => trans('error.ForbiddenOversea')], 403);

+ 2 - 2
app/Http/Middleware/isSecurity.php

@@ -29,9 +29,9 @@ class isSecurity {
 				return response()->view('auth.error', [
 					'message' => trans('error.SecurityError').', '.trans('error.Visit').'<a href="/login?securityCode=" target="_self">'.trans('error.SecurityEnter').'</a>'
 				]);
-			}else{
-				Cache::put($cacheKey, $ip, 7200); // 2小时之内无需再次输入安全码访问
 			}
+
+			Cache::put($cacheKey, $ip, 7200); // 2小时之内无需再次输入安全码访问
 		}
 
 		return $next($request);

+ 1 - 1
app/Listeners/EventListener.php

@@ -21,7 +21,7 @@ class EventListener {
 	 *
 	 * @return void
 	 */
-	public function handle(Event $event) {
+	public function handle(Event $event): void {
 		//
 	}
 }

+ 1 - 1
app/Listeners/LogSendingMessage.php

@@ -21,7 +21,7 @@ class LogSendingMessage {
 	 *
 	 * @return void
 	 */
-	public function handle(MessageSending $event) {
+	public function handle(MessageSending $event): void {
 		//\Log::info('MessageSending:' . var_export($event->data, true));
 	}
 }

+ 1 - 1
app/Listeners/LogSentMessage.php

@@ -21,7 +21,7 @@ class LogSentMessage {
 	 *
 	 * @return void
 	 */
-	public function handle(MessageSent $event) {
+	public function handle(MessageSent $event): void {
 		//\Log::info('MessageSent:' . var_export($event, true));
 	}
 }

+ 2 - 2
app/Mail/activeUser.php

@@ -20,14 +20,14 @@ class activeUser extends Mailable implements ShouldQueue {
 		$this->activeUserUrl = $activeUserUrl;
 	}
 
-	public function build() {
+	public function build(): activeUser {
 		return $this->view('emails.activeUser')->subject('激活账号')->with([
 			'activeUserUrl' => $this->activeUserUrl
 		]);
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/closeTicket.php

@@ -22,7 +22,7 @@ class closeTicket extends Mailable implements ShouldQueue {
 		$this->content = $content;
 	}
 
-	public function build() {
+	public function build(): closeTicket {
 		return $this->view('emails.closeTicket')->subject('工单关闭提醒')->with([
 			'title'   => $this->title,
 			'content' => $this->content
@@ -30,7 +30,7 @@ class closeTicket extends Mailable implements ShouldQueue {
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/newTicket.php

@@ -22,7 +22,7 @@ class newTicket extends Mailable implements ShouldQueue {
 		$this->content = $content;
 	}
 
-	public function build() {
+	public function build(): newTicket {
 		return $this->view('emails.newTicket')->subject('新工单提醒')->with([
 			'title'   => $this->title,
 			'content' => $this->content
@@ -30,7 +30,7 @@ class newTicket extends Mailable implements ShouldQueue {
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/nodeCrashWarning.php

@@ -18,7 +18,7 @@ class nodeCrashWarning extends Mailable implements ShouldQueue {
 		$this->id = $id;
 	}
 
-	public function build() {
+	public function build(): nodeCrashWarning {
 
 		return $this->view('emails.nodeCrashWarning')->subject('节点阻断警告')->with([
 			'content' => NotificationLog::query()->whereId($this->id)->first()->content
@@ -26,7 +26,7 @@ class nodeCrashWarning extends Mailable implements ShouldQueue {
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/replyTicket.php

@@ -22,7 +22,7 @@ class replyTicket extends Mailable implements ShouldQueue {
 		$this->content = $content;
 	}
 
-	public function build() {
+	public function build(): replyTicket {
 		return $this->view('emails.replyTicket')->subject('工单回复提醒')->with([
 			'title'   => $this->title,
 			'content' => $this->content
@@ -30,7 +30,7 @@ class replyTicket extends Mailable implements ShouldQueue {
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/resetPassword.php

@@ -20,14 +20,14 @@ class resetPassword extends Mailable implements ShouldQueue {
 		$this->resetPasswordUrl = $resetPasswordUrl;
 	}
 
-	public function build() {
+	public function build(): resetPassword {
 		return $this->view('emails.resetPassword')->subject('重置密码')->with([
 			'resetPasswordUrl' => $this->resetPasswordUrl
 		]);
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/sendUserInfo.php

@@ -20,14 +20,14 @@ class sendUserInfo extends Mailable implements ShouldQueue {
 		$this->content = $content;
 	}
 
-	public function build() {
+	public function build(): sendUserInfo {
 		return $this->view('emails.sendUserInfo')->subject('发送账号信息')->with([
 			'content' => $this->content
 		]);
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/sendVerifyCode.php

@@ -20,14 +20,14 @@ class sendVerifyCode extends Mailable implements ShouldQueue {
 		$this->code = $code;
 	}
 
-	public function build() {
+	public function build(): sendVerifyCode {
 		return $this->view('emails.sendVerifyCode')->subject('发送注册验证码')->with([
 			'code' => $this->code
 		]);
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/userExpireWarning.php

@@ -20,14 +20,14 @@ class userExpireWarning extends Mailable implements ShouldQueue {
 		$this->lastCanUseDays = $lastCanUseDays;
 	}
 
-	public function build() {
+	public function build(): userExpireWarning {
 		return $this->view('emails.userExpireWarning')->subject('账号过期提醒')->with([
 			'lastCanUseDays' => $this->lastCanUseDays
 		]);
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/userExpireWarningToday.php

@@ -18,12 +18,12 @@ class userExpireWarningToday extends Mailable implements ShouldQueue {
 		$this->id = $id;
 	}
 
-	public function build() {
+	public function build(): userExpireWarningToday {
 		return $this->view('emails.userExpireWarningToday')->subject('账号过期提醒');
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 2 - 2
app/Mail/userTrafficWarning.php

@@ -20,14 +20,14 @@ class userTrafficWarning extends Mailable implements ShouldQueue {
 		$this->usedPercent = $usedPercent;
 	}
 
-	public function build() {
+	public function build(): userTrafficWarning {
 		return $this->view('emails.userTrafficWarning')->subject('流量警告')->with([
 			'usedPercent' => $this->usedPercent
 		]);
 	}
 
 	// 发件失败处理
-	public function failed(Exception $e) {
+	public function failed(Exception $e): void {
 		NotificationLog::query()->whereId($this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
 	}
 }

+ 1 - 2
app/Models/Article.php

@@ -44,11 +44,10 @@ class Article extends Model {
 	use SoftDeletes;
 
 	protected $table = 'article';
-	protected $primaryKey = 'id';
 	protected $dates = ['deleted_at'];
 
 	// 筛选类型
-	function scopeType($query, $type) {
+	public function scopeType($query, $type) {
 		return $query->whereType($type);
 	}
 }

+ 0 - 1
app/Models/Config.php

@@ -22,6 +22,5 @@ use Illuminate\Database\Eloquent\Model;
 class Config extends Model {
 	public $timestamps = false;
 	protected $table = 'config';
-	protected $primaryKey = 'id';
 
 }

+ 0 - 1
app/Models/Country.php

@@ -22,5 +22,4 @@ use Illuminate\Database\Eloquent\Model;
 class Country extends Model {
 	public $timestamps = false;
 	protected $table = 'country';
-	protected $primaryKey = 'id';
 }

+ 7 - 8
app/Models/Coupon.php

@@ -52,35 +52,34 @@ class Coupon extends Model {
 	use SoftDeletes;
 
 	protected $table = 'coupon';
-	protected $primaryKey = 'id';
 	protected $dates = ['deleted_at'];
 
 	// 筛选类型
-	function scopeType($query, $type) {
+	public function scopeType($query, $type) {
 		return $query->whereType($type);
 	}
 
-	function getAmountAttribute($value) {
+	public function getAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setAmountAttribute($value) {
+	public function setAmountAttribute($value): void {
 		$this->attributes['amount'] = $value * 100;
 	}
 
-	function getDiscountAttribute($value) {
+	public function getDiscountAttribute($value) {
 		return $value * 10;
 	}
 
-	function setDiscountAttribute($value) {
+	public function setDiscountAttribute($value): void {
 		$this->attributes['discount'] = $value / 10;
 	}
 
-	function getRuleAttribute($value) {
+	public function getRuleAttribute($value) {
 		return $value / 100;
 	}
 
-	function setRuleAttribute($value) {
+	public function setRuleAttribute($value): void {
 		$this->attributes['rule'] = $value * 100;
 	}
 }

+ 0 - 1
app/Models/CouponLog.php

@@ -29,6 +29,5 @@ use Illuminate\Database\Eloquent\Model;
  */
 class CouponLog extends Model {
 	protected $table = 'coupon_log';
-	protected $primaryKey = 'id';
 
 }

+ 6 - 7
app/Models/Goods.php

@@ -65,30 +65,29 @@ class Goods extends Model {
 	use SoftDeletes;
 
 	protected $table = 'goods';
-	protected $primaryKey = 'id';
 	protected $dates = ['deleted_at'];
 
-	function scopeType($query, $type) {
+	public function scopeType($query, $type) {
 		return $query->whereType($type)->whereStatus(1)->orderByDesc('sort');
 	}
 
-	function getPriceAttribute($value) {
+	public function getPriceAttribute($value) {
 		return $value / 100;
 	}
 
-	function setPriceAttribute($value) {
+	public function setPriceAttribute($value): void {
 		$this->attributes['price'] = $value * 100;
 	}
 
-	function getRenewAttribute($value) {
+	public function getRenewAttribute($value) {
 		return $value / 100;
 	}
 
-	function setRenewAttribute($value) {
+	public function setRenewAttribute($value) {
 		return $this->attributes['renew'] = $value * 100;
 	}
 
-	function getTrafficLabelAttribute() {
+	public function getTrafficLabelAttribute() {
 		return flowAutoShow($this->attributes['traffic'] * MB);
 	}
 }

+ 5 - 5
app/Models/Invite.php

@@ -4,6 +4,7 @@ namespace App\Models;
 
 use Auth;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Database\Query\Builder;
 
@@ -44,22 +45,21 @@ class Invite extends Model {
 	use SoftDeletes;
 
 	protected $table = 'invite';
-	protected $primaryKey = 'id';
 	protected $dates = ['deleted_at'];
 
-	function scopeUid($query) {
+	public function scopeUid($query) {
 		return $query->whereUid(Auth::id());
 	}
 
-	function generator() {
+	public function generator(): HasOne {
 		return $this->hasOne(User::class, 'id', 'uid');
 	}
 
-	function user() {
+	public function user(): HasOne {
 		return $this->hasOne(User::class, 'id', 'fuid');
 	}
 
-	function getStatusLabelAttribute() {
+	public function getStatusLabelAttribute(): string {
 		switch($this->attributes['status']){
 			case 0:
 				$status_label = '<span class="badge badge-success">'.trans('home.invite_code_table_status_un').'</span>';

+ 0 - 1
app/Models/Label.php

@@ -22,5 +22,4 @@ use Illuminate\Database\Eloquent\Model;
 class Label extends Model {
 	public $timestamps = false;
 	protected $table = 'label';
-	protected $primaryKey = 'id';
 }

+ 0 - 1
app/Models/Level.php

@@ -22,5 +22,4 @@ use Illuminate\Database\Eloquent\Model;
 class Level extends Model {
 	public $timestamps = false;
 	protected $table = 'level';
-	protected $primaryKey = 'id';
 }

+ 1 - 2
app/Models/Marketing.php

@@ -34,10 +34,9 @@ use Illuminate\Database\Eloquent\Model;
  */
 class Marketing extends Model {
 	protected $table = 'marketing';
-	protected $primaryKey = 'id';
 	protected $appends = ['status_label'];
 
-	function getStatusLabelAttribute() {
+	public function getStatusLabelAttribute(): string {
 		$status_label = '';
 		switch($this->attributes['status']){
 			case -1:

+ 2 - 2
app/Models/NodeAuth.php

@@ -4,6 +4,7 @@ namespace App\Models;
 
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 
 /**
  * App\Models\NodeAuth
@@ -28,9 +29,8 @@ use Illuminate\Database\Eloquent\Model;
  */
 class NodeAuth extends Model {
 	protected $table = 'node_auth';
-	protected $primaryKey = 'id';
 
-	function node() {
+	public function node(): HasOne {
 		return $this->hasOne(SsNode::class, 'id', 'node_id');
 	}
 }

+ 0 - 1
app/Models/NodeCertificate.php

@@ -27,5 +27,4 @@ use Illuminate\Database\Eloquent\Model;
  */
 class NodeCertificate extends Model {
 	protected $table = 'node_certificate';
-	protected $primaryKey = 'id';
 }

+ 0 - 1
app/Models/NodeRule.php

@@ -27,5 +27,4 @@ use Illuminate\Database\Eloquent\Model;
  */
 class NodeRule extends Model {
 	protected $table = 'node_rule';
-	protected $primaryKey = 'id';
 }

+ 0 - 1
app/Models/NotificationLog.php

@@ -33,5 +33,4 @@ use Illuminate\Database\Eloquent\Model;
  */
 class NotificationLog extends Model {
 	protected $table = 'notification_log';
-	protected $primaryKey = 'id';
 }

+ 74 - 13
app/Models/Order.php

@@ -5,6 +5,7 @@ namespace App\Models;
 use Auth;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 
 /**
  * 订单
@@ -18,13 +19,16 @@ use Illuminate\Database\Eloquent\Model;
  * @property int                             $amount        订单总价,单位分
  * @property string|null                     $expire_at     过期时间
  * @property int                             $is_expire     是否已过期:0-未过期、1-已过期
+ * @property int|null                        $pay_type      支付渠道:0-余额、1-支付宝、2-QQ、3-微信、4-虚拟货币、5-paypal
  * @property string                          $pay_way       支付方式:balance、f2fpay、codepay、payjs、bitpayx等
  * @property int                             $status        订单状态:-1-已关闭、0-待支付、1-已支付待确认、2-已完成
  * @property \Illuminate\Support\Carbon|null $created_at    创建时间
  * @property \Illuminate\Support\Carbon|null $updated_at    最后一次更新时间
  * @property-read \App\Models\Coupon|null    $coupon
- * @property-read mixed                      $pay_way_label
- * @property-read mixed                      $status_label
+ * @property-read string                     $pay_type_icon
+ * @property-read string                     $pay_type_label
+ * @property-read string                     $pay_way_label
+ * @property-read string                     $status_label
  * @property-read \App\Models\Goods|null     $goods
  * @property-read \App\Models\Payment|null   $payment
  * @property-read \App\Models\User|null      $user
@@ -41,6 +45,7 @@ use Illuminate\Database\Eloquent\Model;
  * @method static Builder|Order whereOid($value)
  * @method static Builder|Order whereOrderSn($value)
  * @method static Builder|Order whereOriginAmount($value)
+ * @method static Builder|Order wherePayType($value)
  * @method static Builder|Order wherePayWay($value)
  * @method static Builder|Order whereStatus($value)
  * @method static Builder|Order whereUpdatedAt($value)
@@ -52,28 +57,28 @@ class Order extends Model {
 	protected $primaryKey = 'oid';
 	protected $appends = ['status_label'];
 
-	function scopeUid($query) {
+	public function scopeUid($query) {
 		return $query->whereUserId(Auth::id());
 	}
 
-	function user() {
+	public function user(): HasOne {
 		return $this->hasOne(User::class, 'id', 'user_id');
 	}
 
-	function goods() {
+	public function goods(): HasOne {
 		return $this->hasOne(Goods::class, 'id', 'goods_id')->withTrashed();
 	}
 
-	function coupon() {
+	public function coupon(): HasOne {
 		return $this->hasOne(Coupon::class, 'id', 'coupon_id')->withTrashed();
 	}
 
-	function payment() {
+	public function payment(): HasOne {
 		return $this->hasOne(Payment::class, 'oid', 'oid');
 	}
 
 	// 订单状态
-	function getStatusLabelAttribute() {
+	public function getStatusLabelAttribute() {
 		switch($this->attributes['status']){
 			case -1:
 				$status_label = trans('home.invoice_status_closed');
@@ -95,24 +100,80 @@ class Order extends Model {
 	}
 
 
-	function getOriginAmountAttribute($value) {
+	public function getOriginAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setOriginAmountAttribute($value) {
+	public function setOriginAmountAttribute($value) {
 		return $this->attributes['origin_amount'] = $value * 100;
 	}
 
-	function getAmountAttribute($value) {
+	public function getAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setAmountAttribute($value) {
+	public function setAmountAttribute($value) {
 		return $this->attributes['amount'] = $value * 100;
 	}
 
+	// 支付渠道
+	public function getPayTypeLabelAttribute(): string {
+		switch($this->attributes['pay_type']){
+			case 0:
+				$pay_type_label = '余额';
+				break;
+			case 1:
+				$pay_type_label = '支付宝';
+				break;
+			case 2:
+				$pay_type_label = 'QQ';
+				break;
+			case 3:
+				$pay_type_label = '微信';
+				break;
+			case 4:
+				$pay_type_label = '虚拟货币';
+				break;
+			case 5:
+				$pay_type_label = 'PayPal';
+				break;
+			default:
+				$pay_type_label = '';
+		}
+		return $pay_type_label;
+	}
+
+	// 支付图标
+	public function getPayTypeIconAttribute(): string {
+		$base_path = '/assets/images/payment/';
+
+		switch($this->attributes['pay_type']){
+			case 0:
+				$pay_type_icon = $base_path.'coin.png';
+				break;
+			case 1:
+				$pay_type_icon = $base_path.'alipay.png';
+				break;
+			case 2:
+				$pay_type_icon = $base_path.'qq.png';
+				break;
+			case 3:
+				$pay_type_icon = $base_path.'wechat.png';
+				break;
+			case 4:
+				$pay_type_icon = $base_path.'coin.png';
+				break;
+			case 5:
+				$pay_type_icon = $base_path.'paypal.png';
+				break;
+			default:
+				$pay_type_icon = '';
+		}
+		return $pay_type_icon;
+	}
+
 	// 支付方式
-	function getPayWayLabelAttribute() {
+	public function getPayWayLabelAttribute(): string {
 		switch($this->attributes['pay_way']){
 			case 'credit':
 				$pay_way_label = '余额';

+ 7 - 7
app/Models/Payment.php

@@ -5,6 +5,7 @@ namespace App\Models;
 use Auth;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 /**
  * 支付单
@@ -40,31 +41,30 @@ use Illuminate\Database\Eloquent\Model;
  */
 class Payment extends Model {
 	protected $table = 'payment';
-	protected $primaryKey = 'id';
 	protected $appends = ['status_label'];
 
-	function scopeUid($query) {
+	public function scopeUid($query) {
 		return $query->whereUserId(Auth::id());
 	}
 
-	function user() {
+	public function user(): BelongsTo {
 		return $this->belongsTo(User::class, 'user_id', 'id');
 	}
 
-	function order() {
+	public function order(): BelongsTo {
 		return $this->belongsTo(Order::class, 'oid', 'oid');
 	}
 
-	function getAmountAttribute($value) {
+	public function getAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setAmountAttribute($value) {
+	public function setAmountAttribute($value) {
 		return $this->attributes['amount'] = $value * 100;
 	}
 
 	// 订单状态
-	function getStatusLabelAttribute() {
+	public function getStatusLabelAttribute(): string {
 		switch($this->attributes['status']){
 			case -1:
 				$status_label = '支付失败';

+ 1 - 2
app/Models/PaymentCallback.php

@@ -30,10 +30,9 @@ use Illuminate\Database\Eloquent\Model;
  */
 class PaymentCallback extends Model {
 	protected $table = 'payment_callback';
-	protected $primaryKey = 'id';
 	protected $appends = ['status_label'];
 
-	function getStatusLabelAttribute() {
+	public function getStatusLabelAttribute(): string {
 		$status_label = '';
 		switch($this->attributes['status']){
 			case 'WAIT_BUYER_PAY':

+ 0 - 1
app/Models/ProductsPool.php

@@ -29,5 +29,4 @@ use Illuminate\Database\Eloquent\Model;
  */
 class ProductsPool extends Model {
 	protected $table = 'products_pool';
-	protected $primaryKey = 'id';
 }

+ 9 - 9
app/Models/ReferralApply.php

@@ -5,6 +5,7 @@ namespace App\Models;
 use Auth;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 
 /**
  * 返利申请
@@ -36,37 +37,36 @@ use Illuminate\Database\Eloquent\Model;
  */
 class ReferralApply extends Model {
 	protected $table = 'referral_apply';
-	protected $primaryKey = 'id';
 
-	function scopeUid($query) {
+	public function scopeUid($query) {
 		return $query->whereUserId(Auth::id());
 	}
 
-	function User() {
+	public function User(): HasOne {
 		return $this->hasOne(User::class, 'id', 'user_id');
 	}
 
-	function getBeforeAttribute($value) {
+	public function getBeforeAttribute($value) {
 		return $value / 100;
 	}
 
-	function setBeforeAttribute($value) {
+	public function setBeforeAttribute($value): void {
 		$this->attributes['before'] = $value * 100;
 	}
 
-	function getAfterAttribute($value) {
+	public function getAfterAttribute($value) {
 		return $value / 100;
 	}
 
-	function setAfterAttribute($value) {
+	public function setAfterAttribute($value): void {
 		$this->attributes['after'] = $value * 100;
 	}
 
-	function getAmountAttribute($value) {
+	public function getAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setAmountAttribute($value) {
+	public function setAmountAttribute($value): void {
 		$this->attributes['amount'] = $value * 100;
 	}
 }

+ 9 - 9
app/Models/ReferralLog.php

@@ -5,6 +5,7 @@ namespace App\Models;
 use Auth;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 
 /**
  * 返利日志
@@ -38,37 +39,36 @@ use Illuminate\Database\Eloquent\Model;
  */
 class ReferralLog extends Model {
 	protected $table = 'referral_log';
-	protected $primaryKey = 'id';
 
-	function scopeUid($query) {
+	public function scopeUid($query) {
 		return $query->whereRefUserId(Auth::id());
 	}
 
-	function user() {
+	public function user(): HasOne {
 		return $this->hasOne(User::class, 'id', 'user_id');
 	}
 
-	function ref_user() {
+	public function ref_user(): HasOne {
 		return $this->hasOne(User::class, 'id', 'ref_user_id');
 	}
 
-	function order() {
+	public function order(): HasOne {
 		return $this->hasOne(Order::class, 'oid', 'order_id');
 	}
 
-	function getAmountAttribute($value) {
+	public function getAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setAmountAttribute($value) {
+	public function setAmountAttribute($value): void {
 		$this->attributes['amount'] = $value * 100;
 	}
 
-	function getRefAmountAttribute($value) {
+	public function getRefAmountAttribute($value) {
 		return $value / 100;
 	}
 
-	function setRefAmountAttribute($value) {
+	public function setRefAmountAttribute($value): void {
 		$this->attributes['ref_amount'] = $value * 100;
 	}
 }

Some files were not shown because too many files changed in this diff