85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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($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; // 继续抛出异常
 | ||
|         }
 | ||
|     }
 | ||
| }
 | ||
| 
 |