ApiService.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace addons\QiJuhe\common\service;
  3. use addons\QiJuhe\common\api\Api;
  4. use addons\QiJuhe\common\models\SettingModel;
  5. use addons\QiJuhe\common\models\SupplysModel;
  6. use yii\base\BaseObject;
  7. class ApiService extends BaseObject
  8. {
  9. public $mall_id;
  10. public $supply_id;
  11. /**
  12. * @var array[Api]
  13. */
  14. public static $client = [];
  15. /**
  16. * @var SettingModel
  17. */
  18. protected $model;
  19. public function __construct($config = [])
  20. {
  21. parent::__construct($config);
  22. !empty($config['supply_id']) && $this->model = SupplysModel::findOne(['id' => $config['supply_id']]);
  23. }
  24. /**
  25. * 获取调用接口API
  26. *
  27. * @param integer $mall_id
  28. * @param integer $supply_id
  29. * @return Api
  30. */
  31. public static function getConnect($mall_id = 0, $supply_id = 0): Api
  32. {
  33. $model = null;
  34. if (!empty($supply_id) && is_null($model)) {
  35. $model = SupplysModel::find()->cache(5)->where(['id' => $supply_id])->one();
  36. }
  37. if (!empty($mall_id) && is_null($model)) {
  38. $model = SupplysModel::find()->cache(5)->where(['mall_id' => $mall_id])->orderBy('id asc')->one();
  39. }
  40. if (self::_isInvalid($model)) {
  41. return self::$client[$model->id];
  42. }
  43. self::$client[$model->id] = $client = new Api([
  44. 'mall_id' => $model->mall_id,
  45. 'supply_id' => $model->id,
  46. 'app_key' => $model->app_key,
  47. 'app_secret' => $model->app_secret,
  48. 'app_host' => $model->app_host,
  49. 'token' => self::getToken($model),
  50. ]);
  51. return $client;
  52. }
  53. /**
  54. * 重新获取token
  55. *
  56. * @param SupplysModel $model
  57. * @return string
  58. */
  59. private static function getToken(SupplysModel $model)
  60. {
  61. // 过期或者不存在,重新获取
  62. $api = new Api([
  63. 'mall_id' => $model->mall_id,
  64. 'supply_id' => $model->id,
  65. 'app_key' => $model->app_key,
  66. 'app_secret' => $model->app_secret,
  67. 'app_host' => $model->app_host,
  68. ]);
  69. try {
  70. $data = $api->getToken();
  71. SupplysModel::updateAll([
  72. 'token' => $data['token'],
  73. 'expire_time' => ($data['expiresAt'] / 1000) - 3600,
  74. ], ['id' => $model->id]);
  75. return $data['token'];
  76. } catch (\Exception $e) {
  77. \Yii::error($e);
  78. return false;
  79. }
  80. }
  81. /**
  82. * 通过model判断是否有效
  83. *
  84. * @param SupplysModel $model
  85. * @return boolean
  86. */
  87. private static function _isInvalid(SupplysModel $model)
  88. {
  89. return (
  90. isset(self::$client[$model->id])
  91. && bcsub($model->expire_time, 86400) > time()
  92. && $model->token
  93. )
  94. ? true
  95. : false;
  96. }
  97. }