Fragment.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <?php
  2. namespace app\api\controller\v1;
  3. use app\common\model\NumRecordModel;
  4. use app\common\model\SystemArticleModel;
  5. use app\common\model\SystemBannerModel;
  6. use app\common\model\UserModel;
  7. use app\Request;
  8. use app\api\services\RequestUtilService;
  9. use Minho\Captcha\CaptchaBuilder;
  10. use services\CacheServices;
  11. use think\Cache;
  12. use think\cache\driver\Redis;
  13. use think\captcha\facade\Captcha;
  14. use think\db\concern\ModelRelationQuery;
  15. use think\Exception;
  16. use think\facade\Db;
  17. use think\facade\Filesystem;
  18. class Fragment
  19. {
  20. public function balanceInArr(Request $request){
  21. $data = explode('|', env('APP.BALANCE_IN_SETTING'));
  22. return api_succ_return(['msg'=>'成功', 'data'=>$data]);
  23. }
  24. // app配置
  25. public function appConfig(Request $request){
  26. $data = [];
  27. // $data['box_count'] = 1000;
  28. $modelarticle = new SystemArticleModel();
  29. // $info = $modelarticle->where('type', 2)->find();
  30. // $data['score_buy'] = $info['banner_desc'];
  31. $data['privateInfo'] = getWebUrl().'/api/privateInfo';
  32. $data['userAgreementInfo'] = getWebUrl().'/api/userAgreementInfo';
  33. // 客服
  34. // $data['kefu'] = ['qq'=>env('app.KEFU_QQ'), 'wechat'=>env('app.KEFU_WECHAT')];
  35. // 帮助中心
  36. $data['helpCenter'] = getWebUrl().'/api/helpCenter';
  37. $data['aboutUs'] = getWebUrl().'/api/aboutUs';
  38. $data['chat_url'] = env('APP.CHAT_URL_CONFIG');
  39. // 一个星钻可以兑换多少优先勋章
  40. // $data['xingzuanScale'] = '1';
  41. $data['widthdraw'] = [
  42. 'scale'=>env('WITHDRAW.APP_WITHDRAW_SCALE'),
  43. 'begin'=>env('WITHDRAW.APP_WITHDRAW_BEGIN'),
  44. 'desc'=>[
  45. '本次提现将收取通证'.env('WITHDRAW.APP_WITHDRAW_SCALE').'%+'.env('WITHDRAW.APP_WITHDRAW_BEGIN').'元手续费',
  46. '提现到账时间T+1',
  47. '提现申请金额必须是10的整数倍',
  48. '提现金额单笔不能超过30000,提现大于5千只能使用银行卡',
  49. // '提现到USDT暂未开放,敬请期待',
  50. '个人原因导致的提现失败不退还通证',
  51. ]
  52. ];
  53. // $info =Db::name('jh_sellplan')->where('status', 1)->find();
  54. $data['jh_buy'] = [
  55. 'scale'=> Db::name('system_config')->where('group', 'jhmoney')->where('name', 'jh_money')->value('value'),
  56. // sysconfig('jhmoney', 'jh_money'),
  57. 'begin'=>env('WITHDRAW.APP_WITHDRAW_BEGIN'),
  58. 'desc'=>[
  59. '通证平台定时定量发放',
  60. '用户通过余额来兑换通证,通证费用单价由平台设定',
  61. '通证可用于提现燃料使用,按照提现金额的百分之10扣除',
  62. '用户通过余额来兑换通证'
  63. ]
  64. ];
  65. $data['jh_excharge'] = [
  66. 'desc'=>[
  67. '转赠不收取任何手续费',
  68. '请确定对方信息后在输入安全密码,由于用户自己原因导致错误转赠,平台概不负责'
  69. ]
  70. ];
  71. $data['balance_excharge'] = [
  72. 'desc'=>[
  73. '本次收取5%对应通证手续费',
  74. '余额只能上下转赠',
  75. '请确定对方信息后在输入安全密码,由于用户自己原因导致错误转赠,平台概不负责'
  76. ]
  77. ];
  78. $data['level_desc'] = [
  79. '业绩:团队业绩总和(包含自己业绩),购买商品所送积分,算作业绩;',
  80. // '小区:除开最大一条线,其它所有线的总和;',
  81. '释放占比:下级购买按照级差释放相应释放的百分比。'
  82. ];
  83. $data['usdt_price'] = Db::name('system_config')->where('name', 'usdt_price')->where('group', 'usdt_price')->value('value');
  84. $data['usdt_guide'] = Db::name('system_article')->where('type', 10)->value('banner_desc');
  85. $data['usdt_address'] = env('USDT.SELL_ADDRESS');
  86. $data['about_us'] = env('APP.ABOUT_US');
  87. $data['newhand_url'] = getWebUrl().'/api/newhandurl';
  88. $data['newguide_url'] = getWebUrl().'/api/newguideurl';
  89. $data['aboutbox_url'] = getWebUrl().'/api/aboutboxurl';
  90. $data['one_box_price']=env('boxsetting.ONE_BOX_PRICE');
  91. $data['box_musicurl'] = getWebUrl().'/static/resources/'.'box_open.mp3';
  92. // $data['newhand_url'] = getWebUrl().'/api/privateInfo';
  93. // $data['medal_excharge'] = [
  94. // 'desc'=>[
  95. // '转赠之后无法找回,请务必确认对方身份。',
  96. // '优先勋章转赠不退回,请谨慎操作'
  97. // ]
  98. // ];
  99. //
  100. // $data['excharge'] = [
  101. // 'desc'=>[
  102. // '星钻大于10才能进行转赠且,转赠之后账号必须有10个星钻空余。',
  103. // '每天最多给好友转赠三次,转赠手续费将扣除转赠方星钻。',
  104. // '转赠之后无法找回,请务必确认对方身份。',
  105. // '收取到星钻必须要参加任务包复投才能再次转赠给另外好友。'
  106. // ]
  107. // ];
  108. //
  109. // $data['score_charge'] = [
  110. // 'desc'=>[
  111. // '1:1兑换',
  112. // '兑换到余额 即刻到账'
  113. // ]
  114. // ];
  115. // $data['money_charge'] = [
  116. // 'desc'=>[
  117. // '1:1兑换',
  118. // '兑换到积分 即刻到账'
  119. // ]
  120. // ];
  121. // $data['medal_charge'] = [
  122. // 'desc'=>[
  123. // '5个积分兑换一个优先勋章',
  124. //// '一个星钻v兑换一个优先勋章',
  125. // '兑换到勋章 即刻到账'
  126. // ]
  127. // ];
  128. // $data['open_name'] = 2;
  129. // $data['need_check_url'] = env('APP.NEED_CHECK_URL', 2);
  130. // $data['app_new_url'] = env('APP.APP_NEW_URL');
  131. // $data['huafei_excharge'] = [
  132. // '1、兑换成功后,因各个充值服务商原因会在72小时左右到账,介意慎拍!',
  133. //// '2、每日限充一次。',
  134. // '2、兑换话费之后,账户星钻必须有十个空余。',
  135. //// '4、本次兑换充值将支付服务费。',
  136. // '3、请仔细核对运营商跟手机号是否匹配,如用户原因导致充值失败,服务费一概不退!',
  137. // '4、目前电信号码199号段暂不支持兑换,广东、辽宁、福建、北京、重庆五个省暂不支持兑换,上海联通暂时无法兑换。',
  138. //// '7、每天兑换时间为早上8点到晚上6点,每个美康账号每个月只能兑换一次。每个手机号一个月只能兑换一次。'
  139. // '5、每天兑换时间为早上8点到晚上6点。',
  140. // '6、50元话费需5个抢购值,100元话费需10个抢购值,200元话费需20个抢购值。'
  141. //
  142. // ];
  143. // $data['dianfei_excharge'] = [
  144. // '1、每天兑换时间为早上八点到晚上六点,兑换成功后,因各个充值服务商原因会在72小时左右到账,介意慎拍!',
  145. // '2、兑换电费之后,账户星钻必须有十个空余。',
  146. // '3、仅限充值国家电网户号的电费,家用电、工业电,商业电充值。',
  147. // '4、户号一般为10位数字,江苏地区为320开头的13位数字,浙江地区为330开头的13位数字,安徽区地区为340开头的13位数字。请确保户号正确以及输入地址是否与户号一致,如用户原因导致充值失败,服务费一概不退!',
  148. // '5、50元电费需5个抢购值,100元电费需10个抢购值,200元电费需20个抢购值',
  149. // '6、如出现特殊问题请联系客服。'
  150. //
  151. // ];
  152. $data['adsetting'] = [
  153. 'android'=>[
  154. 'appkey'=>env('LINGYE.ANDROID_APPKEY'),
  155. 'jiliid'=>env('LINGYE.ANDROID_JILIID'),
  156. 'kaipinid'=>env('LINGYE.ANDROID_KAIPINGID'),
  157. 'chapinid'=>env('LINGYE.ANDROID_CHAPINID'),
  158. ],
  159. 'ios'=>[
  160. 'appkey'=>env('LINGYE.IOS_APPKEY'),
  161. 'jiliid'=>env('LINGYE.IOS_JILIID'),
  162. 'kaipinid'=>env('LINGYE.IOS_KAIPINGID'),
  163. 'chapinid'=>env('LINGYE.IOS_CHAPINID')
  164. ]
  165. ];
  166. $data['jh_conf'] = [
  167. 'jh_min_money'=>sysconfig('jhconfig', 'jh_min_money'),
  168. 'jh_max_money'=>sysconfig('jhconfig', 'jh_max_money')
  169. ];
  170. $time = time();
  171. $data['agent'] = [
  172. 'privince_agent'=>[
  173. 'http://downyjh.meikangjw.com/mlh/agent/p_agent1.png?time='.$time,
  174. 'http://downyjh.meikangjw.com/mlh/agent/p_agent2.png?time='.$time,
  175. 'http://downyjh.meikangjw.com/mlh/agent/p_agent3.png?time='.$time
  176. ],
  177. 'city_agent'=>[
  178. 'http://downyjh.meikangjw.com/mlh/agent/c_agent1.png?time='.$time,
  179. 'http://downyjh.meikangjw.com/mlh/agent/c_agent2.png?time='.$time,
  180. 'http://downyjh.meikangjw.com/mlh/agent/c_agent3.png?time='.$time
  181. ],
  182. 'p_agent_price'=>'175000|25000',
  183. 'c_agent_price'=>'56000|8000',
  184. ];
  185. $data['tz']=[
  186. 'total'=>'300万',
  187. 'destroy_num'=>Db::name('tz_log')->where('type','in', [3,4])->sum('score'),
  188. 'desc'=>'通证就是赋能商城未来发展的燃料,采用区块链技术赋能于实体企业发展,集团通证总发行量1300万枚,只能拿出300万枚赋能于美乐惠电商发展,打造一个完整的商业闭环,同时也是未来链接行业上下游企业的核心通证!'
  189. ];
  190. // $data['yg_descimg'] = getWebUrl().'/static/img/desc/yg_desc.png';
  191. // $data['yg_oncejp_add'] = env('app.YG_ONCE_ADD', 0.1);
  192. // $data['scoreExchange'] = env('api.EXCHANGETOMONEY_BEGIN');
  193. // $data['scoreExchange_scale'] = env('api.EXCHANGETOMONEY_SCALE');
  194. $data['bbox_desc']=[
  195. [
  196. 'title'=>'一袋豪物',
  197. 'count'=>1
  198. ],
  199. [
  200. 'title'=>'幸运5连',
  201. 'count'=>5
  202. ],
  203. [
  204. 'title'=>'豪气10连',
  205. 'count'=>10
  206. ],
  207. [
  208. 'title'=>'超凡二十联',
  209. 'count'=>20
  210. ]
  211. ];
  212. $data['box_desc'] = [
  213. ['title'=>'普通','pic'=>getWebUrl().'/'.'static/img/box/box_pic10.png', 's_pic'=>getWebUrl().'/'.'static/img/box/box_pic10_small.png', 'prob'=>'3.8%', 'box_type'=>10],
  214. ['title'=>'稀有','pic'=>getWebUrl().'/'.'static/img/box/box_pic20.png', 's_pic'=>getWebUrl().'/'.'static/img/box/box_pic20_small.png','prob'=>'30%', 'box_type'=>20],
  215. ['title'=>'史诗','pic'=>getWebUrl().'/'.'static/img/box/box_pic30.png', 's_pic'=>getWebUrl().'/'.'static/img/box/box_pic30_small.png','prob'=>'0.15%', 'box_type'=>30],
  216. ['title'=>'传说','pic'=>getWebUrl().'/'.'static/img/box/box_pic40.png', 's_pic'=>getWebUrl().'/'.'static/img/box/box_pic40_small.png','prob'=>'0.05%', 'box_type'=>40],
  217. ];
  218. // $data['every_day_recycle_count'] = 20;
  219. $data['services_desc'] = [
  220. '购买一次服务商有效期30天,到期后需再次手动续费。'
  221. ];
  222. return api_succ_return(['msg'=>'成功', 'data'=>$data]);
  223. }
  224. // 获取图形验证码
  225. public function getVerifyCode()
  226. {
  227. $captch = new CaptchaBuilder();
  228. $captch->initialize([
  229. 'width' => 100, // 宽度
  230. 'height' => 40, // 高度
  231. 'line' => true, // 直线
  232. 'curve' => false, // 曲线
  233. 'fontSize'=>25, // 验证码字体
  234. 'noise' => 0, // 噪点背景
  235. 'fonts' => [] // 字体
  236. ]);
  237. $captch->create();
  238. $uuid = uniqid();
  239. //生成并返回图片流base64编码
  240. ob_start ();
  241. $captch->output(1);
  242. $captchaCode = $captch->getText();
  243. $image_data = ob_get_contents ();
  244. ob_end_clean ();
  245. $captchaDataUrl = AESjiami(base64_encode ($image_data));
  246. $array = ['captchaDataUrl' => $captchaDataUrl,
  247. 'captcha_uuid' => $uuid];
  248. CacheServices::set('catch'.$uuid, $captchaCode, 900);
  249. return api_succ_return(['msg'=>'成功', 'data'=>$array]);
  250. }
  251. // 发送短信验证码
  252. public function sendSmsCode(Request $request)
  253. {
  254. $type = $request->param('type');
  255. $mobile = $request->param('mobile');
  256. // $code_uuid = $request->param('code_uuid');
  257. $app_sources = $request->param('app_sources');
  258. // $ver_code = $request->param('ver_code');
  259. // if (empty($code_uuid)){
  260. // return api_error_return('参数错误');
  261. // }
  262. // if (!$ver_code || !sr_captcha_check($ver_code, $code_uuid)) {
  263. // return api_error_return(['msg'=>'图形码错误或过期', 'code'=>709]);
  264. // }
  265. // sr_log('发送短信:'.json_encode($request->post()));
  266. if (!is_numeric($mobile) || strlen($mobile)!=11){
  267. return api_error_return('手机号码错误');
  268. }
  269. if (!$type || !in_array($type, ['register', 'editpass', 'securitypass', 'loingcheck'])){
  270. return api_error_return('类型错误');
  271. }
  272. $send_user = UserModel::where(['mobile'=>$mobile])->find();
  273. if (in_array($type, ['editpass', 'securitypass', 'loingcheck']) && !$send_user){
  274. return api_error_return('该手机号码未注册');
  275. }
  276. if ($type == 'register' && $send_user){
  277. return api_error_return('该手机号码已注册,请直接登录');
  278. }
  279. // if ($type == 'editpass' && (in_array($mobile, ['17793381135','17774155508','15530049869','18933875070','13333691688','13874407016','18833670305','15092638520','17732222351','13192786517','15966347085','15312455510','18773426559','18692059531','18216019609','13469930398','13077327370','15914077352','18818668418','13188051777']) || in_array($mobile, ['18689100091','15692611180','15608999871','13298911185','15692611136','18689111290','18689111673','18689111932','18689111591','18689111639']))){
  280. // return api_error_return('发送失败,请联系客服');
  281. // }
  282. $m = new NumRecordModel();
  283. $count = $m->whereDay('create_time', 'today')->where('ip', $request->ip())->count();
  284. // if ($count > 15){
  285. // return api_error_return('发送失败,超过同一IP 最大发送短信数量');
  286. // }
  287. if ($send_user){
  288. $user_count = $m->whereDay('create_time', 'today')->where('uid', $send_user['id'])->count();
  289. if ($user_count > 5){
  290. return api_error_return('发送失败,超过单日用户单日最大发送短信');
  291. }
  292. }
  293. Db::startTrans();
  294. try {
  295. $code = '';
  296. for ($i=0; $i < 6; $i++) {
  297. $code .= rand(1, 9);
  298. }
  299. $ser_request = new RequestUtilService();
  300. $result = $ser_request->reqeustSmsCode($mobile, $code);
  301. // $result = 0;
  302. // sr_log($result);
  303. if ($result == 0){
  304. $data = [
  305. 'type'=>$type,
  306. 'content'=>$code,
  307. 'isfrom'=>$app_sources,
  308. 'phone'=>$mobile,
  309. 'uid'=>$send_user?$send_user['id']:0,
  310. 'create_time'=>sr_getcurtime(time()),
  311. 'ip'=>$request->ip()
  312. ];
  313. $m->insert($data);
  314. }else{
  315. throw new Exception('');
  316. }
  317. Db::commit();
  318. return api_succ_return('发送成功');
  319. }catch (\Exception $e){
  320. Db::rollback();
  321. return api_error_return('发送失败'.$e->getMessage());
  322. }
  323. }
  324. // 获取banner图片
  325. public function getAppBanner(Request $request){
  326. $post = $request->post();
  327. if (!in_array($post['type'], [1,2,3,4,5,6])){
  328. return api_succ_return('成功');
  329. }
  330. // $redis = new Redis();
  331. // $has = false;
  332. // $apikey = 'getAppBanner'.$post['type'];
  333. // if ($redis->has($apikey)){
  334. // $list = $redis->get($apikey);
  335. // return api_succ_return(['msg'=>'成功', 'data'=>$list]);
  336. // }
  337. $modelbanner = new SystemBannerModel();
  338. $list = $modelbanner->where('id', 'not in', [55])->where('type', $post['type'])->withAttr('img_pic', function ($val, $data){
  339. return __HTTPIMG($val);
  340. })->select()->toArray();
  341. if ($post['type'] == 4){
  342. $list = [
  343. ['id'=>1234,'create_time'=>sr_getcurtime(time()),'type'=>4, 'img_pic'=>getWebUrl().'/static/img/inviteuser/invite18.jpg'.'?time='.time(),'banner_desc'=>'', 'title'=>'邀请好友1','delete_time'=>''],
  344. ];
  345. }
  346. // $redis->set($apikey, $list);
  347. return api_succ_return(['msg'=>'成功', 'data'=>$list]);
  348. }
  349. // 文章列表
  350. public function articleList(Request $request){
  351. $post = $request->post();
  352. $modelarticle = new SystemArticleModel();
  353. $list = $modelarticle->where('type', $post['type'])->where('id', 'not in', '6,7')->order('create_time desc')
  354. // $list = $modelarticle->where('type', $post['type'])->order('create_time desc')
  355. ->select()->toArray();
  356. return api_succ_return(['msg'=>'成功', 'data'=>$list]);
  357. }
  358. /**
  359. * 上传文件
  360. */
  361. public function uploadImg(Request $request)
  362. {
  363. $file = request() -> file('file');
  364. $type = $request->post('type');
  365. if ($file == null) {
  366. return api_error_return('未上传图片');
  367. }
  368. $temp = explode(".", $_FILES["file"]["name"]);
  369. $extension = end($temp);
  370. if(!in_array($extension, array("jpeg","jpg","png"))){
  371. return api_error_return('图片格式错误');
  372. }
  373. if (!in_array($type, ['avatar', 'message'])){
  374. return api_error_return('参数错误');
  375. }
  376. $user_info = Db::name('user')->where('id', $request->uid)->find();
  377. if ($type == 'message'){
  378. if ($user_info['user_type'] != 99){
  379. return api_error_return('没有权限');
  380. }
  381. }
  382. $saveName = Filesystem::disk('avatar') -> putFile($type, $file, 'md5');
  383. return api_succ_return(['msg'=>'成功', 'data'=>['url'=>__HTTPIMG(str_replace('\\', '', 'uploadimg/' . $saveName)),
  384. 'base_url'=>str_replace('\\', '', 'uploadimg/' . $saveName)
  385. ]]);
  386. }
  387. // 版本更新
  388. public function appVersionCheck(Request $request)
  389. {
  390. $curandroid = env('app.CUR_ANDROID_VERSION', '');
  391. $curios = env('app.CUR_IOS_VERSION', '');
  392. $curAndroidVersion = str_replace('.', '', $curandroid);
  393. $curAndroidVersion = dispRepair($curAndroidVersion, 4, '0', '0');
  394. $curIosVersion = str_replace('.', '', $curios);
  395. $curIosVersion = dispRepair($curIosVersion, 4, '0', '0');
  396. $app_sources = $request->param('app_sources');
  397. $app_version = $request->param('app_version');
  398. $app_version = str_replace('.', '', $app_version);
  399. $app_version = dispRepair($app_version, 4, '0', '0');
  400. $new_udpate = explode('|', env('app.CUR_ANDROID_VERSION_INFO'));
  401. $new_udpate_ios = explode('|', env('app.CUR_IOS_VERSION_INFO'));
  402. // $androidupdateurl = env('app.DOWN_ANDROID_URL', '');
  403. // $iosupdateurl = env('app.DOWN_IOS_URL', '');;
  404. $androidupdateurl = env('app.API_WEB_URL').'/api/downapp';
  405. $iosupdateurl = env('app.API_WEB_URL').'/api/downapp';
  406. $isandroid_force = 1;
  407. $isios_force = 1;
  408. if ($app_sources == 'ios'){
  409. if ($curIosVersion > $app_version){
  410. return api_succ_return(['msg'=>'成功', 'data'=>['has_update'=>1, 'cur_version'=>$curios, 'update_msg'=>$new_udpate_ios, 'update_url'=>$iosupdateurl, 'is_force'=>$isios_force, 'type'=>env('APP.DOWN_ANDROID_TYPE')]]);
  411. }else{
  412. return api_succ_return(['msg'=>'成功', 'data'=>['has_update'=>0, 'cur_version'=>$curios, 'update_msg'=>[], 'update_url'=>'', 'is_force'=>1, 'type'=>env('APP.DOWN_ANDROID_TYPE')]]);
  413. }
  414. }
  415. if ($app_sources == 'android'){
  416. if ($curAndroidVersion > $app_version){
  417. return api_succ_return(['msg'=>'成功', 'data'=>['has_update'=>1, 'cur_version'=>$curandroid, 'update_msg'=>$new_udpate, 'update_url'=>$androidupdateurl, 'is_force'=>$isandroid_force, 'type'=>env('APP.DOWN_ANDROID_TYPE')]]);
  418. }else{
  419. return api_succ_return(['msg'=>'成功', 'data'=>['has_update'=>0, 'cur_version'=>$curandroid, 'update_msg'=>[], 'update_url'=>'', 'is_force'=>1, 'type'=>env('APP.DOWN_ANDROID_TYPE')]]);
  420. }
  421. }
  422. return api_error_return('错误');
  423. }
  424. public function userLevelDesc(Request $request){
  425. return api_succ_return(['msg'=>"成功", 'data'=>Db::name('level_setting')->select()->toArray()]);
  426. }
  427. }