Как получить public_token для Plaid API в Python - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь следовать документации Plaid отсюда , и я не могу понять, откуда мне взять public_token, когда я работаю над Plaid development окружающая обстановка. Они говорят, что:

Во втором примере:

from plaid import Client


client = Client(client_id='***', secret='***', public_key='***', environment='sandbox')

# the public token is received from Plaid Link
response = client.Item.public_token.exchange(public_token)
access_token = response['access_token']

Я не знаю, откуда взялся public_token. Если я go к этому Plaid Link , они говорят:

Этот репозиторий больше не поддерживается. Чтобы интегрироваться с пледом, посетите документы. https://plaid.com/docs

Тогда, когда я go к их официальным документам , я не могу найти какой-либо способ получить это public token .

Я пытаюсь сделать что-то вроде этого:

from exceptions import (
    InvalidPlaidEnvironment,
    MissingPlaidCredential
)

from plaid import Client
from plaid.errors import APIError, ItemError, InvalidRequestError


VALID_ENVIRONMENTS = (
    'sandbox',
    'development',
    'production'
)

CLIENT_ID = '<development_client_id>'
SECRET = '<development_secret>'
PUBLIC_KEY = '<development_public_key>'
ENVIRONMENT = 'development'


class PlaidProcessor:
    """
    Simple processor class for Plaid API
    """

    def __init__(
            self,
            client_id=CLIENT_ID,
            secret=SECRET,
            public_key=PUBLIC_KEY,
            environment=ENVIRONMENT
    ):
        """
        Constructor for PlaidProcessor. Initialize our class with basic credentials
        data.

        Args:
            client_id (str): Plaid client ID
            secret (str): Plaid secret
            public_key (str): Plaid public key
            environment (str): One of sandbox, development, or production
        """

        self.client_id = client_id
        self.secret = secret
        self.public_key = public_key
        self.environment = environment

        if not self.client_id:
            raise MissingPlaidCredential(
                'Missing CLIENT_ID. Please provide Plaid client id.'
            )

        if not self.secret:
            raise MissingPlaidCredential(
                'Missing SECRET. Please provide Plaid secret.'
            )

        if not self.public_key:
            raise MissingPlaidCredential(
                'Missing PUBLIC_KEY. Please provide Plaid public key.'
            )

        if not self.environment:
            raise MissingPlaidCredential(
                'Missing environment. Please provide Plaid environment.'
            )

        if self.environment.lower() not in VALID_ENVIRONMENTS:
            valid_environments_str = ','.join(VALID_ENVIRONMENTS)

            raise InvalidPlaidEnvironment(
                f'Please insert one of the following environments: {valid_environments_str}'
            )

        self.client = Client(
            client_id=self.client_id,
            secret=self.secret,
            public_key=self.public_key,
            environment=self.environment
        )

        self.access_token = None
        self.public_token = None

    def get_public_token(self):
        # how do I get the access token?
        pass

В документах также указано следующее:

A public_token (которое возвращается в вашем обратном вызове Link onSuccess()) должно быть передано на ваш сервер, который заменит его на access_token. public_tokens - токены одноразового использования, срок действия которых истекает через 30 минут. При необходимости вы можете сгенерировать новые public_tokens через конечную точку / item / public_token / create.

access_token используется для доступа к данным продукта для элемента. Это должно храниться надежно, и никогда в коде на стороне клиента. Это используется для выполнения аутентифицированных запросов к Plaid API для пользователя. По умолчанию access_tokens не имеют срока действия, хотя вы можете вращать их; если он оказывается в состоянии ошибки, access_token снова будет работать, если ошибка элемента устранена. Каждый маркер access_token уникален для конкретного Предмета и не может использоваться для доступа к другим Предметам.

, но это только сбивает с толку. Кто-нибудь может дать мне несколько советов по этому поводу?

1 Ответ

1 голос
/ 26 февраля 2020

в основном public_token происходит от клиентской стороны, значит

, когда вы реализуете frontend-part / client-side для этого Plaid to Link или для создания элементов, а затем процесс обратной стороны для этого создает public_token вот ссылка для этого (official-docs) ; согласно документам по onSuccess генерируемого токена publi c;

и этот токен publi c отправит на серверную / серверную часть здесь , и вы можете использовать этот токен publi c согласно требованиям:
as следовать:

from plaid import Client


client = Client(client_id='***', secret='***', public_key='***', environment='sandbox')

# the public token is received from Plaid Link
response = client.Item.public_token.exchange(public_token)
access_token = response['access_token']
...