manuelvilche/mailchimp

简单,最小抽象的 MailChimp API v3 封装器

v1.2 2017-12-10 17:34 UTC

This package is auto-updated.

Last update: 2024-09-13 14:16:43 UTC


README

简单,最小抽象的 MailChimp API v3 封装器,用 PHP 实现。

我讨厌复杂的封装器。这可以让您尽可能直接地从 MailChimp API 文档跳转到代码。

需要 PHP 5.3 及以上版本。抽象是给猴子的。

Packagist

安装

您可以使用 Composer 安装 mailchimp

composer require manuelvilche/mailchimp

使用发布命令将包配置复制到您的本地配置文件

'Mailchimp' => Manuelvilche\Mailchimp\Facade::class,

Laravel 5.5+

如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php 中的 providers 数组

Manuelvilche\Mailchimp\ServiceProvider::class,

如果您想使用外观来记录消息,请将此添加到您的 app.php 中的 facades

'Mailchimp' => Manuelvilche\Mailchimp\Facade::class,

示例

首先使用 use 引入类并使用您的 API 密钥创建一个实例

use \Manuelvilche\MailChimp\MailChimp;

$mailchimp = new MailChimp();

然后,列出所有邮件列表(在 lists 方法上使用 get 方法)

$result = $mailchimp->get('lists');

print_r($result);

将某人订阅到列表(使用 post 方法到 lists/{listID}/members 方法)

$list_id = 'b1234346';

$result = $mailchimp->post("lists/$list_id/members", [
				'email_address' => 'davy@example.com',
				'status'        => 'subscribed',
			]);

print_r($result);

使用 patch 更新信息来更新列表成员

$list_id = 'b1234346';
$subscriber_hash = $mailchimp->subscriberHash('davy@example.com');

$result = $mailchimp->patch("lists/$list_id/members/$subscriber_hash", [
				'merge_fields' => ['FNAME'=>'Davy', 'LNAME'=>'Jones'],
				'interests'    => ['2s3a384h' => true],
			]);

print_r($result);

使用 delete 方法删除列表成员

$list_id = 'b1234346';
$subscriber_hash = $mailchimp->subscriberHash('davy@example.com');

$mailchimp->delete("lists/$list_id/members/$subscriber_hash");

使用 success() 方法快速测试操作是否成功

$list_id = 'b1234346';

$result = $mailchimp->post("lists/$list_id/members", [
				'email_address' => 'davy@example.com',
				'status'        => 'subscribed',
			]);

if ($mailchimp->success()) {
	print_r($result);
} else {
	echo $mailchimp->getLastError();
}

批量操作

MailChimp 的 批量操作 功能允许您通过单个调用完成多个操作。一个很好的例子是将数千名成员添加到列表中 - 您可以在一个请求中完成此操作,而不是数千个。

use \Manuelvilche\MailChimp\MailChimp;
use \Manuelvilche\MailChimp\Batch;

$mailchimp = new MailChimp('abc123abc123abc123abc123abc123-us1');
$Batch 	   = $mailchimp->new_batch();

然后,您可以像通常使用 MailChimp 对象一样在 Batch 对象上发出请求。区别在于您需要将操作 ID 设置为第一个参数,并且您不会收到响应。ID 用于在批量操作的组合响应中找到此请求的结果。

$Batch->post("op1", "lists/$list_id/members", [
				'email_address' => 'micky@example.com',
				'status'        => 'subscribed',
			]);

$Batch->post("op2", "lists/$list_id/members", [
				'email_address' => 'michael@example.com',
				'status'        => 'subscribed',
			]);

$Batch->post("op3", "lists/$list_id/members", [
				'email_address' => 'peter@example.com',
				'status'        => 'subscribed',
			]);

一旦完成所有应包含在批量中的请求,就需要执行它。

$result = $Batch->execute();

结果包括批量 ID。稍后,您可以检查批量的状态

$mailchimp->new_batch($batch_id);
$result = $Batch->check_status();

当批量完成时,您可以从响应中给出的 URL 下载结果。在 JSON 中,每个操作的结果将根据您作为请求的第一个参数使用的 ID 进行索引。

Webhooks

注意:使用 Webhooks 功能需要至少 PHP 5.4。

MailChimp webhooks 允许您的代码在列表和活动发生变化时得到通知。

设置 webhook 时,您指定一个 URL,数据将被发送到您的服务器。此封装器的 Webhook 类可以帮助您以一种整洁的方式捕获传入的 webhook。它使用订阅模型,您的代码订阅它想要监听的任何 webhook 事件。您提供一个回调函数,webhook 数据将传递给它。

监听 unsubscribe webhook

use \Manuelvilche\MailChimp\Webhook;

Webhook::subscribe('unsubscribe', function($data){
	print_r($data);
});

乍一看,subscribe/unsubscribe 可能看起来很混乱 - 您的代码正在订阅 MailChimp 的 unsubscribe webhook 事件。回调函数作为单个参数传递 - 包含 webhook 数据的关联数组。

如果您只想捕获所有 webhook 并自己处理,可以使用

use \Manuelvilche\MailChimp\Webhook;

$result = Webhook::receive();
print_r($result);

似乎没有关于 webhook 数据内容的文档。使用类似 ngrok 的工具进行隧道传输 webhook 到您的开发机器会有所帮助 - 您可以使用它的 Web 界面来检查发送的内容,并在调试代码时重放传入的 webhook。

故障排除

要获取HTTP客户端或API返回的最后一个错误,请使用getLastError()

echo $mailchimp->getLastError();

为了进一步调试,您可以检查响应的头和体

print_r($mailchimp->getLastResponse());

如果您怀疑您发送的数据格式不正确,您可以查看包装器发送给MailChimp的内容

print_r($mailchimp->getLastRequest());

如果您的服务器CA根证书未更新,您可能会发现SSL验证失败并且没有收到响应。这个问题的纠正解决方案不是禁用SSL验证。解决方案是更新您的证书。如果您无法这样做,类文件顶部有一个选项。请不要在没有至少尝试更新您的证书的情况下直接关闭它——这是懒惰且危险的。你不是懒惰、危险的开发者,对吧?

贡献

这是一个相当简单的包装器,但由于使用者的贡献而变得更好。如果您想建议改进,请在提交pull request之前提出一个issue进行讨论。

欢迎提交修复bug的pull requests - 请在消息中解释您试图修复的bug。

有少量PHPUnit单元测试。要开始运行,将.env.example复制到.env并添加您的API密钥详细信息。针对API进行单元测试显然有些棘手,但我欢迎任何对此的贡献。拥有更多的测试覆盖率将非常棒。