Esempio n. 1
0
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas inscritas para transferencia de saldos al usuario actual.
        /// </summary>
        /// <param name="cardHolderDocType">El tipo de documento del titular de la cuenta que se desea registrar.</param>
        /// <param name="cardHolderDocNumber">El número de documento del titular de la cuenta que se desea registrar.</param>
        /// <param name="pinNumber">El pin transaccional del usuario autenticado.</param>
        /// <param name="accountNumber">El número de cuenta que se desea registrar o <c>null</c> para que el sistema busque el número de cuenta asociado con el tarjetahabiente.</param>
        /// <param name="alias">El nombre con el que se desea identificar la cuenta a registrar.</param>
        public void LinkTransferAccount(
            string cardHolderDocType,
            string cardHolderDocNumber,
            string pinNumber,
            string accountNumber = null,
            string alias         = null)
        {
            if (!ServiceLocator.Instance.Runtime.IsDevelopment)
            {
                Throw.IfNullOrEmpty(cardHolderDocType, nameof(cardHolderDocType));
                Throw.IfNullOrEmpty(cardHolderDocNumber, nameof(cardHolderDocNumber));
                Throw.IfNullOrEmpty(alias, nameof(alias));
            }

            LinkTransferAccountInfo linkTransferAccountInfo = new LinkTransferAccountInfo(
                cardHolderDocType,
                cardHolderDocNumber,
                alias,
                accountNumber,
                pinNumber);
            IRestRequest request = new AspenRequest(Scope.Delegated, EndpointMapping.LinkTransferAccountFromCurrentUser);

            request.AddJsonBody(linkTransferAccountInfo);
            this.Execute(request);
        }
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas habilitadas para transferencias.
        /// </summary>
        /// <param name="accountInfo">Información de la cuenta a vincular.</param>
        public void LinkTransferAccount(ITransferAccountRequestInfo accountInfo)
        {
            IRestRequest request = new AspenRequest(this, $"/transfers/accounts", Method.POST);

            request.AddJsonBody(accountInfo);
            this.Execute(request);
        }
        /// <summary>
        /// Valida un código de activación asociado con un usuario.
        /// </summary>
        /// <param name="code">Código de activación que se desea validar.</param>
        /// <param name="nickname">Identificador del usuario para el que se emitió el código de activación.</param>
        /// <param name="alias">Identificador que se desea asociar con el usuario o  <see langword="null" /> para utilizar el valor de <paramref name="nickname" />.</param>
        /// <param name="channelId">Identificador del canal para el que se generó el código de activación.</param>
        public void ValidateActivationCode(string code, string nickname, string alias = null, string channelId = null)
        {
            IRestRequest request = new AspenRequest(this, Routes.Management.ActivationCode, Method.POST);

            request.AddJsonBody(new { Code = code, Nickname = nickname, EnrollmentAlias = alias, ChannelId = channelId });
            this.Execute(request);
        }
        /// <summary>
        /// Solicita el envío de un código de activación a través de un mensaje SMS.
        /// </summary>
        /// <param name="nickname">Nombre con el que se registra el usuario. Solo para ambientes de desarrollo.</param>
        /// <returns>En ambientes de desarrollo, una instancia de <see cref="IActivationCodeInfo" /> con la información de los datso generados.</returns>
        public IActivationCodeInfo RequestActivationCode(string nickname = null)
        {
            IRestRequest request = new AspenRequest(this, Routes.Users.ActivationCode, Method.POST);

            request.AddJsonBody(new { Nickname = nickname });
            return(this.Execute <ActivationCodeInfo>(request));
        }
Esempio n. 5
0
        internal void RequestSingleUseTokenAvoidingValidation(
            string docType,
            string docNumber,
            string metadata      = null,
            TagsInfo tags        = null,
            bool excludeMetadata = false,
            bool excludeTags     = false)
        {
            IRestRequest request = new AspenRequest(this, Routes.Tokens.RequestToken, Method.POST);
            dynamic      body    = new ExpandoObject();

            body.DocType   = docType;
            body.DocNumber = docNumber;

            if (!excludeMetadata)
            {
                body.Metadata = metadata;
            }

            if (!excludeTags)
            {
                body.Tags = tags;
            }

            request.AddJsonBody(body);
            this.Execute(request);
        }
        /// <summary>
        /// Establece el pin transaccional del usuario actual.
        /// </summary>
        /// <param name="pinNumber">Número de pin que se debe asignar al usuario actual.</param>
        /// <param name="activationCode">Código de activación (SMS) recibido por el usuario.</param>
        public void SetPin(string pinNumber, string activationCode, string nickname = null)
        {
            IRestRequest request = new AspenRequest(this, Routes.Users.Pin, Method.POST);

            request.AddJsonBody(new { PinNumber = pinNumber, ActivationCode = activationCode, Nickname = nickname, EnrollmentAlias = nickname });
            this.Execute(request);
        }
