mailchimp:如何为特定列表成员设置合并 var 值
mailchimp: how to set a merge var value for a specific list member
我应该使用 mailchimp 中的什么 API 来为特定列表成员设置合并 var 值?
如果我要添加新的列表成员,我可以使用 lists/subscribe 为该新成员设置合并 var 值。但是,如果列表成员已经存在,我没有看到 API 来更改值。
API lists/merge-var-set 设置所有列表成员的值。 lists/merge-var-update 为合并变量设置属性。
设置特定值的API是什么?
在 APIv2 中,您仍然使用 lists/subscribe
,但您也传递了 update_existing
。这是 considerably more intuitive in APIv3,您应该尽可能使用它,因为 2.0 已正式弃用。
在 Mailchimp API v3 中,您可以这样设置合并字段值:
PUT {api_endpoint}/3.0/lists/{list_id}/members/{member_hash}
{
"merge_fields": {
"BIRTHDAY": "01/23"
}
}
其中 {member_hash}
是成员电子邮件地址的 md5 哈希值。
您不必提供所有合并字段。 Mailchimp 将仅更新您指定的内容。
我花了一些时间在这个着陆区上转了一圈。也许 v3 api Mailchimp, update lists member merge_field key value pair php class 会帮助某人澄清这一点。
这似乎是不言自明的,但如果有不清楚的地方告诉我,我会很高兴;我很乐意更新此 post 以进行澄清。
总之,lukasz-wiktor的回答是正确的;但是,我显然陷入了 curl
php passthru
命令所需的转义。请注意,下面 mc::get_url()
方法中的 addslashes()
解决了我的问题。
<?php
// v3 api http basic authentication
class mc {
public $show_cmd = 1;
function __construct($api_key) {
$this->api_key = $api_key;
}
function update_member_merge_field($list_id, $mem_id, $fld, $val) {
//lists/{list_id}/members/{subscriber_hash}
$uri = 'lists/'.$list_id.'/members/'.$mem_id;
$data = array(
'merge_fields' => array(
$fld => $val,
)
);
$json = $this->get_url($uri, 'PATCH', $data);
die('<pre>'.print_r($json->merge_fields,true).PHP_EOL);
}
function get_list_members($list_id, $show_everything=0) {
//lists/{list_id}
$uri = 'lists/'.$list_id.'/members';
$json = $this->get_url($uri);
if (empty($json->members)) {
exit('hmmm, do you have any members in this list?'.PHP_EOL);
} else {
foreach ($json->members as &$mem) {
echo ' use id "'.$mem->id.'" for member "'.substr($mem->email_address, 0, 100).PHP_EOL;
}
}
if (! empty($show_everything)) {
die('<pre>'.print_r($json,true).PHP_EOL);
}
}
function get_lists($show_everything=0) {
//lists
$uri = 'lists/';
$json = $this->get_url($uri);
if (empty($json->lists)) {
exit('hmmm, do you have any lists?'.PHP_EOL);
} else {
foreach ($json->lists as &$list) {
echo ' use id "'.$list->id.'" for list "'.substr($list->name, 0, 100).PHP_EOL;
}
}
if (! empty($show_everything)) {
die('<pre>'.print_r($json,true).PHP_EOL);
}
}
private function get_url($uri, $method='GET', $data='') {
$x = $this->api_key;
$pos = strrpos($x, '-');
$datacenter = substr($x, ($pos + 1));
if ($method == 'GET') {
// be aware of pagination...count is 10 by default...not sure of max, but 100 works
$uri .= '?offset=0&count=100';
}
// be careful about accepting unclean input here
// this is designed for developer use only where
// the four vars: method, datacenter, uri, and x
// are know to contain only appropriate content!
$cmd = "curl --request $method --url 'https://$datacenter.api.mailchimp.com/3.0/$uri' --user 'apijuju:$x'";
if (! empty($data)) {
$cmd .= ' --data '.addslashes(json_encode($data));
}
if ($this->show_cmd) echo $cmd.'<br><br>';
ob_start(); passthru($cmd); $out = ob_get_contents(); ob_end_clean();
$ret = json_decode(trim($out));
return $ret;
}
}
/*
// EXAMPLE USAGE:
// to find api_key use dropdown under profile pic...
// find it under "Account" => "Extras" => "API Keys"
$api_key = 'examplenhg93ehqle33elqhik32nh-us1';
// to find $list_id see mailchimp::get_lists(1);
$list_id = 'exampleihqle39';
// to find $mem_id see mailchimp::get_list_members($list_id, 1);
$mem_id = 'examplehk32nhg93elqhiexamplehk32nhg93elqhi';
$merge_field = 'NAME';
$merge_value = 'Joe Momma';
$mc = new mailchimp($api_key);
$mc->update_member_merge_field($list_id, $mem_id, $merge_field, $merge_value);
*/
使用 Mailchimp api v3 的 npm 包
在诅咒 Mailchimp 30 分钟后,我意识到你需要在 body
中发送 merge_fields
对象。否则它会默默地失败 -_-'
这个不行
mailchimp.patch({
path: '/lists/666trolol0/members/' + emailHash,
"merge_fields" : {
"FNAME:": "whatever"
}
}, ...
这个有效
mailchimp.patch({
path: '/lists/666trolol0/members/' + emailHash,
body: {
"merge_fields" : {
"FNAME:": "whatever"
}
}
}
}, ...
我应该使用 mailchimp 中的什么 API 来为特定列表成员设置合并 var 值?
如果我要添加新的列表成员,我可以使用 lists/subscribe 为该新成员设置合并 var 值。但是,如果列表成员已经存在,我没有看到 API 来更改值。
API lists/merge-var-set 设置所有列表成员的值。 lists/merge-var-update 为合并变量设置属性。
设置特定值的API是什么?
在 APIv2 中,您仍然使用 lists/subscribe
,但您也传递了 update_existing
。这是 considerably more intuitive in APIv3,您应该尽可能使用它,因为 2.0 已正式弃用。
在 Mailchimp API v3 中,您可以这样设置合并字段值:
PUT {api_endpoint}/3.0/lists/{list_id}/members/{member_hash}
{
"merge_fields": {
"BIRTHDAY": "01/23"
}
}
其中 {member_hash}
是成员电子邮件地址的 md5 哈希值。
您不必提供所有合并字段。 Mailchimp 将仅更新您指定的内容。
我花了一些时间在这个着陆区上转了一圈。也许 v3 api Mailchimp, update lists member merge_field key value pair php class 会帮助某人澄清这一点。
这似乎是不言自明的,但如果有不清楚的地方告诉我,我会很高兴;我很乐意更新此 post 以进行澄清。
总之,lukasz-wiktor的回答是正确的;但是,我显然陷入了 curl
php passthru
命令所需的转义。请注意,下面 mc::get_url()
方法中的 addslashes()
解决了我的问题。
<?php
// v3 api http basic authentication
class mc {
public $show_cmd = 1;
function __construct($api_key) {
$this->api_key = $api_key;
}
function update_member_merge_field($list_id, $mem_id, $fld, $val) {
//lists/{list_id}/members/{subscriber_hash}
$uri = 'lists/'.$list_id.'/members/'.$mem_id;
$data = array(
'merge_fields' => array(
$fld => $val,
)
);
$json = $this->get_url($uri, 'PATCH', $data);
die('<pre>'.print_r($json->merge_fields,true).PHP_EOL);
}
function get_list_members($list_id, $show_everything=0) {
//lists/{list_id}
$uri = 'lists/'.$list_id.'/members';
$json = $this->get_url($uri);
if (empty($json->members)) {
exit('hmmm, do you have any members in this list?'.PHP_EOL);
} else {
foreach ($json->members as &$mem) {
echo ' use id "'.$mem->id.'" for member "'.substr($mem->email_address, 0, 100).PHP_EOL;
}
}
if (! empty($show_everything)) {
die('<pre>'.print_r($json,true).PHP_EOL);
}
}
function get_lists($show_everything=0) {
//lists
$uri = 'lists/';
$json = $this->get_url($uri);
if (empty($json->lists)) {
exit('hmmm, do you have any lists?'.PHP_EOL);
} else {
foreach ($json->lists as &$list) {
echo ' use id "'.$list->id.'" for list "'.substr($list->name, 0, 100).PHP_EOL;
}
}
if (! empty($show_everything)) {
die('<pre>'.print_r($json,true).PHP_EOL);
}
}
private function get_url($uri, $method='GET', $data='') {
$x = $this->api_key;
$pos = strrpos($x, '-');
$datacenter = substr($x, ($pos + 1));
if ($method == 'GET') {
// be aware of pagination...count is 10 by default...not sure of max, but 100 works
$uri .= '?offset=0&count=100';
}
// be careful about accepting unclean input here
// this is designed for developer use only where
// the four vars: method, datacenter, uri, and x
// are know to contain only appropriate content!
$cmd = "curl --request $method --url 'https://$datacenter.api.mailchimp.com/3.0/$uri' --user 'apijuju:$x'";
if (! empty($data)) {
$cmd .= ' --data '.addslashes(json_encode($data));
}
if ($this->show_cmd) echo $cmd.'<br><br>';
ob_start(); passthru($cmd); $out = ob_get_contents(); ob_end_clean();
$ret = json_decode(trim($out));
return $ret;
}
}
/*
// EXAMPLE USAGE:
// to find api_key use dropdown under profile pic...
// find it under "Account" => "Extras" => "API Keys"
$api_key = 'examplenhg93ehqle33elqhik32nh-us1';
// to find $list_id see mailchimp::get_lists(1);
$list_id = 'exampleihqle39';
// to find $mem_id see mailchimp::get_list_members($list_id, 1);
$mem_id = 'examplehk32nhg93elqhiexamplehk32nhg93elqhi';
$merge_field = 'NAME';
$merge_value = 'Joe Momma';
$mc = new mailchimp($api_key);
$mc->update_member_merge_field($list_id, $mem_id, $merge_field, $merge_value);
*/
使用 Mailchimp api v3 的 npm 包
在诅咒 Mailchimp 30 分钟后,我意识到你需要在 body
中发送 merge_fields
对象。否则它会默默地失败 -_-'
这个不行
mailchimp.patch({
path: '/lists/666trolol0/members/' + emailHash,
"merge_fields" : {
"FNAME:": "whatever"
}
}, ...
这个有效
mailchimp.patch({
path: '/lists/666trolol0/members/' + emailHash,
body: {
"merge_fields" : {
"FNAME:": "whatever"
}
}
}
}, ...