Mailchimp Oauth2返回400 invalid_client

时间:2020-09-04 17:33:02

标签: python api flask oauth-2.0 mailchimp

代码基本上是从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而引起的。有没有人遇到。帮助将不胜感激.............................................. ...

0 个答案:

没有答案