MailChimp OAuth2:无效的Mailchimp API密钥 - 错误的数据中心 - 库可能不支持数据中心映射方案

时间:2014-04-09 21:08:14

标签: python django oauth mailchimp

我已经成功实现了一次通过MailChimp(MC)六步OAuth2流程,使用Python和Django记录在http://apidocs.mailchimp.com/oauth2/。问题是我希望我的用户能够授权MC一次,然后我将使用该授权将来调用MC(当然是获得他们的许可)。

以下是我的表现:

第1步:将使用重定向到MC授权URI。

(工作正常)

第2步:用户输入他们的MC凭证。

(工作正常)

第3步:用户被重定向回我服务器上的URI,然后是 第4步:我向MC访问令牌URI发出请求,并且
第5步:MC返回访问令牌。

headers = {                                                                                 
    'User-Agent': 'oauth2-draft-v10',                                                       
    'Content-Type': 'application/x-www-form-urlencoded',                                    
    'Host': 'login.mailchimp.com',                                                          
    'Accept': 'application/json'                                                            
}                                                                                           
payload = {                                                                                 
    'grant_type': 'authorization_code',                                                     
    'client_id': settings.MAILCHIMP_CLIENT_ID,                                              
    'client_secret': settings.MAILCHIMP_CLIENT_SECRET,                                      
    'code': code,                                                                           
    'redirect_uri': settings.MAILCHIMP_REDIRECT_URI                                         
}                                                                                           

response = requests.post(settings.MAILCHIMP_ACCESS_TOKEN_URI, headers=headers, data=payload)
response_dict = response.json()                                                             
access_token = response_dict['access_token']

此时,我将access_token(无数据中心的API密钥)保存在我的数据库中。

第6步:我向MC元数据URI发出请求以获取数据中心。

请注意,此步骤会多次出现,因为我需要代表用户进行MC调用,而步骤1-5只出现一次。

headers = {'Authorization': 'OAuth ' + access_token}                                        
response = requests.get(settings.MAILCHIMP_METADATA_URI, headers=headers)                   
response_dict = response.json()                                                             
dc = response_dict['dc']

第7步:我构建了一个API密钥并使用Python库进行MC调用。

mkey = access_token + '-' + dc
mcapi = mailchimp.Mailchimp(apikey=mkey)

mcapi.do_something_fun_with_mailchimp()...

问题是最后一步间歇性地返回错误

  

无效的Mailchimp API密钥:<key>-dc。您正在访问错误的数据中心 - 您的客户端库可能无法正确支持我们的数据中心映射方案。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我的工作流程是正确的,除了我只需要做一次。我可以将access_token和数据中心( key - dc )存储在我的数据库中,并将其用于将来的调用。

虽然我仍然不知道究竟是什么导致了我的问题,但我现在知道它与此工作流程无关。这是对的。

答案 1 :(得分:0)

我认为客户端库中的端点是&#34; http://.api.mailchimp.com"因此,您需要根据文档中的此部分将令牌作为访问令牌发送:

  

api_endpoint - 这是http://.api.mailchimp.com。如果你不这样做   有一个数据中心感知包装器,使用这个api端点和   access_token作为您的API密钥。