finished up new link flow updates. Still need to implement secondary get_auth_token flow.
This commit is contained in:
parent
42704350a4
commit
23764c1886
@ -3,6 +3,8 @@ from django.conf import settings
|
|||||||
import os
|
import os
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
import plaid
|
||||||
|
from plaid.api import plaid_api
|
||||||
from plaid.model.link_token_create_request import LinkTokenCreateRequest
|
from plaid.model.link_token_create_request import LinkTokenCreateRequest
|
||||||
from plaid.model.link_token_create_request_user import LinkTokenCreateRequestUser
|
from plaid.model.link_token_create_request_user import LinkTokenCreateRequestUser
|
||||||
from plaid.model.products import Products
|
from plaid.model.products import Products
|
||||||
@ -20,7 +22,7 @@ def format_error(e):
|
|||||||
|
|
||||||
class Connection(AbstractConnectionClient):
|
class Connection(AbstractConnectionClient):
|
||||||
|
|
||||||
def __init__(self, credentials):
|
def __init__(self, credentials, account_id=None):
|
||||||
self.credentials = credentials.dict()
|
self.credentials = credentials.dict()
|
||||||
|
|
||||||
# Fill in your Plaid API keys -
|
# Fill in your Plaid API keys -
|
||||||
@ -28,7 +30,7 @@ class Connection(AbstractConnectionClient):
|
|||||||
self.PLAID_CLIENT_ID = settings.PLAID_CLIENT_ID
|
self.PLAID_CLIENT_ID = settings.PLAID_CLIENT_ID
|
||||||
self.PLAID_SECRET = settings.PLAID_SECRET
|
self.PLAID_SECRET = settings.PLAID_SECRET
|
||||||
self.PLAID_PUBLIC_KEY = settings.PLAID_PUBLIC_KEY
|
self.PLAID_PUBLIC_KEY = settings.PLAID_PUBLIC_KEY
|
||||||
# Use 'sandbox' to test with Plaid's Sandbox environment (username: user_good,
|
# Use 'sandbox' to test with Plaid's Sandbox environment (usplaid-python==9.2.0ername: user_good,
|
||||||
# password: pass_good)
|
# password: pass_good)
|
||||||
# Use `development` to test with live users and credentials and `production`
|
# Use `development` to test with live users and credentials and `production`
|
||||||
# to go live
|
# to go live
|
||||||
@ -42,17 +44,26 @@ class Connection(AbstractConnectionClient):
|
|||||||
# will be able to select institutions from.
|
# will be able to select institutions from.
|
||||||
self.PLAID_COUNTRY_CODES = settings.PLAID_COUNTRY_CODES
|
self.PLAID_COUNTRY_CODES = settings.PLAID_COUNTRY_CODES
|
||||||
|
|
||||||
client_user_id = user.id
|
configuration = plaid.Configuration(
|
||||||
|
host=self.PLAID_ENV,
|
||||||
|
api_key={
|
||||||
|
'clientId': self.PLAID_CLIENT_ID,
|
||||||
|
'secret': self.PLAID_SECRET,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
api_client = plaid.ApiClient(configuration)
|
||||||
|
client = plaid_api.PlaidApi(api_client)
|
||||||
|
|
||||||
# Create a link_token for the given user
|
# Create a link_token for the given user
|
||||||
request = LinkTokenCreateRequest(
|
request = LinkTokenCreateRequest(
|
||||||
products=[Products("auth")],
|
products=[Products("auth")],
|
||||||
client_name="Qrtr Plaid",
|
client_name="Qrtr Plaid",
|
||||||
country_codes=[CountryCode('US')],
|
country_codes=[CountryCode('US')],
|
||||||
redirect_uri='https://domainname.com/oauth-page.html',
|
#redirect_uri='https://domainname.com/oauth-page.html',
|
||||||
language='en',
|
language='en',
|
||||||
webhook='https://webhook.example.com',
|
webhook='https://webhook.example.com',
|
||||||
user=LinkTokenCreateRequestUser(
|
user=LinkTokenCreateRequestUser(
|
||||||
client_user_id=client_user_id
|
client_user_id=account_id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
response = client.link_token_create(request)
|
response = client.link_token_create(request)
|
||||||
|
|||||||
@ -37,14 +37,14 @@ class ConnectionViewSet(viewsets.ModelViewSet):
|
|||||||
def authenticate(self, request):
|
def authenticate(self, request):
|
||||||
print(request.data)
|
print(request.data)
|
||||||
print(request.data.keys())
|
print(request.data.keys())
|
||||||
public_token = request.data.get("public_token")
|
# public_token = request.data.get("public_token")
|
||||||
name = request.data.get("name", "dummyName")
|
name = request.data.get("name", "dummyName")
|
||||||
account_id = request.data.get("account")
|
account_id = request.data.get("account")
|
||||||
print(f"Account ID Detected: {account_id}")
|
print(f"Account ID Detected: {account_id}")
|
||||||
if public_token is None:
|
# if public_token is None:
|
||||||
return Response(
|
# return Response(
|
||||||
status=status.HTTP_400_BAD_REQUEST,
|
# status=status.HTTP_400_BAD_REQUEST,
|
||||||
data="ERROR: missing public_token")
|
# data="ERROR: missing public_token")
|
||||||
if account_id is None:
|
if account_id is None:
|
||||||
return Response(
|
return Response(
|
||||||
status=status.HTTP_400_BAD_REQUEST,
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
@ -63,10 +63,10 @@ class ConnectionViewSet(viewsets.ModelViewSet):
|
|||||||
print(f"Account Found: {accounts[0]}")
|
print(f"Account Found: {accounts[0]}")
|
||||||
account = accounts[0]
|
account = accounts[0]
|
||||||
print(request)
|
print(request)
|
||||||
plaid_conn = importlib.import_module(f"connection.connections.plaid_client")
|
plaid_conn = importlib.import_module(f"connection.connections.plaid_client_v2")
|
||||||
conn_type = ConnectionType.objects.get(name="Plaid")
|
conn_type = ConnectionType.objects.get(name="Plaid")
|
||||||
try:
|
try:
|
||||||
plaid_client = plaid_conn.Connection(request.data)
|
plaid_client = plaid_conn.Connection(request.data, account_id=account_id)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return Response(status=status.HTTP_503,
|
return Response(status=status.HTTP_503,
|
||||||
data="ERROR: Invalid public_token")
|
data="ERROR: Invalid public_token")
|
||||||
@ -83,7 +83,7 @@ class ConnectionViewSet(viewsets.ModelViewSet):
|
|||||||
})
|
})
|
||||||
conn.credentials = plaid_client.credentials
|
conn.credentials = plaid_client.credentials
|
||||||
conn.save()
|
conn.save()
|
||||||
return Response(plaid_client.get_accounts())
|
return Response(plaid_client.credentials)
|
||||||
|
|
||||||
@action(detail=False, methods=['post'], url_path='plaid-webhook',
|
@action(detail=False, methods=['post'], url_path='plaid-webhook',
|
||||||
permission_classes=[AllowAny])
|
permission_classes=[AllowAny])
|
||||||
|
|||||||
@ -16,8 +16,8 @@ djangorestframework-simplejwt==4.6.0
|
|||||||
drf-yasg==1.20.0
|
drf-yasg==1.20.0
|
||||||
idna==2.10
|
idna==2.10
|
||||||
oauthlib==3.1.0
|
oauthlib==3.1.0
|
||||||
plaid-python==9.2.0
|
plaid_python==14.0.0
|
||||||
psycopg2==2.8.6
|
psycopg2-binary==2.8.6
|
||||||
pycparser==2.20
|
pycparser==2.20
|
||||||
PyJWT==2.1.0
|
PyJWT==2.1.0
|
||||||
python3-openid==3.2.0
|
python3-openid==3.2.0
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user