* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\PsAccounts\Api\Client; use GuzzleHttp\Client; use PrestaShop\Module\PsAccounts\Adapter\Link; use PrestaShop\Module\PsAccounts\Exception\OptionResolutionException; use PrestaShop\Module\PsAccounts\Provider\ShopProvider; use PrestaShop\Module\PsAccounts\Service\PsAccountsService; /** * Handle call api Services */ class ServicesBillingClient extends GenericClient { /** * ServicesBillingClient constructor. * * @param string $apiUrl * @param PsAccountsService $psAccountsService * @param ShopProvider $shopProvider * @param Link $link * @param Client|null $client * * @throws OptionResolutionException * @throws \PrestaShopException * @throws \Exception */ public function __construct( $apiUrl, PsAccountsService $psAccountsService, ShopProvider $shopProvider, Link $link, Client $client = null ) { parent::__construct(); $shopId = $shopProvider->getCurrentShop()['id']; $token = $psAccountsService->getOrRefreshToken(); $this->setLink($link->getLink()); // Client can be provided for tests if (null === $client) { $client = new Client([ 'base_url' => $apiUrl, 'defaults' => [ 'timeout' => $this->timeout, 'exceptions' => $this->catchExceptions, 'headers' => [ // Commented, else does not work anymore with API. //'Content-Type' => 'application/vnd.accounts.v1+json', // api version to use 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . (string) $token, 'Shop-Id' => $shopId, 'Module-Version' => \Ps_accounts::VERSION, // version of the module 'Prestashop-Version' => _PS_VERSION_, // prestashop version ], ], ]); } $this->setClient($client); } /** * @param mixed $shopUuidV4 * * @return array|false */ public function getBillingCustomer($shopUuidV4) { $this->setRoute('/shops/' . $shopUuidV4); return $this->get(); } /** * @param mixed $shopUuidV4 * @param array $bodyHttp * * @return array|false */ public function createBillingCustomer($shopUuidV4, $bodyHttp) { $this->setRoute('/shops/' . $shopUuidV4); return $this->post([ 'body' => $bodyHttp, ]); } /** * @param mixed $shopUuidV4 * @param string $module * * @return array|false */ public function getBillingSubscriptions($shopUuidV4, $module) { $this->setRoute('/shops/' . $shopUuidV4 . '/subscriptions/' . $module); return $this->get(); } /** * @param mixed $shopUuidV4 * @param string $module * @param array $bodyHttp * * @return array|false */ public function createBillingSubscriptions($shopUuidV4, $module, $bodyHttp) { $this->setRoute('/shops/' . $shopUuidV4 . '/subscriptions/' . $module); return $this->post([ 'body' => $bodyHttp, ]); } }