Star.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. $param = $this->_valid([
  39. "name.require" => trans("empty.require"),
  40. "status.require" => trans("empty.status"),
  41. ],$request->method());
  42. if (!is_array($param)) return error($param);
  43. $param['poi_id'] = $request->user['store_id'];
  44. $star = $this->model->where(['poi_id' => $param['poi_id'],'unique_id' => $param['name']])->findOrEmpty();
  45. if (!$star->isEmpty()) return error("达人已绑定,请勿重复操作");
  46. [$state,$starData] = $this->getStarForLife($param['name']);
  47. if (!$state) return error($starData);
  48. unset($param['name']);
  49. $param['nick_name'] = removeEmoji2($starData['nick_name']);
  50. $param['show_nickname'] = emojiToUnicode($starData['nick_name']);
  51. $param['gender'] = $starData['gender'];
  52. $param['unique_id'] = $starData['unique_id'];
  53. $param['avatar_url'] = $starData['avatar_url'];
  54. $param['city_name'] = $starData['city_name'];
  55. $param['uid'] = $starData['uid'];
  56. $param['fans_count'] = $starData['fans_count'];
  57. $param['fans_tag_list'] = json_encode($starData['fans_tag_list']);
  58. $param['local_fans_count'] = $starData['local_fans_count'];
  59. $param['talent_level_display'] = $starData['talent_display_info']['talent_level_display']['statistice_value']['value']??'';
  60. $param['talent_item_level_display'] = $starData['talent_display_info']['talent_item_level_display']['statistice_value']['value']??'';
  61. $param['talent_live_level_display'] = $starData['talent_display_info']['talent_live_level_display']['statistice_value']['value']??'';
  62. $param['content_level_display'] = $starData['talent_display_info']['content_level_display']['statistice_value']['value']??'';
  63. $param['credit_score_display'] = $starData['talent_display_info']['credit_score_display']['statistice_value']['value']??'';
  64. $param['rank_display'] = $starData['talent_display_info']['rank_display']['statistice_value']['digit_value']??'';
  65. $param['aweme_url'] = $starData['aweme_url'];
  66. $status = $star->insertGetId($param);
  67. if (!$status) return errorTrans('error.data');
  68. return successTrans('success.data');
  69. } catch (\Throwable $throwable) {
  70. return error($throwable->getMessage());
  71. }
  72. }
  73. #[PostMapping('update')]
  74. public function updateStar(Request $request): Response
  75. {
  76. try {
  77. $param = $this->_valid([
  78. "id.require" => trans("empty.require"),
  79. ],$request->method());
  80. if (!is_array($param)) return error($param);
  81. $data = $this->model->where("id",$param["id"])->findOrEmpty();
  82. if ($data->isEmpty()) return errorTrans("empty.data");
  83. if ($data['poi_id'] <> $request->user['store_id']) return errorTrans("empty.data");
  84. [$state,$starData] = $this->getStarForLife($data['unique_id']);
  85. if (!$state) return error($starData);
  86. $state = $data->save([
  87. 'nick_name' => removeEmoji2($starData['nick_name']),
  88. 'show_nickname' => emojiToUnicode($starData['nick_name']),
  89. 'gender' => $starData['gender'],
  90. 'avatar_url' => $starData['avatar_url'],
  91. 'city_name' => $starData['city_name'],
  92. 'fans_count' => $starData['fans_count'],
  93. 'fans_tag_list' => json_encode($starData['fans_tag_list']),
  94. 'local_fans_count'=> $starData['local_fans_count'],
  95. 'talent_level_display' => $starData['talent_display_info']['talent_level_display']['statistice_value']['value']??'',
  96. 'talent_item_level_display' => $starData['talent_display_info']['talent_item_level_display']['statistice_value']['value']??'',
  97. 'talent_live_level_display' => $starData['talent_display_info']['talent_live_level_display']['statistice_value']['value']??'',
  98. 'content_level_display' => $starData['talent_display_info']['content_level_display']['statistice_value']['value']??'',
  99. 'credit_score_display' => $starData['talent_display_info']['credit_score_display']['statistice_value']['value']??'',
  100. 'rank_display' => $starData['talent_display_info']['rank_display']['statistice_value']['digit_value']??'',
  101. ]);
  102. if (!$state) return errorTrans('error.data');
  103. return successTrans('success.data');
  104. } catch (\Throwable $throwable) {
  105. return error($throwable->getMessage());
  106. }
  107. }
  108. /**
  109. * 删除达人
  110. * @param Request $request
  111. * @return Response
  112. */
  113. #[PostMapping('del')]
  114. public function delStarData(Request $request): Response
  115. {
  116. try {
  117. $param = $this->_valid([
  118. "id.require" => trans("empty.require"),
  119. ],$request->method());
  120. if (!is_array($param)) return error($param);
  121. $data = $this->model->where("id",$param["id"])->findOrEmpty();
  122. if ($data->isEmpty()) return errorTrans("empty.data");
  123. if ($data['poi_id'] <> $request->user['store_id']) return errorTrans("empty.data");
  124. $state = $data->delete();
  125. if (!$state) return errorTrans("error.data");
  126. return successTrans("success.data");
  127. } catch (\Throwable $throwable) {
  128. return error($throwable->getMessage());
  129. }
  130. }
  131. /**
  132. * @param string $name
  133. * @return array
  134. */
  135. protected function getStarForLife(string $name = ""): array
  136. {
  137. $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=";
  138. $param = [
  139. "request_source" => 2,
  140. "keyword" => $name,
  141. "page" => 1,
  142. "page_size" => 10
  143. ];
  144. $resp = Http::asJson()->withHeaders([
  145. "cookie" => "UIFID_TEMP=9bd4fa58ec3741c400ac0e64fd526d2212cfb7b0cefedeef86992d8b657cfd0c2a0ec6c08d152ae9edb282648cc0d6f336200cfef79af701df393d63b6a0c13194edf658b095ab3fc8da7eb842890a22; hevc_supported=true; enter_pc_once=1; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.6%7D; SelfTabRedDotControl=%5B%5D; d_ticket=9f9c71d00b00b55abc671d6080befa2325972; passport_assist_user=CkBt_qfNk29E19EiI97k3iXqa3XyGQime36p9_vAaVuzG-9rdCaPhnZrTz1K7zuImPLEaAAjcVw3qSlxQknHX_OxGkoKPAAAAAAAAAAAAABQIPwUdkAFo7oU9JUOT3iQjfEYalCjyWmbko7dCf7YnnnrMv4aS6fBefHbmORqSNMENhCp8YoOGImv1lQgASIBAxH5AAg%3D; sid_guard=3fa6df8b271a642c6b7906b1272dff00%7C1772311434%7C5184000%7CWed%2C+29-Apr-2026+20%3A43%3A54+GMT; login_time=1772311435022; passport_csrf_token=23de31e88e6036f82eca1b37af32862c; passport_csrf_token_default=23de31e88e6036f82eca1b37af32862c; sid_guard_ls=3e45fa74a885be51c72a3f903289fafa%7C1778864382%7C5184001%7CTue%2C+14-Jul-2026+16%3A59%3A43+GMT; sid_guard_ls=3e45fa74a885be51c72a3f903289fafa%7C1778864382%7C5184001%7CTue%2C+14-Jul-2026+16%3A59%3A43+GMT; is_hit_partitioned_cookie_canary=true; is_hit_partitioned_cookie_canary=true; uid_tt_ls=f8d330dac553717e73d26d6ef3a253a3; uid_tt_ls=f8d330dac553717e73d26d6ef3a253a3; uid_tt_ss_ls=f8d330dac553717e73d26d6ef3a253a3; uid_tt_ss_ls=f8d330dac553717e73d26d6ef3a253a3; is_hit_partitioned_cookie_canary_ss=true; is_hit_partitioned_cookie_canary_ss=true; sid_tt_ls=3e45fa74a885be51c72a3f903289fafa; sid_tt_ls=3e45fa74a885be51c72a3f903289fafa; sessionid_ls=3e45fa74a885be51c72a3f903289fafa; sessionid_ls=3e45fa74a885be51c72a3f903289fafa; sessionid_ss_ls=3e45fa74a885be51c72a3f903289fafa; sessionid_ss_ls=3e45fa74a885be51c72a3f903289fafa; session_tlb_tag_ls=sttt%7C19%7CPkX6dKiFvlHHKj-QMon6-v________-vmE57utcvU8fQAXRr44LJmBIjTe7QYYuM-7KCcIfNZKM%3D; session_tlb_tag_ls=sttt%7C19%7CPkX6dKiFvlHHKj-QMon6-v________-vmE57utcvU8fQAXRr44LJmBIjTe7QYYuM-7KCcIfNZKM%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-KDA5ZTkxZTFlZjQwNmQyYzlkNGUxYmE5Njg3MTdiNGFhYWE2YmY3YjAKGgi5l_DX-azuBhD-oZ3QBhjRwRIgDDgCQPEHGgJscSIgM2U0NWZhNzRhODg1YmU1MWM3MmEzZjkwMzI4OWZhZmE; sid_ucp_v1_ls=1.0.0-KDA5ZTkxZTFlZjQwNmQyYzlkNGUxYmE5Njg3MTdiNGFhYWE2YmY3YjAKGgi5l_DX-azuBhD-oZ3QBhjRwRIgDDgCQPEHGgJscSIgM2U0NWZhNzRhODg1YmU1MWM3MmEzZjkwMzI4OWZhZmE; ssid_ucp_v1_ls=1.0.0-KDA5ZTkxZTFlZjQwNmQyYzlkNGUxYmE5Njg3MTdiNGFhYWE2YmY3YjAKGgi5l_DX-azuBhD-oZ3QBhjRwRIgDDgCQPEHGgJscSIgM2U0NWZhNzRhODg1YmU1MWM3MmEzZjkwMzI4OWZhZmE; ssid_ucp_v1_ls=1.0.0-KDA5ZTkxZTFlZjQwNmQyYzlkNGUxYmE5Njg3MTdiNGFhYWE2YmY3YjAKGgi5l_DX-azuBhD-oZ3QBhjRwRIgDDgCQPEHGgJscSIgM2U0NWZhNzRhODg1YmU1MWM3MmEzZjkwMzI4OWZhZmE; odin_tt=71ffb07bab675400db08e23cd1f577ac0eefbb2f12de0d0a44e58c1dfd3fe9d18661e3580de35adec458535461a152a3; s_v_web_id=verify_mp8pler1_Zvw1scAc_BZiC_4BMO_893I_GdCKcYp8TOtZ; bd_ticket_guard_client_web_domain=2; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCRTh2ak9zTHk5ckl1Uk53NGg1YzFSNDVkNkg4b0tRdUFTZytsTnEzVHJEMDZvK2xsWXVvTFVGYW5IUlFiWVhhOStRdWdWaHFJemVNcEZhRVJqWTFweTg9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoxfQ%3D%3D; csrf_session_id=cb19f8a79e5c000ccdd852d487261e7d; gfkadpd=299467,22075; ttwid=1%7CcDqBg9Uao6OheOjjHyO1Pv6m0peKlvrUFisVX3a3S3M%7C1782751893%7C5251e4d02a16cb7b404b85350c014648f0030d7dc8a7131e20bd05868899f5d1"
  146. ])->post($url, $param)->array();
  147. if ($resp['status_code'] <> 0) return [0,'获取失败'];
  148. return [1,$resp['talent_list'][0]];
  149. }
  150. }