Esempio n. 7
0
        internal void RefundReversalAvoidingValidation(
            string transactionId,
            string docType,
            string docNumber,
            string accountType,
            object amount,
            TagsInfo tags    = null,
            bool excludeTags = false)
        {
            IRestRequest request = new AspenRequest(this, Routes.Financial.Refund, Method.PATCH);
            dynamic      body    = new ExpandoObject();

            body.TransactionId = transactionId;
            body.DocType       = docType;
            body.DocNumber     = docNumber;
            body.AccountType   = accountType;
            body.Amount        = amount;

            if (!excludeTags)
            {
                body.Tags = tags;
            }

            request.AddJsonBody(body);
            this.Execute(request);
        }
Esempio n. 8
0
        private void PerformReversal(string url, ReversalInfo reversalInfo)
        {
            Throw.IfNullOrEmpty(url, nameof(url));
            IRestRequest request = new AspenRequest(this, url, Method.PATCH);

            request.AddJsonBody(reversalInfo);
            this.Execute(request);
        }
        /// <summary>
        /// Actualiza el pin transaccional del usuario actual a partir del pin o clave actual.
        /// </summary>
        /// <param name="currentPin">Número de pin transaccional o clave de cuenta actual.</param>
        /// <param name="newPin">Nuevo número de pin transaccional.</param>
        public void UpdatePin(string currentPin, string newPin)
        {
            Throw.IfNullOrEmpty(currentPin, nameof(currentPin));
            Throw.IfNullOrEmpty(newPin, nameof(newPin));

            IRestRequest request = new AspenRequest(this, Routes.Users.Pin, Method.PATCH);

            request.AddJsonBody(new { CurrentValue = currentPin, NewValue = newPin });
            this.Execute(request);
        }
Esempio n. 10
0
        /// <summary>
        /// Solicita el envío de un token transaccional para un usuario.
        /// </summary>
        /// <param name="docType">Tipo de documento del usuario.</param>
        /// <param name="docNumber">Número de documento del usuario.</param>
        /// <param name="metadata">Metadatos que se desean asociar al token.</param>
        /// <param name="tags">Tags relacionados con la solicitud.</param>
        public void RequestSingleUseToken(string docType, string docNumber, string metadata = null, TagsInfo tags = null)
        {
            Throw.IfNullOrEmpty(docType, nameof(docType));
            Throw.IfNullOrEmpty(docNumber, nameof(docNumber));

            IRestRequest request = new AspenRequest(this, Routes.Tokens.RequestToken, Method.POST);

            request.AddJsonBody(new { DocType = docType, DocNumber = docNumber, Metadata = metadata, Tags = tags });
            this.Execute(request);
        }
        /// <summary>
        /// Establece el pin transaccional del usuario actual.
        /// </summary>
        /// <param name="pinNumber">Número de pin que se debe asignar al usuario actual.</param>
        /// <param name="activationCode">Código de activación (SMS) recibido por el usuario.</param>
        /// <returns>Instancia de <see cref="Task"/> con la información de la ejecución.</returns>
        public async Task <IRestResponse> SetPinAsync(string pinNumber, string activationCode)
        {
            Throw.IfNullOrEmpty(pinNumber, nameof(pinNumber));
            Throw.IfNullOrEmpty(activationCode, nameof(activationCode));

            IRestRequest request = new AspenRequest(this, Routes.Users.Pin, Method.POST);

            request.AddJsonBody(new { PinNumber = pinNumber, ActivationCode = activationCode });
            return(await this.ExecuteAsync(request));
        }
