|
|
@@ -0,0 +1,137 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace ThirdParty\Urs\Webhook;
|
|
|
+
|
|
|
+use App\Module\ThirdParty\Models\ThirdPartyService as ServiceModel;
|
|
|
+use App\Module\UrsPromotion\Services\UrsUserMappingService;
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+
|
|
|
+/**
|
|
|
+ * URS注册农场用户Webhook处理器
|
|
|
+ *
|
|
|
+ * 专门处理URS用户注册农场用户的Webhook通知
|
|
|
+ */
|
|
|
+class UrsRegisterFarmUserWebhook extends WebhookReceiver
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * 构造函数
|
|
|
+ *
|
|
|
+ * @param string $serviceCode 服务代码
|
|
|
+ * @param Request $request 请求对象
|
|
|
+ * @param ServiceModel $service 服务配置对象
|
|
|
+ */
|
|
|
+ public function __construct(string $serviceCode, Request $request, ServiceModel $service)
|
|
|
+ {
|
|
|
+ parent::__construct($serviceCode, $request, $service);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理注册农场用户通知
|
|
|
+ *
|
|
|
+ * @param string $action 操作类型(固定为register_farm_user)
|
|
|
+ * @param Request $request 请求对象
|
|
|
+ * @return array
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ protected function handler(string $action, Request $request): array
|
|
|
+ {
|
|
|
+ // 验证操作类型
|
|
|
+ if ($action !== 'register_farm_user') {
|
|
|
+ throw new \Exception("此处理器只能处理register_farm_user操作,当前操作: {$action}");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证必需字段
|
|
|
+ $this->validateRegisterRequest($request);
|
|
|
+
|
|
|
+ // 处理注册农场用户通知
|
|
|
+ return $this->processRegisterFarmUser(
|
|
|
+ $request->get('user_id'),
|
|
|
+ $request->get('user_key')
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证注册请求
|
|
|
+ *
|
|
|
+ * @param Request $request 请求对象
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ protected function validateRegisterRequest(Request $request): void
|
|
|
+ {
|
|
|
+ $requiredFields = ['user_id', 'user_key'];
|
|
|
+
|
|
|
+ foreach ($requiredFields as $field) {
|
|
|
+ if (!$request->has($field)) {
|
|
|
+ throw new \Exception("缺少必需字段: {$field}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证用户ID
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ if (!is_numeric($userId) || $userId <= 0) {
|
|
|
+ throw new \Exception('用户ID格式无效');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证用户密钥
|
|
|
+ $userKey = $request->input('user_key');
|
|
|
+ if (empty($userKey)) {
|
|
|
+ throw new \Exception('用户密钥不能为空');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理注册农场用户
|
|
|
+ *
|
|
|
+ * @param int $ursUserId URS用户ID
|
|
|
+ * @param string $userKey 用户密钥
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ protected function processRegisterFarmUser($ursUserId, $userKey): array
|
|
|
+ {
|
|
|
+ // 记录处理日志
|
|
|
+ Log::info("URS注册农场用户处理开始", [
|
|
|
+ 'urs_user_id' => $ursUserId,
|
|
|
+ 'user_key_length' => strlen($userKey),
|
|
|
+ 'request_id' => $this->getRequestId(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 使用UrsUserMappingService的公共逻辑获取或创建农场用户ID
|
|
|
+ $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId);
|
|
|
+
|
|
|
+ if (!$farmUserId) {
|
|
|
+ Log::error("URS注册农场用户失败:无法获取或创建农场用户ID", [
|
|
|
+ 'urs_user_id' => $ursUserId,
|
|
|
+ 'user_key_length' => strlen($userKey),
|
|
|
+ ]);
|
|
|
+ throw new \Exception("无法获取或创建农场用户ID");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 记录成功日志
|
|
|
+ Log::info("URS注册农场用户成功", [
|
|
|
+ 'urs_user_id' => $ursUserId,
|
|
|
+ 'farm_user_id' => $farmUserId,
|
|
|
+ 'user_key_length' => strlen($userKey),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 返回成功响应
|
|
|
+ return [
|
|
|
+ 'farm_user_id' => $farmUserId,
|
|
|
+ 'status' => 'success'
|
|
|
+ ];
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ // 记录异常日志
|
|
|
+ Log::error("URS注册农场用户处理异常", [
|
|
|
+ 'urs_user_id' => $ursUserId,
|
|
|
+ 'user_key_length' => strlen($userKey),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'trace' => $e->getTraceAsString(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 重新抛出异常,让上层处理
|
|
|
+ throw $e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|