【问题标题】:MailChimp OAuth2: Invalid Mailchimp API Key - wrong datacenter - library may not support datacenter mapping schemeMailChimp OAuth2:无效的 Mailchimp API 密钥 - 错误的数据中心 - 库可能不支持数据中心映射方案
【发布时间】:2014-05-23 07:54:45
【问题描述】:

我已经使用 Python 和 Django 成功实现了一次通过 MailChimp (MC) 的六步 OAuth2 流程,记录在 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。您访问了错误的数据中心 - 您的客户端库可能无法正确支持我们的数据中心映射方案。

我做错了什么?

【问题讨论】:

  • key 看起来不像是有效的 api 密钥令牌。你是这样生成的吗? kb.mailchimp.com/article/where-can-i-find-my-api-key/…
  • 这是一个完整的令牌;我将其斜体并替换为“密钥”,这样我就不会公开实际的 API 密钥。
  • 啊..好的..有道理..编辑。

标签: python django oauth mailchimp


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

我认为客户端库中的端点是“http://.api.mailchimp.com”,因此您需要按照文档中的这一部分将令牌作为访问令牌发送:

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

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2015-03-08
    • 2019-02-26
    • 2020-07-04
    • 2020-01-31
    • 1970-01-01
    • 2016-01-29
    • 2017-05-21
    • 2017-12-21
    相关资源
    最近更新 更多