VoucherClient.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace ACES\Core;
  3. use ACES\Common\Constants;
  4. use ACES\Common\domain\JosBaseInfo;
  5. use ACES\Common\domain\JosBaseResponse;
  6. use ACES\Common\domain\JosVoucherInfoGetRequest;
  7. use ACES\Common\domain\JosVoucherInfoGetResponse;
  8. use ACES\Common\Exception\JosGwException;
  9. use ACES\Common\Exception\VoucherInfoGetException;
  10. use ACES\Common\HttpsClient;
  11. use ACES\Common\Token;
  12. use Exception;
  13. use Monolog\Formatter\LineFormatter;
  14. use Monolog\Handler\StreamHandler;
  15. use Monolog\Logger;
  16. if(!defined("LOGCONSOLE")){
  17. define("LOGCONSOLE", __DIR__."/../../../tde.log");
  18. }
  19. if(!defined("LOGLEVEL")){
  20. define("LOGLEVEL", Logger::DEBUG);
  21. }
  22. class VoucherClient
  23. {
  24. private $log;
  25. /**
  26. * @var Token
  27. */
  28. private $voucher;
  29. private $voucherStr;
  30. private $josBaseInfo;
  31. /**
  32. * VoucherClient constructor.
  33. * @param JosBaseInfo $josBaseInfo
  34. */
  35. public function __construct($josBaseInfo)
  36. {
  37. // confige log
  38. $this->log = new Logger('kmclient');
  39. $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message%\r\n");
  40. $handle = new StreamHandler(LOGCONSOLE, LOGLEVEL);
  41. $handle->setFormatter($formatter);
  42. $this->log->pushHandler($handle);
  43. $this->josBaseInfo = $josBaseInfo;
  44. }
  45. /**
  46. * @return Token
  47. * @throws \ACES\Common\Exception\InvalidTokenException
  48. * @throws \ACES\Common\Exception\MalformedException
  49. */
  50. public function requestVoucher()
  51. {
  52. $voucherBase64Json = $this->requestVoucherString();
  53. $voucherJson = base64_decode($voucherBase64Json);
  54. $this->voucher = Token::parseFromString($voucherJson, true);
  55. return $this->voucher;
  56. }
  57. public function requestVoucherString()
  58. {
  59. $requestUrl = $this->josBaseInfo->getServerUrl() . '/routerjson';
  60. $josVoucherInfoGetRequest = new JosVoucherInfoGetRequest($this->josBaseInfo->getAccessToken());
  61. $payload = $josVoucherInfoGetRequest->toFormParams($this->josBaseInfo);
  62. $this->log->info('voucher request url -> ' . $requestUrl . ', payload -> ' . json_encode($payload));
  63. $jsonResponse = HttpsClient::postForm($requestUrl, $payload);
  64. $response = JosBaseResponse::parse($jsonResponse, new JosVoucherInfoGetResponse());
  65. if (!$response){
  66. throw new Exception('request jos error, while request voucher');
  67. }
  68. if ($response->getCode() !== 0) {
  69. throw new JosGwException('request jos error, while request voucher, code=' . $response->getCode() . ', message=' . $response->getEnDesc());
  70. }
  71. $voucherResponse = $response->getResponse();
  72. if (!$voucherResponse) {
  73. throw new VoucherInfoGetException('request voucher failed');
  74. }
  75. if ($voucherResponse->getErrorCode() !== '0') {
  76. throw new VoucherInfoGetException('request voucher failed, code=' . $voucherResponse->getErrorCode() . ', message=' . $voucherResponse->getErrorMsg());
  77. }
  78. $voucherBase64Json = $voucherResponse->getData()->getVoucher();
  79. $this->log->info("request voucher success, voucher=" . $voucherBase64Json);
  80. $this->voucherStr = $voucherBase64Json;
  81. return$voucherBase64Json;
  82. }
  83. /**
  84. * @return Token
  85. */
  86. public function getVoucher()
  87. {
  88. return $this->voucher;
  89. }
  90. /**
  91. * @return bool
  92. */
  93. public function checkEffective()
  94. {
  95. return $this->voucher->check_effective();
  96. }
  97. /**
  98. * @return int
  99. */
  100. public function checkExpired()
  101. {
  102. return $this->voucher->check_expired(Constants::TOKEN_EXP_DELTA);
  103. }
  104. /**
  105. * @return string
  106. */
  107. public function getTid()
  108. {
  109. return $this->getVoucher() == null ? "Unknown TID" : $this->getVoucher()->get_id();
  110. }
  111. /**
  112. * @return string
  113. */
  114. public function getServiceName()
  115. {
  116. return $this->getVoucher() == null ? "Unknown Service" : $this->getVoucher()->get_service_name();
  117. }
  118. /**
  119. * @return string
  120. */
  121. public function getOriginType()
  122. {
  123. return $this->getVoucher() == null ? "Unknown OriginType" : $this->getVoucher()->get_service_name();
  124. }
  125. /**
  126. * @return string
  127. */
  128. public function getEffectiveDate()
  129. {
  130. return $this->getVoucher()->getEffectiveDate();
  131. }
  132. /**
  133. * @return string
  134. */
  135. public function getExpiredDate()
  136. {
  137. return $this->getVoucher()->getExpiredDate();
  138. }
  139. }