【问题标题】:mailchimp: how to set a merge var value for a specific list membermailchimp:如何为特定列表成员设置合并变量值
【发布时间】:2015-10-31 11:31:16
【问题描述】:

我应该使用 mailchimp 中的什么 API 来为特定列表成员设置合并变量值?

如果我要添加一个新的列表成员,我可以使用列表/订阅为该新成员设置一个合并变量值。但是,如果列表成员已经存在,我看不到用于更改值的 API。

API lists/merge-var-set 设置所有列表成员的值。并且 lists/merge-var-update 设置合并变量的属性。

设置特定值的 API 是什么?

【问题讨论】:

    标签: var mailchimp


    【解决方案1】:

    在 Mailchimp API v3 中,您可以通过这种方式设置合并字段值:

    PUT {api_endpoint}/3.0/lists/{list_id}/members/{member_hash}
    
    {
        "merge_fields": {
            "BIRTHDAY": "01/23"
        }
    }
    

    其中{member_hash} 是会员电子邮件地址的 md5 哈希值。

    您不必提供所有合并字段。 Mailchimp 将仅更新您指定的内容。

    【讨论】:

      【解决方案2】:

      在 APIv2 中,您仍然使用lists/subscribe,但您也传递了update_existing。这是considerably more intuitive in APIv3,您应该尽可能使用它,因为 2.0 已正式弃用。

      【讨论】:

      • 谢谢。是的,我打算切换到 3.0,如果我能弄清楚如何使用它!
      【解决方案3】:

      使用 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" 
              }
          }
      }
      }, ...
      

      【讨论】:

        【解决方案4】:

        我花了一些时间在这个着陆区转了一圈。也许v3 api Mailchimp, update lists member merge_field key value pair php 类将有助于澄清这一点。

        这似乎是不言自明的,但如果我能说出不清楚的地方,我会很高兴;我很乐意通过澄清更新这篇文章。

        简而言之,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);
        */
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-11
          • 1970-01-01
          • 2012-11-11
          • 2015-10-28
          • 2016-12-18
          • 2019-04-10
          • 1970-01-01
          • 2017-05-25
          相关资源
          最近更新 更多