Я продолжаю получать <WSGIRequest GET: '/create-link-token'>; проблемы с подключением django к plaid api

Я пытаюсь подключить свой бэкенд Django к API Plaid, но я застрял на том, как вернуть только тело из объекта.

Вот трассировка, которую я получаю:

Насколько я могу судить, проверив мою конфигурацию, он пытается запросить токен ссылки и другую информацию с серверов plaid, но ему это не удается.

callback            <function create_link_token at 0x000002283648B5E0>
callback_args       ()
callback_kwargs     {}
middleware_method   <bound method CsrfViewMiddleware.process_view of 
                    <CsrfViewMiddleware get_response=convert_exception_to_response. 
                    <locals>.inner>>

request             <WSGIRequest: GET '/create-link-token'>
response            None
self                <django.core.handlers.wsgi.WSGIHandler object at 
                    0x0000022834FF1040>
wrapped_callback    <function create_link_token at 0x000002283648B5E0>

На данный момент я просмотрел документацию и поискал в Google, чтобы выяснить, сталкивались ли другие с подобными проблемами. Не нашел ничего полезного, по крайней мере, для моей ситуации. Поскольку эта ошибка исходит из исключений ядра django, я попытался найти способы переопределить это исключение.

После того, как я сосредоточился на своей проблеме, мой вопрос теперь звучит так: "Как я могу вернуть тело в поле запроса, когда я не могу получить доступ к запросам?". Возможно, я ошибаюсь, но у меня сложилось впечатление, что у меня нет способа подделать запрос, чтобы я мог манипулировать данными, которые он получает.

Вот мой код:

views.py

PLAID_CLIENT_ID = os.getenv('PLAID_CLIENT_ID')
PLAID_PUBLIC_KEY = os.getenv('PLAID_PUBLIC_KEY') 
PLAID_SECRET = os.getenv('PLAID_SECRET')
PLAID_ENVIRONMENT = os.getenv('PLAID_ENV', 'development')


configuration = plaid.Configuration(
    host=plaid.Environment.Development,
    api_key = {
        'clientId': PLAID_CLIENT_ID, 
        'secret': PLAID_SECRET,
        'plaidVersion': '2020-09-14',
    }
)

api_client = plaid.ApiClient(configuration)
client = plaid_api.PlaidApi(api_client)

# We store the access_token in memory - in production, store it in a secure
# persistent data store.
access_token = None
# The payment_id is only relevant for the UK Payment Initiation product.
# We store the payment_id in memory - in production, store it in a secure
# persistent data store.
payment_id = None
# The transfer_id is only relevant for Transfer ACH product.
# We store the transfer_id in memomory - in produciton, store it in a secure
# persistent data store
transfer_id = None

item_id = None

def index(request):
    if request.method == 'GET': 
        return True


def create_link_token(request):
    try:
        # Get the client_user_id by searching for the current user
        # Create a link_token for the given user
        request = LinkTokenCreateRequest(
            products=[Products("auth")],
            client_name="Plaid Test App",
            country_codes=[CountryCode('US')],
            language='en',
            user=LinkTokenCreateRequestUser(
                client_user_id=str(time.time())
            )
        )

        response = client.link_token_create(request)
        link_token = response['link_token']
        # Send the data to the client
        return JsonResponse(link_token)
    except plaid.ApiException as e:
        return json.dumps(e.body)

и urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('create-link-token', views.create_link_token, name='create-link-token'),
]

Если я могу предоставить что-то еще, пожалуйста, дайте мне знать.

У меня была точно такая же ошибка. Моя проблема заключалась в неправильном именовании моих переменных env. Например:

В моем .env.dev я назвал свои env var следующим образом:

PLAID_CLIENT_ID = xxxxxxxxxxxx

Импортировано в мои настройки Django как:

PLAID_CLIENT = os.envrion.get('PLAID_CLIENT')

РЕШЕНИЕ:

Убедитесь, что ваши env vars верны. Обертка plaid-python пока не обеспечивает хорошую обработку исключений для этого.

Проблема заключается в следующих строках кода. Слово "request" является специальным в Django - вы передаете его в определении функции.

 request = LinkTokenCreateRequest( 
        products=[Products("auth")],
        client_name="Plaid Test App",
        country_codes=[CountryCode('US')],
        language='en',
        user=LinkTokenCreateRequestUser(
            client_user_id=str(time.time())
        )
    )

    response = client.link_token_create(request)

Измените сниппет на следующий:

plaid_request = ...
plaid_response = client.link_token_create(plaid_request)

Также - я бы настоятельно рекомендовал изменить client на что-то более явное - например, plaid_client.

Вернуться на верх