【发布时间】: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