我已经成功实现了一次通过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
。您正在访问错误的数据中心 - 您的客户端库可能无法正确支持我们的数据中心映射方案。
我做错了什么?
答案 0 :(得分:1)
我的工作流程是正确的,除了我只需要做一次。我可以将access_token和数据中心( key - dc )存储在我的数据库中,并将其用于将来的调用。
虽然我仍然不知道究竟是什么导致了我的问题,但我现在知道它与此工作流程无关。这是对的。
答案 1 :(得分:0)
我认为客户端库中的端点是&#34; http://.api.mailchimp.com"因此,您需要根据文档中的此部分将令牌作为访问令牌发送:
api_endpoint - 这是http://.api.mailchimp.com。如果你不这样做 有一个数据中心感知包装器,使用这个api端点和 access_token作为您的API密钥。