Răsfoiți Sursa

新增URS注册农场用户WebHook处理器

- 创建UrsRegisterFarmUserWebhook类,处理URS用户注册农场用户请求
- 实现参数验证:验证user_id和user_key参数格式
- 集成UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate逻辑
- 返回farm_user_id给调用方,包含完整的错误处理和日志记录
- 在UrsServiceProvider中注册新的WebHook处理器
- 测试验证功能正常,成功创建农场用户并返回正确响应
AI Assistant 6 luni în urmă
părinte
comite
2c3f4c9e

+ 6 - 4
ThirdParty/Urs/UrsServiceProvider.php

@@ -8,6 +8,7 @@ use ThirdParty\Urs\Services\UrsService;
 use ThirdParty\Urs\Webhook\UrsCheckWebhook;
 use ThirdParty\Urs\Webhook\UrsDepositWebhook;
 use ThirdParty\Urs\Webhook\UrsRegisterWebhook;
+use ThirdParty\Urs\Webhook\UrsRegisterFarmUserWebhook;
 use ThirdParty\Urs\Webhook\UrsWithdrawWebhook;
 
 /**
@@ -51,10 +52,11 @@ class UrsServiceProvider extends ServiceProvider
         // 一对一映射:每个路由对应一个专门的处理器
         // 每个处理器只处理一种特定的Webhook请求
         WebhookDispatchService::registerPackageHandlers('urs', [
-            'register' => UrsRegisterWebhook::class,    // 注册通知 - 专门处理用户注册
-            'deposit' => UrsDepositWebhook::class,      // 充值通知 - 专门处理充值操作
-            'withdraw' => UrsWithdrawWebhook::class,    // 提取通知 - 专门处理提取操作
-            'check' => UrsCheckWebhook::class,          // 余额检查 - 专门处理余额检查
+            'register' => UrsRegisterWebhook::class,                // 注册通知 - 专门处理用户注册
+            'register_farm_user' => UrsRegisterFarmUserWebhook::class, // 注册农场用户 - 专门处理URS用户注册农场用户
+            'deposit' => UrsDepositWebhook::class,                  // 充值通知 - 专门处理充值操作
+            'withdraw' => UrsWithdrawWebhook::class,                // 提取通知 - 专门处理提取操作
+            'check' => UrsCheckWebhook::class,                      // 余额检查 - 专门处理余额检查
         ]);
     }
 

+ 137 - 0
ThirdParty/Urs/Webhook/UrsRegisterFarmUserWebhook.php

@@ -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;
+        }
+    }
+}

+ 7 - 0
ThirdParty/Urs/Webhook/webhook.md

@@ -0,0 +1,7 @@
+# webhook
+
+## 注册农场用户
+增加一个新的 WebHook ,模式不变,按照其他wenhook的模式再开发一个
+传入参数 user_id (Urs的用户ID), user_key (Urs的用户密钥)
+给这个用户注册农场用户,逻辑使用  UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId) 的公共逻辑,不要重写
+返回 farm_user_id (农场的用户ID)