zenmoney/ZenPlugins

Не удается получить токен апи

leins275 opened this issue · 1 comments

пытаюсь получить токен как в примере

Вот мой код:

zen_url_base = "https://api.zenmoney.ru/oauth2/"


def get_request_code_url():
    query_params = {
        "response_type": "code",
        "client_id": settings.ZEN_CLIENT_ID,
        "redirect_uri": settings.ZEN_REDIRECT_URI,
    }
    query_string = urllib.parse.urlencode(query_params)
    return f"{zen_url_base}authorize/?{query_string}"


def get_token_url():
    return f"{zen_url_base}token/"


@oauth_router.get("/auth", response_class=RedirectResponse, status_code=302)
def authorize():
    code_url = get_request_code_url()
    return code_url


@oauth_router.get("/redirect/")
async def get_token(code):
    token_url = get_token_url()
    headers = {"content-type": "application/x-www-form-urlencoded"}
    payload = {
        "grant_type": "authorization_code",
        "client_id": settings.ZEN_CLIENT_ID,
        "client_secret": settings.ZEN_CLIENT_SECRET,
        "code": code,
        "redirect_uri": settings.ZEN_REDIRECT_URI
    }
    res = requests.post(token_url, data=payload, headers=headers)
    print(f"{res.status_code}: {res.reason}")
    print(res.text)
    return res.json()
  1. Вначале перехожу на myapp.example.com/auth - происходит перенаправление на /oauth2/authorize
  2. Вхожу через google, меня перенаправляет на myapp.example.com/redirect с authorization_code
  3. Далее делаю запрос на получение токена, согласно инструкции, приходит ответ 400 Bad Request
{
    "error": "invalid_grant"
}

Создал отдельный аккаунт для теста, в zenmoney, одинаковое поведение и при попытке получить токен через google и через zenmoney аккаунт.
Подскажите, в чем может быть проблема?

Проблема была в том, что в обоих случаях должен быть одинаковый redirect_uri + в роуте /redirect не должно быть слеша в конце. Если кому-то поможет эта информация - буду рад