Esempio n. 12
0
        /// <summary>
        /// Comprueba la validez de un token transaccional.
        /// </summary>
        /// <param name="docType">Tipo de documento del usuario para el que se generó el token transaccional.</param>
        /// <param name="docNumber">Número de documento del usuario para el que se generó el token transaccional.</param>
        /// <param name="token">Token que se desea validar.</param>
        /// <param name="metadata">Metadatos que se asociaron al token al momento de su generación.</param>
        /// <param name="amount">Valor para el que se generó el token.</param>
        /// <param name="accountType">Bolsillo para el que se generó el token.</param>
        public void ValidateSingleUseToken(string docType, string docNumber, string token, string metadata = null, int?amount = null, string accountType = null)
        {
            Throw.IfNullOrEmpty(token, nameof(token));
            PlaceholderFormatter formatter = new PlaceholderFormatter(Routes.Tokens.Redeem);

            formatter.Add("@[Token]", token);
            IRestRequest request = new AspenRequest(this, formatter.ToString(), Method.PUT);

            request.AddJsonBody(new { Metadata = metadata, DocType = docType, DocNumber = docNumber, Amount = amount, AccountType = accountType });
            this.Execute(request);
        }
Esempio n. 13
0
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas inscritas para transferencia de saldos al usuario actual.
        /// </summary>
        /// <param name="accountInfo">La información de la cuenta a vincular.</param>
        public void LinkTransferAccount(ILinkTransferAccountInfo accountInfo)
        {
            if (!ServiceLocator.Instance.Runtime.IsDevelopment)
            {
                Throw.IfNull(accountInfo, nameof(accountInfo));
            }

            IRestRequest request = new AspenRequest(Scope.Delegated, EndpointMapping.LinkTransferAccountFromCurrentUser);

            request.AddJsonBody(accountInfo);
            this.Execute(request);
        }
Esempio n. 14
0
        /// <summary>
        /// Solicita el procesamiento de anulación de una transacción.
        /// </summary>
        /// <param name="authNumber">Número de autorización de la transacción original.</param>
        /// <param name="docType">Tipo de documento del usuario.</param>
        /// <param name="docNumber">Número de documento del usuario.</param>
        /// <param name="accountType">Tipo de cuenta de la que se retiran los fondos.</param>
        /// <param name="amount">Valor del retiro.</param>
        /// <param name="tags">Tags relacionados con la solicitud.</param>
        public void Refund(string authNumber, string docType, string docNumber, string accountType, int amount, TagsInfo tags = null)
        {
            Throw.IfNullOrEmpty(authNumber, nameof(authNumber));
            Throw.IfNullOrEmpty(docType, nameof(docType));
            Throw.IfNullOrEmpty(docNumber, nameof(docNumber));
            Throw.IfNullOrEmpty(accountType, nameof(accountType));
            Throw.IfEmpty(amount, nameof(amount));

            IRestRequest request = new AspenRequest(this, Routes.Financial.Refund, Method.POST);

            request.AddJsonBody(new { AuthNumber = authNumber, DocType = docType, DocNumber = docNumber, AccountType = accountType, Amount = amount, Tags = tags });
            this.Execute(request);
        }
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas habilitadas para transferencias.
        /// </summary>
        /// <param name="docType">Tipo de documento del cliente al cual se vinculará la cuenta.</param>
        /// <param name="docNumber">Número de documento del cliente al cual se vinculará la cuenta.</param>
        /// <param name="accountInfo">Información de la cuenta a vincular.</param>
        public void LinkTransferAccount(string docType, string docNumber, ITransferAccountRequestInfo accountInfo)
        {
            IDictionary <string, string> tokens = new Dictionary <string, string>
            {
                { "@[DocType]", docType },
                { "@[DocNumber]", docNumber }
            };

            IRestRequest request = new AspenRequest(this, Routes.Management.LinkTransferAccount.ReplaceTokens(tokens), Method.POST);

            request.AddJsonBody(accountInfo);
            this.Execute(request);
        }
        /// <summary>
        /// Envía la solicitud al servicio.
        /// </summary>
        /// <typeparam name="TResponse">Tipo del objeto al que se convierte la respuesta del servicio.</typeparam>
        /// <param name="resource">Url del recurso solicitado.</param>
        /// <param name="method">Método o verbo HTTP para invocar el recurso.</param>
        /// <param name="body">Datos que se envian en el cuerpo de la solicitud.</param>
        /// <returns>Instancia de TResponse que represeta los datos de respuesta del servicio.</returns>
        private TResponse Submit <TResponse>(string resource, Method method, object body)
            where TResponse : class, new()
        {
            string       url     = $"/app/ext/{resource.TrimStart('/').TrimEnd('/')}";
            AspenRequest request = new AspenRequest(url, method);

            if (body != null)
            {
                request.AddJsonBody(body);
            }

            return(this.Execute <TResponse>(request));
        }
