代码基本上是从mailchimp oauth docs复制粘贴的,tokenResponse返回400个无效的客户端。客户端ID和密码已被三重检查。
from urllib.parse import urlencode
from operator import itemgetter
import requests
from flask import Flask, redirect, request
import mailchimp_marketing as MailchimpMarketing
app = Flask(__name__)
@app.route('/')
def index():
return "<p>Welcome to the sample Mailchimp OAuth app! Click <a href='/auth/mailchimp'>here</a> to log in</p>"
@app.route('/auth/mailchimp', methods=['GET'])
def auth():
# You should always store your client id and secret in environment variables for security — the exception: sample code.
MAILCHIMP_CLIENT_ID = "ID"
oauth_base = "https://login.mailchimp.com/oauth2/authorize?"
return redirect("{}{}".format(oauth_base,
urlencode({
"response_type": "code",
"client_id": MAILCHIMP_CLIENT_ID,
"redirect_uri": "http://127.0.0.1:5000/auth/mailchimp/callback"
})))
@app.route('/auth/mailchimp/callback', methods=['GET'])
def authCallback():
MAILCHIMP_CLIENT_ID = "ID"
MAILCHIMP_CLIENT_SECRET = "SECRET"
BASE_URL = "http://127.0.0.1:5000"
OAUTH_CALLBACK = "{}/oauth/mailchimp/callback".format(BASE_URL)
code = request.args['code']
# Here we're exchanging the temporary code for the user's access token.
tokenResponse = requests.post("https://login.mailchimp.com/oauth2/token",
data={
'body': {
'grant_type': 'authorization_code',
'client_id': MAILCHIMP_CLIENT_ID,
'client_secret': MAILCHIMP_CLIENT_SECRET,
'redirect_uri': OAUTH_CALLBACK,
'code': code
}})
access_token = itemgetter('access_token')(tokenResponse.json())
print(access_token)
metadataResponse = requests.get(
'https://login.mailchimp.com/oauth2/metadata',
headers={'Authorization': "OAuth {}".format(access_token)})
dc = itemgetter('dc')(metadataResponse.json())
mailchimp = MailchimpMarketing.Client()
mailchimp.set_config({
"access_token": "YOUR_ACCESS_TOKEN",
"server": "YOUR_SERVER_PREFIX"
})
response = mailchimp.ping.get()
return """<p>This user's access token is {} and their server prefix is {}.</p>
<p>When pinging the Mailchimp Marketing API's ping endpoint, the server responded:<p>
<code>{}</code>
""".format(access_token, dc, code)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Mailchimp支持人员说,此问题可能是由于请求为http而引起的。有没有人遇到。帮助将不胜感激.............................................. ...