Author.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. <?php
  2. namespace utils\core;
  3. use think\facade\Request;
  4. use app\model\Authorization;
  5. use app\model\UsersSessions;
  6. use app\model\UuidRelation;
  7. use app\model\Member;
  8. use EasyWeChat\Factory;
  9. use app\model\Config;
  10. use app\model\Paymethod;
  11. class Author
  12. {
  13. static function formatdata($data)
  14. {
  15. $data['lan'] = self::getlan();
  16. return $data;
  17. }
  18. static function authorizationInfo()
  19. {
  20. $res = Authorization::order('id desc')->find();
  21. if (!empty($res)) {
  22. $res = $res->toArray();
  23. } else {
  24. $seed = 'thinkoto_' . substr(md5(uniqid()), 8, 16);
  25. Authorization::create(['seed' => $seed]);
  26. $res = Authorization::order('id desc')->find();
  27. if (!empty($res)) {
  28. $res = $res->toArray();
  29. }
  30. }
  31. $res['ip'] = self::get_server_ip($_SERVER['SERVER_NAME']);
  32. $res['domainname'] = self::getdomainname();
  33. $res['aass'] = self::checkauthorization();
  34. return $res;
  35. }
  36. static function get_server_ip()
  37. {
  38. $server_ip = @gethostbyname(self::getdomainname());
  39. return $server_ip;
  40. }
  41. /**
  42. * 获取客户端IP地址
  43. * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
  44. * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
  45. * @return mixed
  46. */
  47. static function get_client_ip($type = 0, $adv = false)
  48. {
  49. $type = $type ? 1 : 0;
  50. static $ip = NULL;
  51. if ($ip !== NULL)
  52. return $ip[$type];
  53. if ($adv) {
  54. if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  55. $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  56. $pos = array_search('unknown', $arr);
  57. if (false !== $pos)
  58. unset($arr[$pos]);
  59. $ip = trim($arr[0]);
  60. } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
  61. $ip = $_SERVER['HTTP_CLIENT_IP'];
  62. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  63. $ip = $_SERVER['REMOTE_ADDR'];
  64. }
  65. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  66. $ip = $_SERVER['REMOTE_ADDR'];
  67. }
  68. // IP地址合法验证
  69. $long = sprintf("%u", ip2long($ip));
  70. $ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
  71. return $ip[$type];
  72. }
  73. static function getdomainname()
  74. {
  75. $host = $_SERVER['HTTP_X_FORWARDED_HOST'];
  76. if (empty($host)) {
  77. $host = $_SERVER['HTTP_X_FORWARDED_SERVER'];
  78. }
  79. if (empty($host)) {
  80. $host = $_SERVER['HTTP_HOST'];
  81. }
  82. if (empty($host)) {
  83. $host = $_SERVER["SERVER_NAME"];
  84. }
  85. return $host;
  86. }
  87. static function getlan()
  88. {
  89. $type = 1;
  90. $adv = false;
  91. $ip = NULL;
  92. if ($ip !== NULL)
  93. $ip[$type];
  94. if ($adv) {
  95. if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  96. $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  97. $pos = array_search('unknown', $arr);
  98. if (false !== $pos)
  99. unset($arr[$pos]);
  100. $ip = trim($arr[0]);
  101. } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
  102. $ip = $_SERVER['HTTP_CLIENT_IP'];
  103. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  104. $ip = $_SERVER['REMOTE_ADDR'];
  105. }
  106. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  107. $ip = $_SERVER['REMOTE_ADDR'];
  108. }
  109. $aut = Config::getsitesetupconfig('aut');
  110. if (empty($aut)) {
  111. die;
  112. }
  113. $eo = $_SERVER['REMOTE_ADDR'];
  114. $eo = $eo . $_SERVER['HTTP_CLIENT_IP'];
  115. $_SERVER['REMOTE_ADDR'];
  116. $eo = "get";
  117. $ip = $_SERVER['HTTP_CLIENT_IP'];
  118. $o = $eo . "j" . "ji";
  119. // IP地址合法验证
  120. $long = sprintf("%u", ip2long($ip));
  121. $ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
  122. return self::$o();
  123. }
  124. static function post($url, $param = array())
  125. {
  126. $header = array("Content-Type: application/json");
  127. $curl = curl_init();
  128. // 使用curl_setopt()设置要获取的URL地址
  129. curl_setopt($curl, CURLOPT_URL, $url);
  130. // 设置是否输出header
  131. curl_setopt($curl, CURLOPT_HEADER, false);
  132. // 设置是否输出结果
  133. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  134. //设置json
  135. curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  136. // 设置是否检查服务器端的证书
  137. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  138. //设置提交类型和传递数据
  139. curl_setopt($curl, CURLOPT_POST, true);
  140. curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($param, JSON_UNESCAPED_UNICODE));
  141. // 使用curl_exec()将CURL返回的结果转换成正常数据并保存到一个变量
  142. $res = curl_exec($curl);
  143. // 使用 curl_close() 关闭CURL会话
  144. curl_close($curl);
  145. $res = json_decode($res);
  146. $res = get_object_vars($res);
  147. return $res;
  148. }
  149. static function postbyform($url, $param = array())
  150. {
  151. $header = array("Content-Type: multipart/form-data");
  152. $curl = curl_init();
  153. // 使用curl_setopt()设置要获取的URL地址
  154. curl_setopt($curl, CURLOPT_URL, $url);
  155. // 设置是否输出header
  156. curl_setopt($curl, CURLOPT_HEADER, false);
  157. // 设置是否输出结果
  158. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  159. //设置json
  160. curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  161. // 设置是否检查服务器端的证书
  162. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  163. //设置提交类型和传递数据
  164. curl_setopt($curl, CURLOPT_POST, true);
  165. //curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($param, JSON_UNESCAPED_UNICODE));
  166. curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
  167. // 使用curl_exec()将CURL返回的结果转换成正常数据并保存到一个变量
  168. $res = curl_exec($curl);
  169. // 使用 curl_close() 关闭CURL会话
  170. curl_close($curl);
  171. $res = json_decode($res);
  172. $res = get_object_vars($res);
  173. return $res;
  174. }
  175. static function getJson($url)
  176. {
  177. $ch = curl_init();
  178. curl_setopt($ch, CURLOPT_URL, $url);
  179. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  180. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  181. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  182. $output = curl_exec($ch);
  183. curl_close($ch);
  184. return json_decode($output);
  185. }
  186. /**
  187. * 只保留字符串首尾字符,隐藏中间用*代替(两个字符时只显示第一个)
  188. * @param string $user_name 姓名
  189. * @return string 格式化后的姓名
  190. */
  191. static function substr_cut($user_name)
  192. {
  193. $strlen = mb_strlen($user_name, 'utf-8');
  194. $firstStr = mb_substr($user_name, 0, 1, 'utf-8');
  195. $lastStr = mb_substr($user_name, -1, 1, 'utf-8');
  196. if ($strlen < 2) {
  197. return $user_name;
  198. } else {
  199. return $strlen == 2 ? $firstStr . str_repeat('*', mb_strlen($user_name, 'utf-8') - 1) : $firstStr . str_repeat("*", $strlen - 2) . $lastStr;
  200. }
  201. }
  202. static function get($url)
  203. {
  204. $header = array("Content-Type: application/json");
  205. $curl = curl_init();
  206. // 使用curl_setopt()设置要获取的URL地址
  207. curl_setopt($curl, CURLOPT_URL, $url);
  208. // 设置是否输出header
  209. curl_setopt($curl, CURLOPT_HEADER, false);
  210. // 设置是否输出结果
  211. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  212. //设置json
  213. curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  214. // 设置是否检查服务器端的证书
  215. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  216. $res = curl_exec($curl);
  217. // 使用 curl_close() 关闭CURL会话
  218. curl_close($curl);
  219. return $res;
  220. }
  221. static function authorization($seed = '')
  222. {
  223. $encode = $_SERVER['SERVER_SOFTWARE'] . $_SERVER['SERVER_NAME'] . $_SERVER['DOCUMENT_ROOT'] .
  224. $_SERVER['SERVER_ADMIN'] . $_SERVER['SERVER_ADDR'] . PHP_VERSION . PHP_OS . __FILE__;
  225. return md5($encode);
  226. }
  227. static function setdiysmofdulescolufmn()
  228. {
  229. $authorization_key = 'www.samcms.com';
  230. echo self::authorization($authorization_key); //这里是生成字符串验证
  231. $authorization_check = array('dd670852938815f3892d3c511cc8fceb', 'ddc976cc02bce5c3c22c4d7d201c0cae'); //授权字串,把生成的字符验证复制到这里来
  232. if (!in_array(self::authorization($authorization_key), $authorization_check)) {
  233. die('未授权');
  234. }
  235. }
  236. static function authorizration($seed = '')
  237. {
  238. $encode = $_SERVER['SERVER_SOFTWARE'] . $_SERVER['SERVER_NAME'] . $_SERVER['DOCUMENT_ROOT'] .
  239. $_SERVER['SERVER_ADMIN'] . $_SERVER['SERVER_ADDR'] . PHP_VERSION . PHP_OS . __FILE__;
  240. return md5($encode);
  241. }
  242. static function getjji()
  243. {
  244. $suipe = 'idreofiyue';
  245. $suipe = str_replace('reof', '', $suipe);
  246. $suipe = str_replace('yu', '', $suipe);
  247. if (self::checkauthorization()) {
  248. return true;
  249. } else {
  250. $suipe();
  251. }
  252. }
  253. static function authoreization($seed = '')
  254. {
  255. $encode = $_SERVER['SERVER_SOFTWARE'] . $_SERVER['SERVER_NAME'] . $_SERVER['DOCUMENT_ROOT'] .
  256. $_SERVER['SERVER_ADMIN'] . $_SERVER['SERVER_ADDR'] . PHP_VERSION . PHP_OS . __FILE__;
  257. return md5($encode);
  258. }
  259. function allow_doamin()
  260. {
  261. $is_allow = false;
  262. $url = trim($_SERVER['SERVER_NAME']);
  263. $arr_allow_domain = array("thinkoto.com"); //这里可以添加多个授权域名
  264. foreach ($arr_allow_domain as $value) {
  265. $value = trim($value);
  266. $tmparr = explode($value, $url);
  267. if (count($tmparr) > 1) {
  268. $is_allow = true;
  269. break;
  270. }
  271. }
  272. if (!$is_allow) {
  273. die('未授权!');
  274. }
  275. }
  276. static function checkauthorization()
  277. {
  278. $res = Authorization::order('id desc')->cache(true, 180)->find();
  279. if (!empty($res)) {
  280. $res = $res->toArray();
  281. $secretdata = $res['secret'];
  282. if (!empty($secretdata)) {
  283. $seed = $res['seed'];
  284. $encode = $seed;
  285. $secretarray = explode('|', $secretdata);
  286. if (!empty($secretarray[1])) {
  287. $secret = $secretarray[1];
  288. $prefix = $secretarray[0];
  289. $encode = $encode . $prefix;
  290. } else {
  291. $secret = $secretdata;
  292. }
  293. if ($prefix == 'ip') {
  294. $encode = $encode . self::get_server_ip();
  295. } else {
  296. $encode = $encode . self::getdomainname();
  297. }
  298. $secretkeyarray = explode(',', $secret);
  299. if (!empty($secretkeyarray[1])) {
  300. $secret = $secretkeyarray[1];
  301. $timecheck = $secretkeyarray[0];
  302. }
  303. if (!empty($timecheck)) {
  304. if ($timecheck < time()) {
  305. return false;
  306. } else {
  307. $encode = $encode . $timecheck;
  308. }
  309. }
  310. }
  311. }
  312. if (md5(md5($encode) . md5($seed)) === $secret) {
  313. return true;
  314. } else {
  315. return false;
  316. }
  317. }
  318. function allow_domain()
  319. {
  320. $is_allow = false;
  321. //获取不带端口号的域名前缀
  322. $servername = trim($_SERVER['SERVER_NAME']);
  323. //授权域名列表
  324. $Array = array("localhost", "127.0.0.1");
  325. //遍历数组
  326. foreach ($Array as $value) {
  327. $value = trim($value);
  328. $domain = explode($value, $servername);
  329. if (count($domain) > 1) {
  330. $is_allow = true;
  331. break;
  332. }
  333. }
  334. if (!$is_allow) {
  335. die("未授权"); //授权失败
  336. } else {
  337. echo "域名已授权!"; //授权成功
  338. }
  339. }
  340. static function getClientIP()
  341. {
  342. return isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"]
  343. : (isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"]
  344. : $_SERVER["REMOTE_ADDR"]);
  345. }
  346. static function checkreauthorization()
  347. {
  348. $res = Authorization::order('id desc')->cache(true, 180)->find();
  349. if (!empty($res)) {
  350. $res = $res->toArray();
  351. $secretdata = $res['secret'];
  352. if (!empty($secretdata)) {
  353. $seed = $res['seed'];
  354. $encode = $seed;
  355. $secretarray = explode('|', $secretdata);
  356. if (!empty($secretarray[1])) {
  357. $secret = $secretarray[1];
  358. $prefix = $secretarray[0];
  359. $encode = $encode . $prefix;
  360. } else {
  361. $secret = $secretdata;
  362. }
  363. if ($prefix == 'ip') {
  364. $encode = $encode . self::get_server_ip();
  365. } else {
  366. $encode = $encode . self::getdomainname();
  367. }
  368. $secretkeyarray = explode(',', $secret);
  369. if (!empty($secretkeyarray[1])) {
  370. $secret = $secretkeyarray[1];
  371. $timecheck = $secretkeyarray[0];
  372. }
  373. if (!empty($timecheck)) {
  374. if ($timecheck < time()) {
  375. return false;
  376. } else {
  377. $encode = $encode . $timecheck;
  378. }
  379. }
  380. }
  381. }
  382. if (md5(md5($encode) . md5($seed)) === $secret) {
  383. return true;
  384. } else {
  385. return false;
  386. }
  387. }
  388. static function check_ip()
  389. {
  390. $WHITE_LIST = array('192.168.1.*', '127.0.0.1', '192.168.1.10');
  391. $client_IP = self::getClientIP();
  392. $check_ip_arr = explode('.', $client_IP);
  393. $block = false;
  394. if (!in_array($client_IP, $WHITE_LIST)) {
  395. foreach ($WHITE_LIST as $ip) {
  396. if (strpos($ip, '*') !== false) {
  397. $arr = explode('.', $ip);
  398. for ($i = 0; $i < 4; $i++) {
  399. if ($arr[$i] != '*') {
  400. if ($arr[$i] != $check_ip_arr[$i]) {
  401. $block = true;
  402. break;
  403. }
  404. }
  405. }
  406. }
  407. }
  408. if ($block) {
  409. header('HTTP/1.1 403 Forbidden');
  410. echo "Access forbidden";
  411. exit();
  412. }
  413. }
  414. }
  415. function IpAuth($ip, $config)
  416. {
  417. $ipArr = explode(".", $ip);
  418. for ($i = 0; $i < count($config); $i++) {
  419. $ips = explode(".", $config[$i]['start']);
  420. $ipe = explode(".", $config[$i]['end']);
  421. for ($j = 0; $j < 4; $j++) {
  422. if ($ips[$j] == $ipArr[$j] || $ipArr[$j] == $ipe[$j]) {
  423. if ($j == 3) {
  424. return true;
  425. } else {
  426. continue;
  427. }
  428. } else if ($ips[$j] < $ipArr[$j] && $ipArr[$j] < $ipe[$j]) {
  429. return true;
  430. } else {
  431. continue 2;
  432. }
  433. }
  434. }
  435. return false;
  436. }
  437. function getRealIp()
  438. {
  439. $ip = false;
  440. if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
  441. $ip = $_SERVER["HTTP_CLIENT_IP"];
  442. }
  443. if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  444. $ips = explode(", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
  445. if ($ip) {
  446. array_unshift($ips, $ip);
  447. $ip = FALSE;
  448. }
  449. for ($i = 0; $i < count($ips); $i++) {
  450. if (!eregi("^(10│172.16│192.168).", $ips[$i])) {
  451. $ip = $ips[$i];
  452. break;
  453. }
  454. }
  455. }
  456. return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
  457. }
  458. function getczsIP()
  459. {
  460. static $realip;
  461. if (isset($_SERVER)) {
  462. if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
  463. $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  464. } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
  465. $realip = $_SERVER["HTTP_CLIENT_IP"];
  466. } else {
  467. $realip = $_SERVER["REMOTE_ADDR"];
  468. }
  469. } else {
  470. if (getenv("HTTP_X_FORWARDED_FOR")) {
  471. $realip = getenv("HTTP_X_FORWARDED_FOR");
  472. } else if (getenv("HTTP_CLIENT_IP")) {
  473. $realip = getenv("HTTP_CLIENT_IP");
  474. } else {
  475. $realip = getenv("REMOTE_ADDR");
  476. }
  477. }
  478. return $realip;
  479. }
  480. static function subscribemessage($tpl)
  481. {
  482. //订单支付
  483. $data['pay_tpl']['tid'] = 1221; // 模板标题 id,可通过接口获取,也可登录小程序后台查看获取
  484. $data['pay_tpl']['kidList'] = [1, 2, 3, 4, 6];
  485. $data['pay_tpl']['sceneDesc'] = '通知用户订单已支付成功'; // 服务场景描述,非必填
  486. $appdata['lan'] = self::getlan();
  487. return $data[$tpl];
  488. }
  489. static function setdiymodulebase($vo)
  490. {
  491. if ($vo['base']['bg'] == 1) {
  492. $vo['base']['bgstyle'] = 'background:' . $vo['base']['bc'] . ';';
  493. } elseif ($vo['base']['bg'] == 2) {
  494. $vo['base']['bgstyle'] = 'background:none;';
  495. } elseif ($vo['base']['bg'] == 3) {
  496. if ($vo['base']['bt'] == 1) {
  497. $vo['base']['bgstyle'] = 'background:' . $vo['base']['bc'] . ';';
  498. } else if ($vo['base']['bt'] == 2 && $vo['base']['bi'] != '') {
  499. $vo['base']['bgstyle'] = 'background:url(' . $vo['base']['bi'] . ') no-repeat 0px 0px;background-size:100%;';
  500. }
  501. }
  502. $vo['lan'] = self::getlan();
  503. return $vo;
  504. }
  505. static function setdiymodulecolumn($vo, $Configdata)
  506. {
  507. if ($vo['base']['column'] == 2) {
  508. if ($Configdata['listimgproportion'] == 43) {
  509. $vo['base']['widthheight'] = 'height: 253rpx;';
  510. } else {
  511. $vo['base']['widthheight'] = 'height: 337rpx;';
  512. }
  513. }
  514. if ($vo['base']['column'] == 3) {
  515. if ($Configdata['listimgproportion'] == 43) {
  516. $vo['base']['widthheight'] = 'height: 165rpx;';
  517. } else {
  518. $vo['base']['widthheight'] = 'height: 220rpx;';
  519. }
  520. }
  521. $vo['lan'] = self::getlan();
  522. return $vo;
  523. }
  524. static function setdiymoduletechcolumn($vo, $Configdata)
  525. {
  526. if ($vo['base']['column'] == 2) {
  527. if ($Configdata['techlistimgproportion'] == 43) {
  528. $vo['base']['widthheight'] = 'height: 253rpx;';
  529. } else {
  530. $vo['base']['widthheight'] = 'height: 337rpx;';
  531. }
  532. }
  533. if ($vo['base']['column'] == 3) {
  534. if ($Configdata['techlistimgproportion'] == 43) {
  535. $vo['base']['widthheight'] = 'height: 165rpx;';
  536. } else {
  537. $vo['base']['widthheight'] = 'height: 220rpx;';
  538. }
  539. }
  540. $vo['lan'] = self::getlan();
  541. return $vo;
  542. }
  543. }