/** * refresh OAuth token * @param ShopInterface $shop * @return TokenInterface * @throws Exception */ public function refresh(ShopInterface $shop) { if (!$this->client) { throw new Exception('No client specified'); } $token = $shop->getToken(); $refreshToken = $token->getRefreshToken(); try { $this->client->setRefreshToken($refreshToken); $newToken = $this->client->refreshTokens(); $token->setExpiresAt(new \DateTime('+' . (int) $newToken['expires_in'] . ' seconds')); $token->setAccessToken($newToken['access_token']); $token->setRefreshToken($newToken['refresh_token']); $this->manager->save($token); } catch (ClientException $ex) { throw new Exception('', 0, $ex); } return $token; }
/** * shop installed an upgraded version * @param UpgradeEvent $event * @return bool */ public function onUpgrade(UpgradeEvent $event) { $shop = $this->getShopByEvent($event); if (!$shop) { return false; } // todo: refactor this on major change: push application object thru event $appData = $event->getApplication(); $app = new Application($event->getApplicationName(), $appData['app_id'], $appData['app_secret'], $appData['appstore_secret'], null, $this->skipSsl); $app->setUserAgent($appData['user_agent']); $this->tokenRefresher->setClient($app->getClient($shop)); $this->tokenRefresher->refresh($shop); $shop->setVersion($event->getPayload()['application_version']); $this->objectManager->save($shop); }