매우 간단하고 최소한의 추상화를 갖춘 MailChimp API v3 래퍼(PHP).
나는 복잡한 래퍼를 싫어합니다. 이를 통해 MailChimp API 문서에서 코드로 최대한 직접 이동할 수 있습니다.
PHP 5.3 및 펄스가 필요합니다. 추상화는 침팬지를 위한 것입니다.
Composer를 사용하여 mailchimp-api를 설치할 수 있습니다.
composer require drewm/mailchimp-api
그런 다음 다음을 수행해야 합니다.
공급업체 디렉토리에 이러한 종속성을 추가하려면 composer install
실행하세요.
다음 줄을 사용하여 애플리케이션에 자동 로더를 추가하세요: require("vendor/autoload.php")
또는 MailChimp.php
파일을 다운로드하여 수동으로 포함할 수도 있습니다.
include('./MailChimp.php');
일괄 요청 또는 웹훅 인터페이스를 사용하려면 Batch.php
또는 Webhook.php
파일도 다운로드하여 포함해야 합니다.
include('./Batch.php'); include('./Webhook.php');
이는 선택 사항입니다. 배치나 웹후크를 사용하지 않는 경우에는 건너뛰어도 됩니다. 나중에 언제든지 돌아와서 추가할 수 있습니다.
클래스를 use
하고 API 키로 인스턴스를 생성하여 시작하세요.
DrewMMailChimpMailChimp 사용;$MailChimp = new MailChimp('abc123abc123abc123abc123abc123-us1');
그런 다음 모든 메일링 리스트를 나열합니다( get
on lists
메소드 사용).
$result = $MailChimp->get('lists');print_r($result);
목록에 누군가를 구독합니다( lists/{listID}/members
메소드에 대한 post
포함).
$list_id = 'b1234346';$result = $MailChimp->post("lists/$list_id/members", [ 'email_address' => '[email protected]', 'status' => '구독됨', ]);print_r($result);
추가 정보로 목록 구성원을 업데이트합니다( patch
사용하여 업데이트).
$list_id = 'b1234346';$subscriber_hash = MailChimp::subscriberHash('[email protected]');$result = $MailChimp->patch("lists/$list_id/members/$subscriber_hash", [ 'merge_fields' = > ['FNAME'=>'데이비', 'LNAME'=>'존스'], '관심사' => ['2s3a384h' => 참], ]);print_r($result);
delete
메소드를 사용하여 목록 구성원을 제거합니다.
$list_id = 'b1234346';$subscriber_hash = MailChimp::subscriberHash('[email protected]');$MailChimp->delete("lists/$list_id/members/$subscriber_hash");
success()
메서드를 사용하여 성공적인 작업을 신속하게 테스트합니다.
$list_id = 'b1234346';$result = $MailChimp->post("lists/$list_id/members", [ 'email_address' => '[email protected]', 'status' => '구독됨', ]);if ($MailChimp->success()) { print_r($result); } else { echo $MailChimp->getLastError(); }
MailChimp 배치 작업 기능을 사용하면 단일 호출로 여러 작업을 완료할 수 있습니다. 좋은 예는 수천 명의 회원을 목록에 추가하는 것입니다. 수천 명이 아닌 한 번의 요청으로 이 작업을 수행할 수 있습니다.
DrewMMailChimpMailChimp 사용; DrewMMailChimpBatch 사용;$MailChimp = new MailChimp('abc123abc123abc123abc123abc123-us1');$Batch = $MailChimp->new_batch();
그런 다음 일반적으로 MailChimp
개체를 사용하는 것처럼 Batch
개체에 대해 요청할 수 있습니다. 차이점은 작업에 대한 ID를 첫 번째 인수로 설정해야 하며 응답을 받지 못한다는 것입니다. ID는 일괄 작업의 결합된 응답에서 이 요청의 결과를 찾는 데 사용됩니다.
$Batch->post("op1", "lists/$list_id/members", [ 'email_address' => '[email protected]', 'status' => '구독됨', ]);$Batch->post("op2", "lists/$list_id/members", [ 'email_address' => '[email protected]', 'status' => '구독됨', ]);$Batch->post("op3", "lists/$list_id/members", [ 'email_address' => '[email protected]', 'status' => '구독됨', ]);
배치에 포함되어야 하는 모든 요청을 완료한 후에는 이를 실행해야 합니다.
$result = $Batch->execute();
결과에는 배치 ID가 포함됩니다. 나중에 배치 상태를 확인할 수 있습니다.
$MailChimp->new_batch($batch_id);$result = $Batch->check_status();
배치가 완료되면 응답에 제공된 URL에서 결과를 다운로드할 수 있습니다. JSON에서 각 작업의 결과는 요청의 첫 번째 인수로 사용한 ID로 입력됩니다.
참고: Webhooks 기능을 사용하려면 PHP 5.4 이상이 필요합니다.
MailChimp 웹후크를 사용하면 목록 및 캠페인의 변경 사항을 코드에 알릴 수 있습니다.
웹후크를 설정할 때 데이터를 보낼 서버의 URL을 지정합니다. 이 래퍼의 Webhook 클래스는 들어오는 웹훅을 깔끔하게 잡는 데 도움이 됩니다. 이는 수신하려는 웹훅 이벤트를 코드가 구독하는 구독 모델을 사용합니다. 웹훅 데이터가 전달되는 콜백 함수를 제공합니다.
unsubscribe
웹훅을 수신하려면 다음 안내를 따르세요.
DrewMMailChimpWebhook을 사용하세요. 웹훅::subscribe('unsubscribe', function($data){ print_r($data); });
언뜻 보면 구독/구독 취소가 혼란스러워 보입니다. 코드가 MailChimp unsubscribe
웹훅 이벤트를 구독하고 있습니다. 콜백 함수는 단일 인수(웹훅 데이터가 포함된 연관 배열)로 전달됩니다.
모든 웹훅을 잡아서 직접 처리하려면 다음을 사용할 수 있습니다.
DrewMMailChimpWebhook;$result = Webhook::receive();print_r($result); 사용
웹훅 데이터의 내용에 대한 문서가 없는 것 같습니다. 개발 머신에 웹후크를 터널링하기 위해 ngrok와 같은 것을 사용하는 것이 도움이 됩니다. 그런 다음 해당 웹 인터페이스를 사용하여 전송된 내용을 검사하고 코드를 디버깅하는 동안 들어오는 웹후크를 재생할 수 있습니다.
HTTP 클라이언트 또는 API에서 반환된 마지막 오류를 가져오려면 getLastError()
사용하세요.
echo $MailChimp->getLastError();
추가 디버깅을 위해 응답의 헤더와 본문을 검사할 수 있습니다.
print_r($MailChimp->getLastResponse());
잘못된 형식으로 데이터를 보내고 있다고 의심되는 경우 래퍼가 MailChimp에 보낸 내용을 확인할 수 있습니다.
print_r($MailChimp->getLastRequest());
서버의 CA 루트 인증서가 최신이 아닌 경우 SSL 확인이 실패하고 응답을 받지 못할 수 있습니다. 이에 대한 수정 솔루션은 SSL 확인을 비활성화하지 않는 것입니다. 해결책은 인증서를 업데이트하는 것입니다. 그렇게 할 수 없다면 클래스 파일 상단에 옵션이 있습니다. 적어도 인증서 업데이트를 시도하지 않고 전원을 끄지 마십시오. 이는 게으르고 위험합니다. 당신은 게으르고 위험한 개발자가 아니죠?
프로젝트에 대한 높은 수준의 구현 질문이 있는 경우("이것을 WordPress에 어떻게 추가합니까?", "이메일 주소를 사용하는 양식이 있습니다...") StackOverflow와 같은 곳으로 가져 가세요. 버그를 발견했다고 생각하거나 변경 또는 개선에 대해 논의하고 싶다면 언제든지 문제를 제기해 주세요. 그러면 우리가 해결해 드리겠습니다.
이것은 매우 간단한 래퍼이지만 이를 사용하는 사람들의 기여로 훨씬 더 좋아졌습니다. 개선 사항을 제안하고 싶다면 끌어오기 요청을 하기 전에 문제를 제기하여 논의하세요.
버그에 대한 풀 요청은 매우 환영합니다. 메시지에서 수정하려는 버그에 대해 설명해주세요.
소수의 PHPUnit 단위 테스트가 있습니다. API에 대한 단위 테스트는 분명히 약간 까다롭지만 이에 대한 기여를 환영합니다. 테스트 범위가 더 넓으면 좋을 것 같습니다.