<?php namespace GRPC\Auth; use Grpc\BaseStub; use Grpc\UnaryCall; use Grpc\Channel; use Grpc\ChannelCredentials; use GRPC\Auth\ValidateJwtTokenReq; use GRPC\Auth\ValidateJwtTokenResp; /** * AuthClient 是通过手动实现的 GRPC 客户端类 */ class AuthClient extends BaseStub { /** * AuthClient 构造函数 * * @param string $hostname 服务端地址(如 "192.168.21.27:22101") * @param array $opts 客户端选项(可选) * @param mixed $channel GRPC 通道(可选,默认使用明文连接) */ public function __construct(string $hostname, array $opts = [], $channel = null) { if ($channel === null) { // 使用明文连接 $channel = new Channel($hostname, [ 'credentials' => ChannelCredentials::createInsecure() ]); } parent::__construct($hostname, $opts, $channel); } /** * 调用 ValidateJwtToken 方法 * * @param ValidateJwtTokenReq $request 请求数据 * @param array $metadata 元数据(可选) * @param array $options 调用选项(可选) * * @return ValidateJwtTokenResp */ public function ValidateJwtToken( ValidateJwtTokenReq $request, array $metadata = [], array $options = [] ): ValidateJwtTokenResp { try { // 调试:输出请求数据 // dump('aaa',$request->getJwtToken()); // 调用 GRPC 服务 $unaryCall = $this->_simpleRequest( '/auth.Auth/ValidateJwtToken', // 方法的完整路径 $request, ['\GRPC\Auth\ValidateJwtTokenResp', 'decode'], // 解码器 $metadata, $options ); // 使用 wait() 获取返回值 list($response, $status) = $unaryCall->wait(); // 调试:输出 GRPC 状态码 // dump('2222',$response->getResult(),$response->getClaims(),$status); // 检查请求是否成功 if ($status->code !== \Grpc\STATUS_OK) { throw new \Exception('GRPC call failed with status: ' . $status->details, $status->code); } // 返回解析后的响应数据 return $response; } catch (\Exception $e) { // 捕获异常并打印 dump($e->getMessage()); throw $e; // 继续抛出异常 } } }