TestUrsWebhookCommand.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Module\Test\Commands;
  3. use App\Module\ThirdParty\Models\ThirdPartyService as ServiceModel;
  4. use App\Module\User\Models\UserInfo;
  5. use Illuminate\Console\Command;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. use ThirdParty\Urs\Webhook\UrsRegisterFarmUserWebhook;
  9. /**
  10. * 测试URS Webhook功能的命令
  11. */
  12. class TestUrsWebhookCommand extends Command
  13. {
  14. /**
  15. * 命令签名
  16. *
  17. * @var string
  18. */
  19. protected $signature = 'test:urs-webhook {--user-id=12345 : 测试用户ID} {--nickname=测试昵称 : 测试昵称}';
  20. /**
  21. * 命令描述
  22. *
  23. * @var string
  24. */
  25. protected $description = '测试URS注册用户Webhook的昵称和头像设置功能';
  26. /**
  27. * 执行命令
  28. */
  29. public function handle()
  30. {
  31. $userId = $this->option('user-id');
  32. $nickname = $this->option('nickname');
  33. $this->info("开始测试URS Webhook功能...");
  34. $this->info("测试用户ID: {$userId}");
  35. $this->info("测试昵称: {$nickname}");
  36. try {
  37. // 获取一个现有的服务记录或创建一个简单的模拟对象
  38. $service = ServiceModel::first();
  39. if (!$service) {
  40. $this->error("❌ 没有找到可用的服务记录,请先在数据库中创建一个服务记录");
  41. return;
  42. }
  43. // 创建测试请求
  44. $request = new Request();
  45. // 创建webhook实例
  46. $webhook = new UrsRegisterFarmUserWebhook($service->code, $request, $service);
  47. // 使用反射调用受保护的方法
  48. $reflection = new \ReflectionClass($webhook);
  49. $method = $reflection->getMethod('setUserNicknameAndAvatar');
  50. $method->setAccessible(true);
  51. // 清理可能存在的测试数据
  52. UserInfo::where('user_id', $userId)->delete();
  53. $this->info("执行设置昵称和头像...");
  54. // 执行方法
  55. $method->invoke($webhook, $userId, $nickname);
  56. // 验证结果
  57. $userInfo = UserInfo::where('user_id', $userId)->first();
  58. if ($userInfo) {
  59. $this->info("✅ 测试成功!");
  60. $this->info("用户ID: {$userInfo->user_id}");
  61. $this->info("昵称: {$userInfo->nickname}");
  62. $this->info("头像: {$userInfo->avatar}");
  63. // 验证头像范围
  64. $avatar = (int) $userInfo->avatar;
  65. if ($avatar >= 1 && $avatar <= 8) {
  66. $this->info("✅ 头像ID在正确范围内 (1-8)");
  67. } else {
  68. $this->error("❌ 头像ID不在正确范围内: {$avatar}");
  69. }
  70. // 验证昵称
  71. if ($userInfo->nickname === $nickname) {
  72. $this->info("✅ 昵称设置正确");
  73. } else {
  74. $this->error("❌ 昵称设置错误,期望: {$nickname},实际: {$userInfo->nickname}");
  75. }
  76. } else {
  77. $this->error("❌ 测试失败:未找到用户信息记录");
  78. }
  79. // 清理测试数据
  80. UserInfo::where('user_id', $userId)->delete();
  81. $this->info("测试完成,已清理测试数据");
  82. } catch (\Exception $e) {
  83. $this->error("❌ 测试失败:" . $e->getMessage());
  84. $this->error("错误详情:" . $e->getTraceAsString());
  85. }
  86. }
  87. }