示例#1
0
        /// <inheritdoc />
        public async Task <PlaidResult <ItemResponse> > GetItemAsync(string accessToken)
        {
            //conditions
            Condition.Requires(accessToken).IsNotNullOrWhiteSpace();

            //create the payload to pass
            var payload = new PlaidRequest(clientId, clientSecret, accessToken);

            //serialize object
            HttpContent content = ContentExtensions.ToJsonContent(payload);

            //post it and get the response
            HttpResponseMessage response = await this.httpClient.PostAsync(PlaidInformation.ItemManagement_GetItems, content);

            //read the string
            string responseJson = await response.Content.ReadAsStringAsync();

            //create the result
            PlaidResult <ItemResponse> result = new PlaidResult <ItemResponse>(responseJson);

            //is it ok
            if (response.StatusCode == HttpStatusCode.OK)
            {
                ItemResponse itemResponse = JsonConvert.DeserializeObject <ItemResponse>(responseJson);
                result.Value = itemResponse;
            }

            //parse the exception
            result.Exception = await this.ParseException(response, responseJson);

            //return
            return(result);
        }
示例#2
0
        /// <inheritdoc />
        public async Task <PlaidResult <RotateAccessTokenResponse> > RotateAccessTokenAsync(string accessToken)
        {
            //conditions
            Condition.Requires(accessToken).IsNotNullOrWhiteSpace();

            //create the payload to pass
            PlaidRequest rotateTokenRequest = new PlaidRequest(this.clientId, this.clientSecret, accessToken);

            //pass and get response
            HttpResponseMessage response = await this.httpClient.PostAsJsonAsync(PlaidInformation.ItemManagement_RotateAccessToken, rotateTokenRequest);

            //read the string
            string responseJson = await response.Content.ReadAsStringAsync();

            //create the result
            PlaidResult <RotateAccessTokenResponse> result = new PlaidResult <RotateAccessTokenResponse>(responseJson);

            //is it ok
            if (response.StatusCode == HttpStatusCode.OK)
            {
                RotateAccessTokenResponse tokenResponse = JsonConvert.DeserializeObject <RotateAccessTokenResponse>(responseJson);

                result.Value = tokenResponse;

                return(result);
            }

            result.Exception = await this.ParseException(response, responseJson);

            return(result);
        }
示例#3
0
        /// <inheritdoc />
        public async Task <PlaidResult <bool> > DeleteUserAsync(AccessToken accessToken, ApiType api = ApiType.Connect)
        {
            Condition.Requires(accessToken).IsNotNull();

            PlaidRequest deleteRequest = new PlaidRequest(this.clientId, this.clientSecret, accessToken.Value);

            HttpResponseMessage response = await this.httpClient.DeleteAsJsonAsync(GetEndpoint(api), deleteRequest);

            PlaidResult <bool> result = new PlaidResult <bool>(response.StatusCode == HttpStatusCode.OK);

            result.Exception = await this.ParseException(response);

            return(result);
        }
示例#4
0
        /// <inheritdoc />
        public async Task <PlaidResult <IList <Account> > > GetAccountsAsync(AccessToken accessToken)
        {
            Condition.Requires(accessToken).IsNotNull();

            PlaidRequest        balanceRequest = new PlaidRequest(this.clientId, this.clientSecret, accessToken.Value);
            HttpResponseMessage response       = await this.httpClient.PostAsJsonAsync("balance", balanceRequest);

            // Re-use add user result since it contains the account objects of interest
            AddUserResult userResult = await this.ProcessAddOrAuthResponse(response);

            PlaidResult <IList <Account> > result = new PlaidResult <IList <Account> >();

            if (userResult.Accounts != null)
            {
                result.Value = new List <Account>(userResult.Accounts);
            }

            result.Exception = userResult.Exception;

            return(result);
        }
示例#5
0
        /// <inheritdoc />
        public async Task <PlaidResult <IList <Account> > > GetAuthAccountDataAsync(AccessToken accessToken)
        {
            Condition.Requires(accessToken).IsNotNull();

            PlaidRequest        dataRequest = new PlaidRequest(this.clientId, this.clientSecret, accessToken.Value);
            HttpResponseMessage response    = await this.httpClient.PostAsJsonAsync(GetEndpoint(ApiType.Auth, "get"), dataRequest);

            string responseJson = await response.Content.ReadAsStringAsync();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                // Can re-use AddUserResponse since it has accounts, just ignore transactions
                AddUserResponse dataResponse = JsonConvert.DeserializeObject <AddUserResponse>(responseJson);

                return(new PlaidResult <IList <Account> >(dataResponse?.Accounts?.Select(a => a.ToAccount()).ToList()));
            }

            PlaidResult <IList <Account> > errorResult = new PlaidResult <IList <Account> >();

            errorResult.Exception = await this.ParseException(response, responseJson);

            return(errorResult);
        }