Spaces:
No application file
No application file
namespace MauticPlugin\MauticEmailMarketingBundle\Api; | |
use Mautic\PluginBundle\Exception\ApiErrorException; | |
class MailchimpApi extends EmailMarketingApi | |
{ | |
private string $version = '3.0'; | |
/** | |
* @param array $parameters | |
* @param string $method | |
* | |
* @return mixed|string | |
* | |
* @throws ApiErrorException | |
*/ | |
protected function request($endpoint, $parameters = [], $method = 'GET') | |
{ | |
if (isset($this->keys['password'])) { | |
// Extract the dc from the key | |
$parts = explode('-', $this->keys['password']); | |
if (2 !== count($parts)) { | |
throw new ApiErrorException('Invalid key'); | |
} | |
$dc = $parts[1]; | |
$apiUrl = 'https://'.$dc.'.api.mailchimp.com'; | |
$parameters['apikey'] = $this->keys['password']; | |
} else { | |
$apiUrl = $this->keys['api_endpoint']; | |
$parameters['apikey'] = $this->keys['access_token']; | |
} | |
$url = sprintf('%s/%s/%s', $apiUrl, $this->version, $endpoint); | |
$response = $this->integration->makeRequest($url, $parameters, $method, ['encode_parameters' => 'json']); | |
if (is_array($response) && !empty($response['status']) && 'error' == $response['status']) { | |
throw new ApiErrorException($response['error']); | |
} elseif (is_array($response) && !empty($response['errors'])) { | |
$errors = []; | |
foreach ($response['errors'] as $error) { | |
$errors[] = $error['message']; | |
} | |
throw new ApiErrorException(implode(' ', $errors)); | |
} else { | |
return $response; | |
} | |
} | |
public function getLists() | |
{ | |
return $this->request('lists', ['limit' => 100]); | |
} | |
/** | |
* @return mixed|string | |
* | |
* @throws ApiErrorException | |
*/ | |
public function getCustomFields($listId) | |
{ | |
return $this->request('lists/'.$listId.'/merge-fields'); | |
} | |
/** | |
* @param array $fields | |
* @param array $config | |
* | |
* @return mixed|string | |
* | |
* @throws ApiErrorException | |
*/ | |
public function subscribeLead($email, $listId, $fields = [], $config = []) | |
{ | |
$emailStruct = new \stdClass(); | |
$emailStruct->email = $email; | |
$parameters = array_merge($config, [ | |
'id' => $listId, | |
]); | |
if (!empty($fields)) { | |
$parameters = array_merge($parameters, ['merge_fields' => $fields]); | |
} | |
$parameters['email_address'] = $email; | |
return $this->request('lists/'.$listId.'/members', $parameters, 'POST'); | |
} | |
} | |