App_Controller_ChatController.proxy.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. declare (strict_types=1);
  3. namespace App\Controller;
  4. use App\JsonRpc\ChatServiceInterface;
  5. use App\Tools\PublicData;
  6. use Hyperf\Di\Annotation\Inject;
  7. use Hyperf\HttpServer\Annotation\AutoController;
  8. use App\Tools\Result;
  9. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  10. use App\Amqp\Producer\DemoProducer;
  11. use Hyperf\Context\ApplicationContext;
  12. use App\Amqp\Producer;
  13. use Hyperf\Snowflake\IdGeneratorInterface;
  14. use PHPStan\Type\Accessory\OversizedArrayType;
  15. use function Hyperf\Support\env;
  16. use Hyperf\Context\Context;
  17. /**
  18. *
  19. * Class ChatController
  20. * @package App\Controller
  21. */
  22. #[AutoController]
  23. class ChatController extends AbstractController
  24. {
  25. use \Hyperf\Di\Aop\ProxyTrait;
  26. use \Hyperf\Di\Aop\PropertyHandlerTrait;
  27. function __construct(\Hyperf\Logger\LoggerFactory $loggerFactory)
  28. {
  29. if (method_exists(parent::class, '__construct')) {
  30. parent::__construct(...func_get_args());
  31. }
  32. $this->__handlePropertyHandler(__CLASS__);
  33. }
  34. #[Inject]
  35. protected ValidatorFactoryInterface $validationFactory;
  36. /**
  37. * @var ChatServiceInterface
  38. */
  39. #[Inject]
  40. private $chatServiceClient;
  41. /**
  42. * 申请添加好友
  43. * @return array
  44. */
  45. public function addContactApply()
  46. {
  47. $requireData = $this->request->all();
  48. $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required'], ['friend_id.required' => '好友ID不能为空']);
  49. if ($validator->fails()) {
  50. $errorMessage = $validator->errors()->first();
  51. return Result::error($errorMessage);
  52. }
  53. $requireData['user_id'] = Context::get("UserId");
  54. $result = $this->chatServiceClient->addContactApply($requireData);
  55. return $result ? Result::success($result['data']) : Result::error($result['message']);
  56. }
  57. /**
  58. * 获取我的好友申请列表
  59. * @return array
  60. */
  61. public function getContactApplyList()
  62. {
  63. $requireData = [];
  64. $requireData['user_id'] = Context::get("UserId");
  65. $result = $this->chatServiceClient->getContactApplyList($requireData);
  66. return $result ? Result::success($result['data']) : Result::error($result['message']);
  67. }
  68. /**
  69. * 好有审核通过或拒绝
  70. * @return void
  71. */
  72. public function updateContactApply()
  73. {
  74. $requireData = $this->request->all();
  75. $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required', 'type' => 'required'], ['friend_id.required' => '好友ID不能为空', 'type.required' => '操作状态不能为空']);
  76. if ($validator->fails()) {
  77. $errorMessage = $validator->errors()->first();
  78. return Result::error($errorMessage);
  79. }
  80. $requireData['user_id'] = Context::get("UserId");
  81. //type==1 同意 type==2 拒绝
  82. $result = $this->chatServiceClient->updateContactApply($requireData);
  83. if ($requireData['type'] == 1) {
  84. }
  85. return $result ? Result::success($result['data']) : Result::error($result['message']);
  86. }
  87. /**
  88. * 删除好友
  89. * @return array
  90. */
  91. public function delContact()
  92. {
  93. $requireData = $this->request->all();
  94. $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required'], ['friend_id.required' => '好友ID不能为空']);
  95. if ($validator->fails()) {
  96. $errorMessage = $validator->errors()->first();
  97. return Result::error($errorMessage);
  98. }
  99. $requireData['user_id'] = Context::get("UserId");
  100. $result = $this->chatServiceClient->delContact($requireData);
  101. return $result ? Result::success($result['data']) : Result::error($result['message']);
  102. }
  103. /**
  104. * 获取好友列表
  105. * @return array
  106. */
  107. public function getContactList()
  108. {
  109. $requireData = $this->request->all();
  110. $requireData['user_id'] = Context::get("UserId");
  111. $requireData['keyWord'] = $this->request->input('keyWord', '');
  112. $result = $this->chatServiceClient->getContactList($requireData);
  113. return $result ? Result::success($result['data']) : Result::error($result['message']);
  114. }
  115. /**
  116. * 获取会话列表
  117. * @return array
  118. */
  119. public function getTalkSessionList()
  120. {
  121. $requireData = $this->request->all();
  122. $requireData['user_id'] = Context::get("UserId");
  123. var_dump("会话列表:", $requireData);
  124. $result = $this->chatServiceClient->getTalkSessionList($requireData);
  125. var_dump($result);
  126. if ($result['data']['row']) {
  127. foreach ($result['data']['row'] as $k => $v) {
  128. $result['data']['row'][$k]['messages'] = [];
  129. }
  130. }
  131. return $result ? Result::success($result['data']) : Result::error($result['message']);
  132. }
  133. /**
  134. * 创建用户群
  135. * @return array
  136. */
  137. public function addTalkGroup()
  138. {
  139. $requireData = $this->request->all();
  140. $validator = $this->validationFactory->make($requireData, ['group_name' => 'required', 'user_id_arr' => 'required'], ['group_name.required' => '群名称不能为空', 'user_id_arr.required' => '好友ID不能为空']);
  141. if ($validator->fails()) {
  142. $errorMessage = $validator->errors()->first();
  143. return Result::error($errorMessage);
  144. }
  145. $requireData['user_id'] = Context::get("UserId");
  146. $userIdArr = array(json_decode($requireData['user_id_arr']));
  147. $requireData['user_id_arr'] = $userIdArr[0];
  148. $requireData['user_id_arr'][] = Context::get("UserId");
  149. var_dump($requireData);
  150. $result = $this->chatServiceClient->addTalkGroup($requireData);
  151. return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
  152. }
  153. /**
  154. * 会话详情
  155. * @return void
  156. */
  157. public function getTalkRecordsList()
  158. {
  159. $requireData = $this->request->all();
  160. $validator = $this->validationFactory->make($requireData, ['session_id' => 'required', 'talk_type' => 'required'], ['session_id.required' => '会话ID不能为空', 'talk_type.required' => '会话类型不能为空']);
  161. if ($validator->fails()) {
  162. $errorMessage = $validator->errors()->first();
  163. return Result::error($errorMessage);
  164. }
  165. $requireData['page'] = $requireData['page'] ?? 1;
  166. $requireData['pageSize'] = $requireData['pageSize'] ?? 30;
  167. $result = $this->chatServiceClient->getTalkRecordsList($requireData);
  168. return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
  169. }
  170. /**
  171. * 添加聊天
  172. * @return void
  173. */
  174. public function addTalkRecords()
  175. {
  176. $requireData = $this->request->all();
  177. $validator = $this->validationFactory->make($requireData, ['type' => 'required', 'content' => 'required', 'receiver' => 'required'], ['type.required' => '消息类型不能为空', 'content.required' => '内容不能为空', 'receiver.required' => '会话信息不能为空']);
  178. if ($validator->fails()) {
  179. $errorMessage = $validator->errors()->first();
  180. return Result::error($errorMessage);
  181. }
  182. $requireData['user_id'] = Context::get("UserId");
  183. $result = $this->chatServiceClient->addTalkRecords($requireData);
  184. return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
  185. }
  186. /**
  187. * 获取openId
  188. * @return array|void
  189. */
  190. public function wechatOpenInfo()
  191. {
  192. $requireData = $this->request->all();
  193. $validator = $this->validationFactory->make($requireData, ['code' => 'required'], ['code.required' => 'code不能为空']);
  194. if ($validator->fails()) {
  195. $errorMessage = $validator->errors()->first();
  196. return Result::error($errorMessage);
  197. }
  198. $url = env("WECHAT") . "sns/jscode2session?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&js_code=" . $requireData['code'] . "&grant_type=authorization_code";
  199. $result = PublicData::http_get($url);
  200. $resultData = json_decode($result, true);
  201. if (isset($resultData['errcode'])) {
  202. return Result::error($resultData['errmsg']);
  203. }
  204. return Result::success($resultData);
  205. }
  206. /**
  207. * 获取 access_token
  208. * @return array
  209. */
  210. public function getAccessToken()
  211. {
  212. $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
  213. $result = PublicData::http_get($url);
  214. $resultData = json_decode($result, true);
  215. var_dump($url, $resultData);
  216. if (isset($resultData['errcode'])) {
  217. return Result::error($resultData['errmsg']);
  218. }
  219. return Result::success($resultData);
  220. }
  221. }