TestLogin4uCommand.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace App\Module\AppGame\Commands;
  3. use App\Module\AppGame\Handler\Public\Login4uHandler;
  4. use Illuminate\Console\Command;
  5. use Uraus\Kku\Request\RequestPublicLogin4u;
  6. use Uraus\Kku\Response;
  7. /**
  8. * 测试Login4u功能的命令
  9. */
  10. class TestLogin4uCommand extends Command
  11. {
  12. /**
  13. * 命令签名
  14. *
  15. * @var string
  16. */
  17. protected $signature = 'test:login4u {keylogin? : URS登录密钥}';
  18. /**
  19. * 命令描述
  20. *
  21. * @var string
  22. */
  23. protected $description = '测试URS login4u登录功能';
  24. /**
  25. * 执行命令
  26. *
  27. * @return int
  28. */
  29. public function handle(): int
  30. {
  31. $this->info('=== 测试URS Login4u功能 ===');
  32. // 获取测试用的keylogin
  33. $keylogin = $this->argument('keylogin') ?: $this->ask('请输入URS登录密钥(keylogin)');
  34. if (empty($keylogin)) {
  35. $this->error('登录密钥不能为空');
  36. return Command::FAILURE;
  37. }
  38. try {
  39. // 1. 测试Handler类是否存在
  40. $this->info('1. 检查Handler类...');
  41. if (!class_exists(\App\Module\AppGame\Handler\Public\Login4uHandler::class)) {
  42. $this->error('Login4uHandler类不存在');
  43. return Command::FAILURE;
  44. }
  45. $this->line('✓ Login4uHandler类存在');
  46. // 2. 测试Request和Response类是否存在
  47. $this->info('2. 检查Protobuf类...');
  48. if (!class_exists(\Uraus\Kku\Request\RequestPublicLogin4u::class)) {
  49. $this->error('RequestPublicLogin4u类不存在');
  50. return Command::FAILURE;
  51. }
  52. $this->line('✓ RequestPublicLogin4u类存在');
  53. if (!class_exists(\Uraus\Kku\Response\ResponsePublicLogin4u::class)) {
  54. $this->error('ResponsePublicLogin4u类不存在');
  55. return Command::FAILURE;
  56. }
  57. $this->line('✓ ResponsePublicLogin4u类存在');
  58. // 3. 测试URS服务是否可用
  59. $this->info('3. 检查URS服务...');
  60. if (!class_exists(\ThirdParty\Urs\Services\UrsService::class)) {
  61. $this->error('UrsService类不存在');
  62. return Command::FAILURE;
  63. }
  64. $this->line('✓ UrsService类存在');
  65. // 4. 测试UrsUserMappingService是否可用
  66. $this->info('4. 检查UrsUserMappingService...');
  67. if (!class_exists(\App\Module\UrsPromotion\Services\UrsUserMappingService::class)) {
  68. $this->error('UrsUserMappingService类不存在');
  69. return Command::FAILURE;
  70. }
  71. $this->line('✓ UrsUserMappingService类存在');
  72. // 5. 创建测试请求
  73. $this->info('5. 创建测试请求...');
  74. $request = new RequestPublicLogin4u();
  75. $request->setKeylogin($keylogin);
  76. $this->line("✓ 测试请求创建成功,keylogin: {$keylogin}");
  77. // 6. 创建Handler实例并测试
  78. $this->info('6. 测试Handler处理...');
  79. $response = new Response();
  80. $handler = new Login4uHandler($response);
  81. $this->line('开始处理登录请求...');
  82. $result = $handler->handle($request);
  83. // 7. 检查响应
  84. $this->info('7. 检查响应结果...');
  85. if (!$result instanceof \Uraus\Kku\Response\ResponsePublicLogin4u) {
  86. $this->error('响应类型错误,期望ResponsePublicLogin4u');
  87. return Command::FAILURE;
  88. }
  89. $token = $result->getToken();
  90. $isProhibit = $result->getIsProhibit();
  91. if (empty($token) || $isProhibit) {
  92. $this->error('登录失败');
  93. $this->line("Token: {$token}");
  94. $this->line("IsProhibit: " . ($isProhibit ? 'true' : 'false'));
  95. return Command::FAILURE;
  96. }
  97. $this->info('✓ 登录成功!');
  98. $this->line("Token: {$token}");
  99. $this->line("IsProhibit: " . ($isProhibit ? 'true' : 'false'));
  100. // 8. 检查最后登录信息
  101. if ($result->hasLastLoginInfo()) {
  102. $lastLoginInfo = $result->getLastLoginInfo();
  103. $this->line("最后登录时间: " . date('Y-m-d H:i:s', $lastLoginInfo->getLastLoginTimes()));
  104. }
  105. $this->info('=== 测试完成 ===');
  106. return Command::SUCCESS;
  107. } catch (\Exception $e) {
  108. $this->error('测试失败: ' . $e->getMessage());
  109. $this->line('错误详情: ' . $e->getTraceAsString());
  110. return Command::FAILURE;
  111. }
  112. }
  113. }