Esempio n. 17
0
        /// <summary>
        /// Solicita el procesamiento de una transacción de pago.
        /// </summary>
        /// <param name="docType">Tipo de documento del usuario.</param>
        /// <param name="docNumber">Número de documento del usuario.</param>
        /// <param name="token">Token transacional asociado con el usuario.</param>
        /// <param name="accountType">Tipo de cuenta de la que se toman los fondos.</param>
        /// <param name="amount">Valor del pago.</param>
        /// <param name="tags">Tags relacionados con la solicitud.</param>
        public void Payment(string docType, string docNumber, string token, string accountType, int amount, TagsInfo tags = null)
        {
            Throw.IfNullOrEmpty(docType, nameof(docType));
            Throw.IfNullOrEmpty(docNumber, nameof(docNumber));
            Throw.IfNullOrEmpty(token, nameof(token));
            Throw.IfNullOrEmpty(accountType, nameof(accountType));
            Throw.IfEmpty(amount, nameof(amount));

            IRestRequest request = new AspenRequest(this, Routes.Financial.Payment, Method.POST);

            request.AddJsonBody(new { DocType = docType, DocNumber = docNumber, Token = token, AccountType = accountType, Amount = amount, Tags = tags });
            this.Execute(request);
        }
Esempio n. 18
0
        /// <summary>
        /// Solicita el procesamiento de una transacción de pago sin validar localmente. Se expone como internal con el fin de validar el comportamiento del servicio Aspen.
        /// </summary>
        /// <param name="docType">Tipo de documento del usuario.</param>
        /// <param name="docNumber">Número de documento del usuario.</param>
        /// <param name="token">Token transacional asociado con el usuario.</param>
        /// <param name="accountType">Tipo de cuenta de la que se toman los fondos.</param>
        /// <param name="amount">Valor del pago.</param>
        /// <param name="tags">Tags relacionados con la solicitud.</param>
        /// <param name="excludeDocType"></param>
        /// <param name="excludeDocNumber"></param>
        /// <param name="excludeAmount"></param>
        /// <param name="excludeAccountType"></param>
        /// <param name="excludeTags"></param>
        internal void PaymentAvoidingValidation(
            string docType,
            string docNumber,
            string token,
            string accountType,
            object amount,
            TagsInfo tags           = null,
            bool excludeDocType     = false,
            bool excludeDocNumber   = false,
            bool excludeAmount      = false,
            bool excludeAccountType = false,
            bool excludeTags        = false)
        {
            IRestRequest request = new AspenRequest(this, Routes.Financial.Payment, Method.POST);
            dynamic      body    = new ExpandoObject();

            if (!excludeDocType)
            {
                body.DocType = docType;
            }

            if (!excludeDocNumber)
            {
                body.DocNumber = docNumber;
            }

            body.Token = token;

            if (!excludeAmount)
            {
                body.Amount = amount;
            }

            if (!excludeAccountType)
            {
                body.AccountType = accountType;
            }

            if (!excludeTags)
            {
                body.Tags = tags;
            }

            request.AddJsonBody(body);
            this.Execute(request);
        }
