/** * cancel a subscription * * @param CancelSubscriptionRequest|array|string $packageNameOrRequestOrArray * @param string|null $subscriptionId * @param string|null $purchaseToken * @return \Nikapps\BazaarApiPhp\Models\Responses\CancelSubscription * @throws ExpiredAccessTokenException * @throws \Nikapps\BazaarApiPhp\Exceptions\InvalidPackageNameException * @throws \Nikapps\BazaarApiPhp\Exceptions\InvalidTokenException * @throws \Nikapps\BazaarApiPhp\Exceptions\NetworkErrorException * @throws \Nikapps\BazaarApiPhp\Exceptions\NotFoundException * @throws \Nikapps\BazaarApiPhp\Exceptions\InvalidJsonException */ public function cancelSubscription($packageNameOrRequestOrArray, $subscriptionId = null, $purchaseToken = null) { $cancelSubscriptionRequest = $this->makeCancelSubscriptionRequest($packageNameOrRequestOrArray, $subscriptionId, $purchaseToken); try { return $this->bazaarApi->cancelSubscription($cancelSubscriptionRequest); } catch (ExpiredAccessTokenException $e) { if (!$this->config->get('bazaar-api-laravel::api.auto_refresh_token')) { //auto refresh token is disabled throw new ExpiredAccessTokenException(); } else { //refresh access token $this->refreshToken(); //retry request return $this->cancelSubscription($cancelSubscriptionRequest); } } }