UrsRegisterFarmUserWebhook.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace ThirdParty\Urs\Webhook;
  3. use App\Module\ThirdParty\Models\ThirdPartyService as ServiceModel;
  4. use App\Module\UrsPromotion\Services\UrsUserMappingService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Log;
  7. /**
  8. * URS注册农场用户Webhook处理器
  9. *
  10. * 专门处理URS用户注册农场用户的Webhook通知
  11. */
  12. class UrsRegisterFarmUserWebhook extends WebhookReceiver
  13. {
  14. /**
  15. * 构造函数
  16. *
  17. * @param string $serviceCode 服务代码
  18. * @param Request $request 请求对象
  19. * @param ServiceModel $service 服务配置对象
  20. */
  21. public function __construct(string $serviceCode, Request $request, ServiceModel $service)
  22. {
  23. parent::__construct($serviceCode, $request, $service);
  24. }
  25. /**
  26. * 处理注册农场用户通知
  27. *
  28. * @param string $action 操作类型(固定为register_farm_user)
  29. * @param Request $request 请求对象
  30. * @return array
  31. * @throws \Exception
  32. */
  33. protected function handler(string $action, Request $request): array
  34. {
  35. // 验证操作类型
  36. if ($action !== 'register_farm_user') {
  37. throw new \Exception("此处理器只能处理register_farm_user操作,当前操作: {$action}");
  38. }
  39. // 验证必需字段
  40. $this->validateRegisterRequest($request);
  41. // 处理注册农场用户通知
  42. return $this->processRegisterFarmUser(
  43. $request->get('user_id'),
  44. $request->get('user_key')
  45. );
  46. }
  47. /**
  48. * 验证注册请求
  49. *
  50. * @param Request $request 请求对象
  51. * @throws \Exception
  52. */
  53. protected function validateRegisterRequest(Request $request): void
  54. {
  55. $requiredFields = ['user_id', 'user_key'];
  56. foreach ($requiredFields as $field) {
  57. if (!$request->has($field)) {
  58. throw new \Exception("缺少必需字段: {$field}");
  59. }
  60. }
  61. // 验证用户ID
  62. $userId = $request->input('user_id');
  63. if (!is_numeric($userId) || $userId <= 0) {
  64. throw new \Exception('用户ID格式无效');
  65. }
  66. // 验证用户密钥
  67. $userKey = $request->input('user_key');
  68. if (empty($userKey)) {
  69. throw new \Exception('用户密钥不能为空');
  70. }
  71. }
  72. /**
  73. * 处理注册农场用户
  74. *
  75. * @param int $ursUserId URS用户ID
  76. * @param string $userKey 用户密钥
  77. * @return array
  78. */
  79. protected function processRegisterFarmUser($ursUserId, $userKey): array
  80. {
  81. // 记录处理日志
  82. Log::info("URS注册农场用户处理开始", [
  83. 'urs_user_id' => $ursUserId,
  84. 'user_key_length' => strlen($userKey),
  85. 'request_id' => $this->getRequestId(),
  86. ]);
  87. try {
  88. // 使用UrsUserMappingService的公共逻辑获取或创建农场用户ID
  89. $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId);
  90. if (!$farmUserId) {
  91. Log::error("URS注册农场用户失败:无法获取或创建农场用户ID", [
  92. 'urs_user_id' => $ursUserId,
  93. 'user_key_length' => strlen($userKey),
  94. ]);
  95. throw new \Exception("无法获取或创建农场用户ID");
  96. }
  97. // 记录成功日志
  98. Log::info("URS注册农场用户成功", [
  99. 'urs_user_id' => $ursUserId,
  100. 'farm_user_id' => $farmUserId,
  101. 'user_key_length' => strlen($userKey),
  102. ]);
  103. // 返回成功响应
  104. return [
  105. 'farm_user_id' => $farmUserId,
  106. 'status' => 'success'
  107. ];
  108. } catch (\Exception $e) {
  109. // 记录异常日志
  110. Log::error("URS注册农场用户处理异常", [
  111. 'urs_user_id' => $ursUserId,
  112. 'user_key_length' => strlen($userKey),
  113. 'error' => $e->getMessage(),
  114. 'trace' => $e->getTraceAsString(),
  115. ]);
  116. // 重新抛出异常,让上层处理
  117. throw $e;
  118. }
  119. }
  120. }