#python #python-3.x #plaid
Вопрос:
Я вызываю https://plaid.com/docs/api/tokens/#linktokencreate конечная точка, использующая библиотеки plaid-python. Когда я создаю запрос токена ссылки.
LinkTokenCreateRequest:
{'client_name': 'MYCLIENTNAME', 'country_codes': ['US'], 'language': 'en', 'products': ['auth', 'transactions'], 'user': {'client_user_id': 'XXXXXXXXXX'}, 'webhook': '/webhooks/091e07ab'}
Ответ plaid:
{
"display_message": null,
"documentation_url": "https://plaid.com/docs/#create-link-token",
"error_code": "INVALID_FIELD",
"error_message": "webhook must be a non-empty string URL",
"error_type": "INVALID_REQUEST",
"request_id": "E************p",
"suggested_action": null
}
Запрос работает, если я не указываю параметр webhook. Вот код:
webhook_url = f"/webhooks/{user_hook_id}"
logger.info(f"webhook_url = {webhook_url}")
api_client = create_plaid_client()
client = plaid_api.PlaidApi(api_client)
token_request = LinkTokenCreateRequest(
products=[Products('auth'), Products('transactions')],
webhook=webhook_url,
client_name=client_name,
country_codes=[CountryCode('US')],
language='en',
user=LinkTokenCreateRequestUser(
client_user_id=user_hook_id
)
)
logger.info(f"token_request = {token_request}")
# create link token
token_response = client.link_token_create(token_request)
token = token_response['link_token']
Я также пробовал использовать полное имя хоста и uri, и оба выдают одну и ту же ошибку. Что не так с запросом?
ОБНОВЛЕНИЕ 1:
Я снова запустил тест, и вот результат. Одна вещь, которую я заметил на этот раз с webhook в token_request, заключается в том, что она выглядит неправильно отформатированной. Я вызываю LinkTokenCreateRequest следующим образом:
token_request = LinkTokenCreateRequest(
products=[Products('auth'), Products('transactions')],
webhook=webhook_url,
client_name=client_name,
country_codes=[CountryCode('US')],
language='en',
user=LinkTokenCreateRequestUser(
client_user_id=user_hook_id
)
)
И вывод для вызова приведен ниже. Вы можете видеть, что webhook генерируется с пустой строкой, а затем с предоставленным мной webhook.
[INFO] 2021-11-03T22:52:36.263Z ba0ad99b-76bd-42bf-b096-ca3e75b764dc webhook_url = https://b4234etcA3.execute-api.us-east-1.amazonaws.com/dev/webhooks/64a0f8d03754
[INFO] 2021-11-03T22:52:36.429Z ba0ad99b-76bd-42bf-b096-ca3e75b764dc token_request = {'client_name': 'Test',
'country_codes': ['US'],
'language': 'en',
'products': ['auth', 'transactions'],
'user': {'client_user_id': '64a0f8d03754'},
'webhook': ' '
'https://b4234etcA3.execute-api.us-east-1.amazonaws.com/dev/webhooks/64a0f8d03754'}
2021-11-03T15:52:36.816-07:00 [ERROR] ApiException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Server': 'nginx', 'Date': 'Wed, 03 Nov 2021 22:52:36 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '289', 'Connection': 'keep-alive', 'plaid-version': '2020-09-14'})
HTTP response body: {
"display_message": null,
"documentation_url": "https://plaid.com/docs/#create-link-token",
"error_code": "INVALID_FIELD",
"error_message": "webhook must be a non-empty string URL",
"error_type": "INVALID_REQUEST",
"request_id": "FrPnbQEDoQgI4f6",
"suggested_action": null
}
Ответ №1:
Параметр webhook должен включать в запрос весь URI конечной точки webhook, включая https:// часть.
Комментарии:
1. Я тоже пробовал, тот же результат. Я упоминаю это в нижней части проблемы
2. Можете ли вы обновить свой вопрос, чтобы показать точный запрос и ответ на запрос, в котором вы это пробовали?
3. Привет, Алекс, Запрос LinkTokenCreateRequest в моем вопросе — это распечатка строки
logger.info(f"token_request = {token_request}")
, а ответ plaid получен из зарегистрированного ответа от plaid. Я пытаюсь выполнить запрос в среде изолированной среды. Еще раз спасибо за любую помощь, которую вы можете предоставить.4. Извините, чтобы уточнить — я бы искал точный запрос и ответ для вызова, в котором
webhook
параметр установлен правильно, чтобы мы могли перепроверить, чтоwebhook
передаваемый вами параметр не имеет никаких проблем (поскольку код ошибки указывает на проблему с параметром webhook).5. Пожалуйста, смотрите Обновление 1