diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c9c3ee..167e153 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to project will be documented in this file. +## [2.2.0](https://github.com/rezozero/subscribeme/compare/2.1.0...2.2.0) - 2025-06-24 + +### Refactor + +- Remove Mailchimp API Secret usage and update authentication logic, doc associate, bruno files and tests - ([e7e92c1](https://github.com/rezozero/subscribeme/commit/e7e92c17021b87bcc4a9b89455cd17c82f831b6c)) - eliot lauger + ## [2.1.0](https://github.com/rezozero/subscribeme/compare/2.0.0...2.1.0) - 2025-01-21 ### Features diff --git a/README.md b/README.md index 34b5546..983988a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Unified Email Service Library: A simple mailing list subscriber factory that inc ## Supported platforms - Mailjet -- Mailchimp +- Mailchimp (use Mandrill for transactional emails) - Brevo (ex SendInBlue) - Brevo DOI (Double Opt-In) (ex SendInBlue) - YMLP @@ -171,8 +171,7 @@ $subscriber->subscribe( ```php $subscriber = $factory->createFor('mailchimp'); -$subscriber->setApiKey('your_username'); -$subscriber->setApiSecret('xxxx'); +$subscriber->setApiKey('your_api_key'); $subscriber->setContactListId('xxxx'); // Set you account datacenter $subscriber->setDc('us19'); @@ -184,6 +183,7 @@ $subscriber->setPending(); ### Mailchimp options sender transactional email +Mailchimp use Mandrill api for his transactional emails See https://mailchimp.com/developer/transactional/api/messages/send-using-message-template/ ```php diff --git a/bruno/subscribeme/MailChimp/Add member to list.bru b/bruno/subscribeme/MailChimp/Add member to list.bru index 769e494..4ebb68b 100644 --- a/bruno/subscribeme/MailChimp/Add member to list.bru +++ b/bruno/subscribeme/MailChimp/Add member to list.bru @@ -15,12 +15,12 @@ params:path { } auth:basic { - username: {{mailchimp_login}} - password: {{mailchimp_password}} + username: anystring + password: {{mailchimp_api_key}} } body:json { { "email_address": "john.smith@contact.com" } -} \ No newline at end of file +} diff --git a/bruno/subscribeme/MailChimp/Get all lists.bru b/bruno/subscribeme/MailChimp/Get all lists.bru index ab360a9..c3421d3 100644 --- a/bruno/subscribeme/MailChimp/Get all lists.bru +++ b/bruno/subscribeme/MailChimp/Get all lists.bru @@ -11,6 +11,6 @@ get { } auth:basic { - username: {{mailchimp_login}} - password: {{mailchimp_password}} -} \ No newline at end of file + username: anystring + password: {{mailchimp_api_key}} +} diff --git a/bruno/subscribeme/MailChimp/List members info.bru b/bruno/subscribeme/MailChimp/List members info.bru index 436f97d..2718736 100644 --- a/bruno/subscribeme/MailChimp/List members info.bru +++ b/bruno/subscribeme/MailChimp/List members info.bru @@ -10,7 +10,11 @@ get { auth: basic } +params:path { + listId: 558e7afb37 +} + auth:basic { - username: {{mailchimp_login}} - password: {{mailchimp_password}} + username: anystring + password: {{mailchimp_api_key}} } diff --git a/bruno/subscribeme/environments/PROD.bru b/bruno/subscribeme/environments/PROD.bru index 0ea83ee..6e62099 100644 --- a/bruno/subscribeme/environments/PROD.bru +++ b/bruno/subscribeme/environments/PROD.bru @@ -2,7 +2,7 @@ vars { oximailing_base_url: https://api.oximailing.com mailjet_base_url: https://api.mailjet.com brevo_base_url: https://api.brevo.com - mailchimp_base_url: https://us16.api.mailchimp.com/3.0 + mailchimp_base_url: https://us15.api.mailchimp.com/3.0 } vars:secret [ oximailing_login, @@ -11,6 +11,5 @@ vars:secret [ mailjet_password, brevo_login, brevo_password, - mailchimp_login, - mailchimp_password + mailchimp_api_key ] diff --git a/src/SubscribeMe/Subscriber/MailchimpSubscriber.php b/src/SubscribeMe/Subscriber/MailchimpSubscriber.php index 626c64b..1768139 100644 --- a/src/SubscribeMe/Subscriber/MailchimpSubscriber.php +++ b/src/SubscribeMe/Subscriber/MailchimpSubscriber.php @@ -61,10 +61,6 @@ public function subscribe(string $email, array $options, array $userConsents = [ throw new ApiCredentialsException(); } - if (!is_string($this->getApiSecret())) { - throw new ApiCredentialsException(); - } - if (!is_string($this->getContactListId())) { throw new CannotSubscribeException('Contact list id is required for subscribe'); } @@ -105,7 +101,7 @@ public function subscribe(string $email, array $options, array $userConsents = [ ->withBody($bodyStreamed) ->withAddedHeader('Content-Type', 'application/json') ->withAddedHeader('User-Agent', 'rezozero/subscribeme') - ->withAddedHeader('Authorization', 'Basic '.base64_encode(sprintf('%s:%s', $this->getApiKey(), $this->getApiSecret()))); + ->withAddedHeader('Authorization', 'Basic '.base64_encode(sprintf('anystring:%s', $this->getApiKey()))); $res = $this->getClient()->sendRequest($request); diff --git a/tests/MailchimpMailerTest.php b/tests/MailchimpMailerTest.php index c427a50..e01ed53 100644 --- a/tests/MailchimpMailerTest.php +++ b/tests/MailchimpMailerTest.php @@ -31,7 +31,6 @@ public function testSubscribe(): void $mailchimpSubscriber->setContactListId('1'); $mailchimpSubscriber->setApiKey('3f62c1f4-efb7-4bc7-b76d-0c2217d307b0'); - $mailchimpSubscriber->setApiSecret('df30148e-6cda-43ae-8665-9904f5f4f12a'); $returnCode = $mailchimpSubscriber->subscribe("jdoe@example.com", []); $requests = $client->getRequests(); @@ -47,7 +46,7 @@ public function testSubscribe(): void $this->assertCount(1, $requests); $content = $requests[0]->getBody()->getContents(); $this->assertEquals('application/json', $requests[0]->getHeaders()['Content-Type'][0]); - $this->assertEquals('Basic ' . base64_encode(sprintf('%s:%s', '3f62c1f4-efb7-4bc7-b76d-0c2217d307b0', 'df30148e-6cda-43ae-8665-9904f5f4f12a')), $requests[0]->getHeaders()['Authorization'][0]); + $this->assertEquals('Basic ' . base64_encode(sprintf('%s:%s', 'anystring', '3f62c1f4-efb7-4bc7-b76d-0c2217d307b0')), $requests[0]->getHeaders()['Authorization'][0]); $this->assertEquals('rezozero/subscribeme', $requests[0]->getHeaders()['User-Agent'][0]); $this->assertEquals('POST', $requests[0]->getMethod()); $this->assertJsonStringEqualsJsonString($body ?: '{}', $content); @@ -69,7 +68,6 @@ public function testSubscribeWithMemberExist(): void $mailchimpSubscriber->setContactListId('1'); $mailchimpSubscriber->setApiKey('3f62c1f4-efb7-4bc7-b76d-0c2217d307b0'); - $mailchimpSubscriber->setApiSecret('df30148e-6cda-43ae-8665-9904f5f4f12a'); $returnCode = $mailchimpSubscriber->subscribe("jdoe@example.com", []); $requests = $client->getRequests(); @@ -85,7 +83,7 @@ public function testSubscribeWithMemberExist(): void $this->assertCount(1, $requests); $content = $requests[0]->getBody()->getContents(); $this->assertEquals('application/json', $requests[0]->getHeaders()['Content-Type'][0]); - $this->assertEquals('Basic ' . base64_encode(sprintf('%s:%s', '3f62c1f4-efb7-4bc7-b76d-0c2217d307b0', 'df30148e-6cda-43ae-8665-9904f5f4f12a')), $requests[0]->getHeaders()['Authorization'][0]); + $this->assertEquals('Basic ' . base64_encode(sprintf('%s:%s', 'anystring', '3f62c1f4-efb7-4bc7-b76d-0c2217d307b0')), $requests[0]->getHeaders()['Authorization'][0]); $this->assertEquals('rezozero/subscribeme', $requests[0]->getHeaders()['User-Agent'][0]); $this->assertEquals('POST', $requests[0]->getMethod()); $this->assertJsonStringEqualsJsonString($body ?: '{}', $content); @@ -107,7 +105,6 @@ public function testSubscribeWithoutId(): void $mailchimpSubscriber->setContactListId('1'); $mailchimpSubscriber->setApiKey('3f62c1f4-efb7-4bc7-b76d-0c2217d307b0'); - $mailchimpSubscriber->setApiSecret('df30148e-6cda-43ae-8665-9904f5f4f12a'); $returnCode = $mailchimpSubscriber->subscribe("jdoe@example.com", []); $requests = $client->getRequests(); @@ -122,7 +119,7 @@ public function testSubscribeWithoutId(): void $this->assertCount(1, $requests); $content = $requests[0]->getBody()->getContents(); $this->assertEquals('application/json', $requests[0]->getHeaders()['Content-Type'][0]); - $this->assertEquals('Basic ' . base64_encode(sprintf('%s:%s', '3f62c1f4-efb7-4bc7-b76d-0c2217d307b0', 'df30148e-6cda-43ae-8665-9904f5f4f12a')), $requests[0]->getHeaders()['Authorization'][0]); + $this->assertEquals('Basic ' . base64_encode(sprintf('%s:%s', 'anystring', '3f62c1f4-efb7-4bc7-b76d-0c2217d307b0')), $requests[0]->getHeaders()['Authorization'][0]); $this->assertEquals('rezozero/subscribeme', $requests[0]->getHeaders()['User-Agent'][0]); $this->assertEquals('POST', $requests[0]->getMethod()); $this->assertJsonStringEqualsJsonString($body ?: '{}', $content); @@ -248,7 +245,6 @@ public function testVariablesException(): void $factory = new Psr17Factory(); $mailchimpSubscriber = new MailchimpSubscriber($client, $factory, $factory); $mailchimpSubscriber->setApiKey('3f62c1f4-efb7-4bc7-b76d-0c2217d307b0'); - $mailchimpSubscriber->setApiSecret('df30148e-6cda-43ae-8665-9904f5f4f12a'); $emails = [ new EmailAddress('jdoe@example.com', 'John Doe') ];