You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.2 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. <?php
  2. namespace App\Service;
  3. use App\Constants\ErrorCode;
  4. use App\Exception\SsdbException;
  5. use Hyperf\Utils\ApplicationContext;
  6. use App\TaskWorker\SSDBTask;
  7. class ParamsTokenSsdbService implements ParamsTokenServiceInterface
  8. {
  9. const HASH_PREFIX = 'params_token_';
  10. public function generate($params)
  11. {
  12. $token = md5(json_encode($params));
  13. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  14. $kvs = [];
  15. foreach ($params as $key => $value) {
  16. $kvs[] = $key;
  17. $kvs[] = $value;
  18. }
  19. if(false === $ssdb->exec('multi_hset', self::HASH_PREFIX.$token, $kvs)) {
  20. throw new SsdbException(ErrorCode::SSDB_ERROR, 'token生成失败');
  21. }
  22. return $token;
  23. }
  24. public function analyze($token)
  25. {
  26. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  27. $params = $ssdb->exec('hgetall', self::HASH_PREFIX.$token);
  28. if (false === $params) {
  29. throw new SsdbException(ErrorCode::SSDB_ERROR, 'token解析失败');
  30. }
  31. if (empty($params)) {
  32. throw new SsdbException(ErrorCode::SSDB_ERROR, 'token不存在');
  33. }
  34. return $params;
  35. }
  36. }