Esempio n. 19
0
        public void ValidateSingleUseTokenAvoidingValidation(
            string docType,
            string docNumber,
            string token,
            string metadata         = null,
            object amount           = null,
            string accountType      = null,
            bool excludeAmount      = false,
            bool excludeAccountType = false,
            bool excludeMetadata    = false)
        {
            dynamic body = new ExpandoObject();

            body.DocType   = docType;
            body.DocNumber = docNumber;

            if (!excludeMetadata)
            {
                body.Metadata = metadata;
            }

            if (!excludeAmount)
            {
                body.Amount = amount;
            }

            if (!excludeAccountType)
            {
                body.AccountType = accountType;
            }

            PlaceholderFormatter formatter = new PlaceholderFormatter(Routes.Tokens.Redeem);

            formatter.Add("@[Token]", token);
            IRestRequest request = new AspenRequest(this, formatter.ToString(), Method.PUT);

            request.AddJsonBody(body);
            this.Execute(request);
        }
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas inscritas de un usuario para transferencia de saldos.
        /// </summary>
        /// <param name="docType">El tipo de documento del cliente al cual se vinculará la cuenta.</param>
        /// <param name="docNumber">El número de documento del cliente al cual se vinculará la cuenta.</param>
        /// <param name="accountInfo">La información de la cuenta a vincular.</param>
        /// <exception cref="ArgumentException">Se produce cuando <paramref name="docType"/> o <paramref name="docNumber"/> es nulo o vacío.</exception>
        /// <exception cref="ArgumentNullException">Se produce cuando <paramref name="accountInfo"/> es nulo.</exception>
        public void LinkTransferAccount(
            string docType,
            string docNumber,
            ILinkTransferAccountInfo accountInfo)
        {
            if (!ServiceLocator.Instance.Runtime.IsDevelopment)
            {
                Throw.IfNullOrEmpty(docType, nameof(docType));
                Throw.IfNullOrEmpty(docNumber, nameof(docNumber));
                Throw.IfNull(accountInfo, nameof(accountInfo));
            }

            EndpointParameters endpointParameters = new EndpointParameters
            {
                { "@[OwnerDocType]", docType },
                { "@[OwnerDocNumber]", docNumber }
            };
            IRestRequest request = new AspenRequest(Scope.Autonomous, EndpointMapping.LinkTransferAccountByUserIdentity, endpointParameters);

            request.AddJsonBody(accountInfo);
            this.Execute(request);
        }
Esempio n. 21
0
        internal ITokenResponseInfo GetSingleUseTokenAvoidingValidation(
            string pinNumber,
            string metadata         = null,
            object amount           = null,
            string accountType      = null,
            string channelKey       = null,
            bool excludeAmount      = false,
            bool excludeAccountType = false,
            bool excludeMetadata    = false,
            bool excludeChannelKey  = false)
        {
            IRestRequest request = new AspenRequest(this, Routes.Tokens.Root, Method.POST);
            dynamic      body    = new ExpandoObject();

            body.pinNumber = pinNumber;

            if (!excludeMetadata)
            {
                body.Metadata = metadata;
            }

            if (!excludeAmount)
            {
                body.Amount = amount;
            }

            if (!excludeAccountType)
            {
                body.AccountType = accountType;
            }

            if (!excludeChannelKey)
            {
                body.ChannelKey = channelKey;
            }

            request.AddJsonBody(body);
            return(this.Execute <TokenResponseInfo>(request));
        }
Esempio n. 22
0
        /// <summary>
        /// Genera la información de un token transaccional de un solo uso.
        /// </summary>
        /// <param name="pinNumber">Pin transaccional del usuario.</param>
        /// <param name="channelKey">Canal para el token</param>
        /// <param name="metadata">Metadatos que se desean asociar al token.</param>
        /// <param name="amount">Valor del token.</param>
        /// <param name="accountType">Bolsillo para el que se genera el token.</param>
        /// <returns>Instancia de <see cref="ITokenResponseInfo" /> con la información del token.</returns>
        public ITokenResponseInfo GetSingleUseToken(string pinNumber, string metadata = null, int?amount = null, string accountType = null, string channelKey = null)
        {
            Throw.IfNullOrEmpty(pinNumber, nameof(pinNumber));
            if (metadata.HasValue())
            {
                Throw.IfEmpty(metadata, nameof(metadata));
            }

            if (accountType.HasValue())
            {
                Throw.IfEmpty(accountType, nameof(accountType));
            }

            if (channelKey.HasValue())
            {
                Throw.IfEmpty(channelKey, nameof(channelKey));
            }

            IRestRequest request = new AspenRequest(this, Routes.Tokens.Root, Method.POST);

            request.AddJsonBody(new { Metadata = metadata, PinNumber = pinNumber, Amount = amount, AccountType = accountType, ChannelKey = channelKey });
            return(this.Execute <TokenResponseInfo>(request));
        }