/// <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)); }
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); }
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); }
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); }
/// <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)); }
/// <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); }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }
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); }
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)); }
/// <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)); }