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.
 
 
 
 
 

93 lines
1.8 KiB

<?php
namespace WCML\MultiCurrency\ExchangeRateServices;
use WPML\FP\Obj;
abstract class ApiLayerService extends Service {
/**
* @return string
*/
abstract protected function getApiLayerUrl();
/**
* @return string
*/
abstract protected function getApiLegacyUrl();
/**
* @return string
*/
public function getApiUrl() {
return $this->getSelectedApiEndpoint();
}
/**
* @return void
*/
public function resetConnectionCache() {
$this->setSelectedApiEndpoint( null );
}
/**
* @param string|null $endpoint
*
* @return void
*/
private function setSelectedApiEndpoint( $endpoint ) {
$this->saveSetting( 'selected-endpoint', $endpoint );
}
/**
* @return string|null
*/
private function getSelectedApiEndpoint() {
return $this->getSetting( 'selected-endpoint' );
}
/**
* @param string $from The base currency code.
* @param array $tos The target currency codes.
*
* @return array|\WP_Error
*/
protected function makeRequest( $from, $tos ) {
if ( $this->getSelectedApiEndpoint() ) {
$response = parent::makeRequest( $from, $tos );
} else {
$this->setSelectedApiEndpoint( $this->getApiLayerUrl() );
$response = parent::makeRequest( $from, $tos );
if ( $this->isWrongAuthenticationWithApiLayer( $response ) ) {
$this->setSelectedApiEndpoint( $this->getApiLegacyUrl() );
$response = parent::makeRequest( $from, $tos );
}
}
return $response;
}
/**
* @param object $data
*
* @return bool
*/
private function isWrongAuthenticationWithApiLayer( $data ) {
return Obj::path( [ 'response', 'code' ], $data ) === 401;
}
/**
* @return array
*/
protected function getRequestHeaders() {
return [ 'apikey' => $this->getApiKey() ];
}
/**
* @return bool
*/
public function isKeyRequired() {
return true;
}
}