2015-10-06 64 views
0

我想解决如何使用WWW :: Mailchimphttp://search.cpan.org/~arcanez/WWW-Mailchimp/)来签名到我们的列表,但也分配人的语言(即英文,法文,德文,西班牙文等)。将语言变量添加到WWW :: Mailchimp(订阅)

这里是我迄今:

my $mailchimp = WWW::Mailchimp->new(apikey => 'xxxx'); 
    $mailchimp->listSubscribe(id => "xxx", email_address => $in->{Email}, merge_vars => [ FNAME => $name[0], LNAME => $name[1], mc_language => "fr", LANG => "fr", LANGUAGE => "fr" ]); 

mc_language => “FR”,LANG => “FR”,LANGUAGE => “FR”似乎并没有做任何事情(被尝试所有的参数,我看到铺设,盼望其中一个作品!)

虽然它的工作(并要求您确认您的订阅),所有的语言变量将被忽略。看着他们的证件,我有点困惑,使用什么:

https://apidocs.mailchimp.com/api/2.0/lists/subscribe.php

代码“FR”是好的,但我不能确定什么PARAMS沿传递给它。

有没有人有过这方面的经验?除了语言,它工作正常(但我需要能够用自己的语言发送确认电子邮件,然后在做邮件时也可以过滤掉)

更新:好吧,它看起来像它不是将成为更新到新API的简单情况。我一直在研究v3.0 API,并且对旧版本进行了彻底检查(新的函数名称,发送请求的新方法等)。我要做的是看一下“卷曲”方法,所以我们至少可以用它来实现。一旦我有了这些,我可能会考虑编写一些与LWP :: UserAgent一起工作的东西,因为它比做大量的curl请求更清晰。羞耻有没有什么在那里已经为Perl和MailChimp(用新的API,甚至2.0版!)

回答

0

好的,所以我到了那里!我一直在讨论MailChimp支持,他们非常有帮助。原来这是一个双重问题。

1)需要为相关列表启用自动翻译。这是他们的答案:

看了看电话后,它现在看起来已经正确设置好了,所以你在这方面都很好。这就是说,我看到 自动翻译选项似乎没有启用您的列表中的任何 。为了确认和所有其他回复电子邮件自动翻译,需要为所有正在使用的列表启用 。

我们有一点的附加信息上,在这里,如果你想检查出: http://kb.mailchimp.com/lists/signup-forms/translate-signup-forms-and-emails#Auto-Translate-Forms

2)使得通过API请求时,您需要专门设置值为Accept-Language: xx。例如,en,fr,es,de等

以下是任何需要它的人的工作函数。只要确保更新apikey,listId和端点URL。

do_register_email_list('[email protected]','Andrew Test',"en") 

sub do_register_email_list { 
# (email,name,lang) 

    use WWW::Curl::Easy; 
    use Digest::MD5; 
    use JSON; 

    my @name = split /\s+/, $_[1]; 
    my $apikey = 'xxxx-us6'; 
    my $listid = 'xxxx'; 
    my $email = $_[0]; 
    my $endpoint = "https://us6.api.mailchimp.com/3.0/lists"; 
    my $lang = $_[2]||'en'; 

    my $json = JSON::encode_json({ 
     'email_address' => $email, 
     'status'  => 'pending', 
     'language' => $lang, 
     'merge_fields' => { 
      'FNAME'  => $name[0]||'', 
      'LNAME'  => $name[1]||'' 
     } 
    }); 

    my $curl = WWW::Curl::Easy->new; 

    my $url = "$endpoint/$listid/members/" . Digest::MD5::md5(lc($email)); 

    $curl->setopt(CURLOPT_HEADER,1); 
    $curl->setopt(CURLOPT_URL, $url); 

# $curl->setopt(CURLOPT_VERBOSE, 1); 
    $curl->setopt(CURLOPT_USERPWD, 'user:' . $apikey); 
    $curl->setopt(CURLOPT_HTTPHEADER, ['Content-Type: application/json',"Accept-Language: $lang"]); 
    $curl->setopt(CURLOPT_TIMEOUT, 10); 
    $curl->setopt(CURLOPT_CUSTOMREQUEST, 'PUT'); 
    $curl->setopt(CURLOPT_SSL_VERIFYPEER, 0); 
    $curl->setopt(CURLOPT_POSTFIELDS, $json); 

    # A filehandle, reference to a scalar or reference to a typeglob can be used here. 
    my $response_body; 
    $curl->setopt(CURLOPT_WRITEDATA,\$response_body); 

    # Starts the actual request 
    my $retcode = $curl->perform; 

#print "FOO HERE"; 
    # Looking at the results... 
    if ($retcode == 0) { 
     print "Transfer went ok\n"; 
     my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE); 
     print "Received response: $response_body\n"; 
    } else { 
     # Error code, type of error, error message 
     print "An error happened: $retcode ".$curl->strerror($retcode)." ".$curl->errbuf."\n"; 
    } 
} 

希望这样可以节省有人从所有的悲伤,我与它在其他:)(在MailChimp支撑女士还表示,她会得到他们的团队在开发者备注添加这个东西,所以它做了一个有点清晰!)

2

从,它默认看source到API 1.3:

has api_version => (
    is => 'ro', 
    isa => Num, 
    lazy => 1, 
    default => sub { 1.3 }, 
); 

文档对于shows您需要使用MC_LANGUAGE:

string MC_LANGUAGE设置成员的语言首选项。支持的 代码是完全区分大小写的,可以找到here

它看起来像模块只是塞到任何数据结构,你提供到JSON和它POST到Mailchimp,所以适当的Mailchimp API文档版本的API,你的目标应该是一个主要来源引用。

+0

感谢您的回复。这样做似乎并没有这样做(确认仍然以英语形式出现):'$ mailchimp-> listSubscribe(id =>“75a6bfd589”,email_address => $ in - > {Email},merge_vars => [FNAME => $ name [0],LNAME => $ name [1],MC_LANGUAGE =>“fr”]);'...任何想法? –

+0

嗯,必须有1.3 API的东西。即使FNAME和LNAME也没有被传入:merge_vars => [FNAME =>'xxxx',LNAME =>'yxxx',MC_LANGUAGE =>“fr”]'。也许我明天再给它一次,但在MailChimp.pm文件中添加一些调试,以便我可以看到实际调用的请求(看起来像值得迁移到v3.0也是值得的,例如1.3和2.0看起来他们正在被折旧:)) –

+1

好吧,所以它看起来像它比我希望更棘手!我没有:'https://us6.api.mailchimp.com/2.0/lists/subscribe.json?apikey=xxxx&id=xxxx&email[email]=xxxx&merge_vars[FNAME]=John&merge_vars[LNAME]=Doe&merge_vars[MC_LANGUAGE] = fr' ...但是,它仍然忽略语言:/我要看看我是否可以找到一个特定的MailChimp论坛,尝试询问发生了什么事情 –