Star.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace app\controller\merchant;
  3. use app\extra\basic\Base;
  4. use app\middleware\AuthMiddleware;
  5. use app\model\saas\SaasStar;
  6. use app\service\saas\StarService;
  7. use DI\Attribute\Inject;
  8. use LinFly\Annotation\Attributes\Route\Controller;
  9. use LinFly\Annotation\Attributes\Route\GetMapping;
  10. use LinFly\Annotation\Attributes\Route\Middleware;
  11. use LinFly\Annotation\Attributes\Route\PostMapping;
  12. use support\Request;
  13. use support\Response;
  14. use yzh52521\EasyHttp\Http;
  15. #[Controller("/api/merchant/star"),Middleware(AuthMiddleware::class)]
  16. class Star extends Base
  17. {
  18. #[Inject]
  19. protected StarService $service;
  20. #[Inject]
  21. protected SaasStar $model;
  22. #[GetMapping('list')]
  23. public function getDataList(Request $request): Response
  24. {
  25. try {
  26. $param = $request->all();
  27. $param['poi_id'] = $request->user['store_id'];
  28. $data = $this->service->setModel()->getList($param);
  29. return successTrans(100010,pageFormat($data),200);
  30. } catch (\Throwable $th) {
  31. return error($th->getMessage());
  32. }
  33. }
  34. #[PostMapping('save')]
  35. public function getStarData(Request $request): Response
  36. {
  37. try {
  38. [$state,$msg] = $this->checkDeposit($request->user['store_id']);
  39. if (!$state) return error($msg);
  40. $param = $this->_valid([
  41. "name.require" => trans("empty.require"),
  42. "status.require" => trans("empty.status"),
  43. ],$request->method());
  44. if (!is_array($param)) return error($param);
  45. $param['poi_id'] = $request->user['store_id'];
  46. $star = $this->model->where(['poi_id' => $param['poi_id'],'unique_id' => $param['name']])->findOrEmpty();
  47. if (!$star->isEmpty()) return error("达人已绑定,请勿重复操作");
  48. [$state,$starData] = $this->getStarForLife($param['name']);
  49. if (!$state) return error($starData);
  50. unset($param['name']);
  51. $param['nick_name'] = removeEmoji2($starData['nick_name']);
  52. $param['show_nickname'] = emojiToUnicode($starData['nick_name']);
  53. $param['gender'] = $starData['gender'];
  54. $param['unique_id'] = $starData['unique_id'];
  55. $param['avatar_url'] = $starData['avatar_url'];
  56. $param['city_name'] = $starData['city_name'];
  57. $param['uid'] = $starData['uid'];
  58. $param['fans_count'] = $starData['fans_count'];
  59. $param['fans_tag_list'] = json_encode($starData['fans_tag_list']);
  60. $param['local_fans_count'] = $starData['local_fans_count'];
  61. $param['talent_level_display'] = $starData['talent_display_info']['talent_level_display']['statistice_value']['value']??'';
  62. $param['talent_item_level_display'] = $starData['talent_display_info']['talent_item_level_display']['statistice_value']['value']??'';
  63. $param['talent_live_level_display'] = $starData['talent_display_info']['talent_live_level_display']['statistice_value']['value']??'';
  64. $param['content_level_display'] = $starData['talent_display_info']['content_level_display']['statistice_value']['value']??'';
  65. $param['credit_score_display'] = $starData['talent_display_info']['credit_score_display']['statistice_value']['value']??'';
  66. $param['rank_display'] = $starData['talent_display_info']['rank_display']['statistice_value']['digit_value']??'';
  67. $param['aweme_url'] = $starData['aweme_url'];
  68. $status = $star->insertGetId($param);
  69. if (!$status) return errorTrans('error.data');
  70. return successTrans('success.data');
  71. } catch (\Throwable $throwable) {
  72. return error($throwable->getMessage());
  73. }
  74. }
  75. #[PostMapping('update')]
  76. public function updateStar(Request $request): Response
  77. {
  78. try {
  79. $param = $this->_valid([
  80. "id.require" => trans("empty.require"),
  81. ],$request->method());
  82. if (!is_array($param)) return error($param);
  83. $data = $this->model->where("id",$param["id"])->findOrEmpty();
  84. if ($data->isEmpty()) return errorTrans("empty.data");
  85. if ($data['poi_id'] <> $request->user['store_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
  86. [$state,$starData] = $this->getStarForLife($data['unique_id']);
  87. if (!$state) return error($starData);
  88. $state = $data->save([
  89. 'nick_name' => removeEmoji2($starData['nick_name']),
  90. 'show_nickname' => emojiToUnicode($starData['nick_name']),
  91. 'gender' => $starData['gender'],
  92. 'avatar_url' => $starData['avatar_url'],
  93. 'city_name' => $starData['city_name'],
  94. 'fans_count' => $starData['fans_count'],
  95. 'fans_tag_list' => json_encode($starData['fans_tag_list']),
  96. 'local_fans_count'=> $starData['local_fans_count'],
  97. 'talent_level_display' => $starData['talent_display_info']['talent_level_display']['statistice_value']['value']??'',
  98. 'talent_item_level_display' => $starData['talent_display_info']['talent_item_level_display']['statistice_value']['value']??'',
  99. 'talent_live_level_display' => $starData['talent_display_info']['talent_live_level_display']['statistice_value']['value']??'',
  100. 'content_level_display' => $starData['talent_display_info']['content_level_display']['statistice_value']['value']??'',
  101. 'credit_score_display' => $starData['talent_display_info']['credit_score_display']['statistice_value']['value']??'',
  102. 'rank_display' => $starData['talent_display_info']['rank_display']['statistice_value']['digit_value']??'',
  103. ]);
  104. if (!$state) return errorTrans('error.data');
  105. return successTrans('success.data');
  106. } catch (\Throwable $throwable) {
  107. return error($throwable->getMessage());
  108. }
  109. }
  110. /**
  111. * 删除达人
  112. * @param Request $request
  113. * @return Response
  114. */
  115. #[PostMapping('del')]
  116. public function delStarData(Request $request): Response
  117. {
  118. try {
  119. $param = $this->_valid([
  120. "id.require" => trans("empty.require"),
  121. ],$request->method());
  122. if (!is_array($param)) return error($param);
  123. $data = $this->model->where("id",$param["id"])->findOrEmpty();
  124. if ($data->isEmpty()) return errorTrans("empty.data");
  125. if ($data['poi_id'] <> $request->user['store_id']) return errorTrans("empty.data");
  126. $state = $data->delete();
  127. if (!$state) return errorTrans("error.data");
  128. return successTrans("success.data");
  129. } catch (\Throwable $throwable) {
  130. return error($throwable->getMessage());
  131. }
  132. }
  133. /**
  134. * @param string $name
  135. * @return array
  136. */
  137. protected function getStarForLife(string $name = ""): array
  138. {
  139. $url = "https://life.douyin.com/life/alliance/v1/merchant/talent_square/talent/search/?root_life_account_id=7595228109947947043&life_biz_view_id=22&life_account_biz_ids=";
  140. $param = [
  141. "request_source" => 2,
  142. "keyword" => $name,
  143. "page" => 1,
  144. "page_size" => 10
  145. ];
  146. $resp = Http::asJson()->withHeaders([
  147. "cookie" => "bd_ticket_guard_client_web_domain=2; is_hit_partitioned_cookie_canary=true; is_hit_partitioned_cookie_canary=true; is_hit_partitioned_cookie_canary_ss=true; is_hit_partitioned_cookie_canary_ss=true; _bd_ticket_crypt_doamin=3; __security_server_data_status=1; enter_pc_once=1; UIFID_TEMP=b684c79658e5909c916769b2e80c406ed39ea89d6c7cce823581f3f595501a34b6f38ae9d5030e9c80f6880dff7d23e608da1a643b4e6bb9cf320e2225fbc1baba954ee630c02b15d19bc8c0552c3308; hevc_supported=true; passport_csrf_token=8deb9a1030111054c1218be7d243e969; passport_csrf_token_default=8deb9a1030111054c1218be7d243e969; passport_mfa_token=CjZdIhOHJ1cjcgY1S2YU2mA8UZI5jTLxaKBYcmzpbZWDdj1oUI%2F6dXwF8aMj%2BvIXOfZo%2BP7vV14aSgo8AAAAAAAAAAAAAFCZUk2Ur1hgPrJT4bj1xYK86bSSYAcwyfyCgpejENNtTP7ktR4F5GC4XRhMTDWErjSmEJe9lQ4Y9rHRbCACIgEDnvujXQ%3D%3D; d_ticket=7f7218fdc4804a7ccb736957c7aaf6178e6e0; n_mh=iKJwgWOXsyG1BeO2jEaQPInak02p3QQm9lN7bQKyNz0; sid_guard=fb4ac290f605bd78a3fd085dffa99ea8%7C1782727915%7C5184000%7CFri%2C+28-Aug-2026+10%3A11%3A55+GMT; uid_tt=a5160b8f399631737073f6c63189f322; uid_tt_ss=a5160b8f399631737073f6c63189f322; sid_tt=fb4ac290f605bd78a3fd085dffa99ea8; sessionid=fb4ac290f605bd78a3fd085dffa99ea8; sessionid_ss=fb4ac290f605bd78a3fd085dffa99ea8; session_tlb_tag=sttt%7C4%7C-0rCkPYFvXij_Qhd_6meqP________-sCN9zmyDh97VSU-NY0xkdIdUchHBUTyAnOFNLjVZ1uh8%3D; is_staff_user=false; has_biz_token=false; sid_ucp_v1=1.0.0-KDdlZTg2NDU4NTEwMTRiOTI3MmYwZTBlYWI4ZTBmNDJlZjQ1ODI4NjYKIQjOqbCYuvQTEOuJidIGGOWfEyAMMNLh6PkFOAdA9AdIBBoCaGwiIGZiNGFjMjkwZjYwNWJkNzhhM2ZkMDg1ZGZmYTk5ZWE4; ssid_ucp_v1=1.0.0-KDdlZTg2NDU4NTEwMTRiOTI3MmYwZTBlYWI4ZTBmNDJlZjQ1ODI4NjYKIQjOqbCYuvQTEOuJidIGGOWfEyAMMNLh6PkFOAdA9AdIBBoCaGwiIGZiNGFjMjkwZjYwNWJkNzhhM2ZkMDg1ZGZmYTk5ZWE4; _bd_ticket_crypt_cookie=9fc0395704d711fedb0e26e44f572cad; __security_mc_1_s_sdk_sign_data_key_web_protect=68288f84-4b1a-982d; __security_mc_1_s_sdk_cert_key=0562451b-4676-898a; __security_mc_1_s_sdk_crypt_sdk=9e04e10d-49e9-a0e2; gd_random=eyJwZXJjZW50IjowLjQyMjQ1MzMxNTE3MDEyOTN9.UJpF0SSHqProIcL3TXKKMun6rT95wmcriaZCYg7eFVg%3D; csrf_session_id=745ee261de3514d788bbfaaa1be85417; passport_auth_status_ls=3e3cd2e9785e33d910376eb74ea383bd%2C; passport_auth_status_ss_ls=3e3cd2e9785e33d910376eb74ea383bd%2C; sid_guard_ls=f27d2fa89813b6f9507ffb6650fff90d%7C1784789351%7C5184002%7CMon%2C+21-Sep-2026+06%3A49%3A13+GMT; sid_guard_ls=f27d2fa89813b6f9507ffb6650fff90d%7C1784789351%7C5184002%7CMon%2C+21-Sep-2026+06%3A49%3A13+GMT; uid_tt_ls=4f464a4b9572fa61e38c9faaefeb9419; uid_tt_ls=4f464a4b9572fa61e38c9faaefeb9419; uid_tt_ss_ls=4f464a4b9572fa61e38c9faaefeb9419; uid_tt_ss_ls=4f464a4b9572fa61e38c9faaefeb9419; sid_tt_ls=f27d2fa89813b6f9507ffb6650fff90d; sid_tt_ls=f27d2fa89813b6f9507ffb6650fff90d; sessionid_ls=f27d2fa89813b6f9507ffb6650fff90d; sessionid_ls=f27d2fa89813b6f9507ffb6650fff90d; sessionid_ss_ls=f27d2fa89813b6f9507ffb6650fff90d; sessionid_ss_ls=f27d2fa89813b6f9507ffb6650fff90d; session_tlb_tag_ls=sttt%7C16%7C8n0vqJgTtvlQf_tmUP_5Df________-qihYH2rJ1I9Ec-LfcjTSvB5ZIZ9slO-IbPzi_TEJDpxg%3D; session_tlb_tag_ls=sttt%7C16%7C8n0vqJgTtvlQf_tmUP_5Df________-qihYH2rJ1I9Ec-LfcjTSvB5ZIZ9slO-IbPzi_TEJDpxg%3D; is_staff_user_ls=false; is_staff_user_ls=false; has_biz_token_ls=false; has_biz_token_ls=false; sid_ucp_v1_ls=1.0.0-KDkyZGMxOWU1ZGI4NGZmNzdjM2JhN2ZiNjRiMzI3NmI3Nzk0YjAwYzMKHAi5l_DX-azuBhDn8obTBhjRwRIgDDgCQPEHSAQaAmhsIiBmMjdkMmZhODk4MTNiNmY5NTA3ZmZiNjY1MGZmZjkwZA; sid_ucp_v1_ls=1.0.0-KDkyZGMxOWU1ZGI4NGZmNzdjM2JhN2ZiNjRiMzI3NmI3Nzk0YjAwYzMKHAi5l_DX-azuBhDn8obTBhjRwRIgDDgCQPEHSAQaAmhsIiBmMjdkMmZhODk4MTNiNmY5NTA3ZmZiNjY1MGZmZjkwZA; ssid_ucp_v1_ls=1.0.0-KDkyZGMxOWU1ZGI4NGZmNzdjM2JhN2ZiNjRiMzI3NmI3Nzk0YjAwYzMKHAi5l_DX-azuBhDn8obTBhjRwRIgDDgCQPEHSAQaAmhsIiBmMjdkMmZhODk4MTNiNmY5NTA3ZmZiNjY1MGZmZjkwZA; ssid_ucp_v1_ls=1.0.0-KDkyZGMxOWU1ZGI4NGZmNzdjM2JhN2ZiNjRiMzI3NmI3Nzk0YjAwYzMKHAi5l_DX-azuBhDn8obTBhjRwRIgDDgCQPEHSAQaAmhsIiBmMjdkMmZhODk4MTNiNmY5NTA3ZmZiNjY1MGZmZjkwZA; odin_tt=98c1b1eb54f214dbcf6d0306e623a7698cad06aed297013d5204a6f211a34501a481d1aedf31894e81c4767bbcb1bee2; gfkadpd=299467,30208|299467,22075; s_v_web_id=verify_mryp0648_sh1t1tUF_wKJr_4Emn_9FQZ_ZegH0CjFKeWz; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCRk01ZDhMMW43ZjZjN1RoRFBRMnd6WTR2L2JPQmEvaTBRUkhxZ1FFZ3hyQnB3cTN3MGRRQ0c3SkxiRmlacXErVHpLVDRXcnB5eVJoeFR3V3NuSVlOOFk9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoxfQ%3D%3D; ttwid=1%7Ch5VmxAoz8DVVl-I7kbuR0wscOKvYpzecrTTwXnA4wK4%7C1785138103%7C3f0930eac31f0aa4c0d5c78a80b975ea23dd462efb67d63551d16c65405a7847"
  148. ])->post($url, $param)->array();
  149. if ($resp['status_code'] <> 0) return [0,'登录过期,请联系管理员'];
  150. if (!isset($resp['talent_list'][0])) return [0,'未获取到达人信息,请确认是否已开通达人权限'];
  151. return [1,$resp['talent_list'][0]];
  152. }
  153. }