diff --git a/PIX-Sicoob.sln b/PIX-Sicoob.sln index ab88966..aa4080a 100644 --- a/PIX-Sicoob.sln +++ b/PIX-Sicoob.sln @@ -20,37 +20,97 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Debug|x64.ActiveCfg = Debug|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Debug|x64.Build.0 = Debug|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Debug|x86.ActiveCfg = Debug|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Debug|x86.Build.0 = Debug|Any CPU {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Release|Any CPU.ActiveCfg = Release|Any CPU {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Release|Any CPU.Build.0 = Release|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Release|x64.ActiveCfg = Release|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Release|x64.Build.0 = Release|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Release|x86.ActiveCfg = Release|Any CPU + {F4E1E8D3-9690-48C0-BDAB-8E89C6486BA1}.Release|x86.Build.0 = Release|Any CPU {31571823-D5E5-4F24-8A33-33006862268F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {31571823-D5E5-4F24-8A33-33006862268F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Debug|x64.ActiveCfg = Debug|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Debug|x64.Build.0 = Debug|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Debug|x86.ActiveCfg = Debug|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Debug|x86.Build.0 = Debug|Any CPU {31571823-D5E5-4F24-8A33-33006862268F}.Release|Any CPU.ActiveCfg = Release|Any CPU {31571823-D5E5-4F24-8A33-33006862268F}.Release|Any CPU.Build.0 = Release|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Release|x64.ActiveCfg = Release|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Release|x64.Build.0 = Release|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Release|x86.ActiveCfg = Release|Any CPU + {31571823-D5E5-4F24-8A33-33006862268F}.Release|x86.Build.0 = Release|Any CPU {C796024A-477D-460A-B511-D6188415FFA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C796024A-477D-460A-B511-D6188415FFA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Debug|x64.ActiveCfg = Debug|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Debug|x64.Build.0 = Debug|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Debug|x86.ActiveCfg = Debug|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Debug|x86.Build.0 = Debug|Any CPU {C796024A-477D-460A-B511-D6188415FFA2}.Release|Any CPU.ActiveCfg = Release|Any CPU {C796024A-477D-460A-B511-D6188415FFA2}.Release|Any CPU.Build.0 = Release|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Release|x64.ActiveCfg = Release|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Release|x64.Build.0 = Release|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Release|x86.ActiveCfg = Release|Any CPU + {C796024A-477D-460A-B511-D6188415FFA2}.Release|x86.Build.0 = Release|Any CPU {0466318D-33CF-46ED-8466-3809F01A97C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0466318D-33CF-46ED-8466-3809F01A97C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Debug|x64.ActiveCfg = Debug|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Debug|x64.Build.0 = Debug|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Debug|x86.ActiveCfg = Debug|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Debug|x86.Build.0 = Debug|Any CPU {0466318D-33CF-46ED-8466-3809F01A97C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {0466318D-33CF-46ED-8466-3809F01A97C3}.Release|Any CPU.Build.0 = Release|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Release|x64.ActiveCfg = Release|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Release|x64.Build.0 = Release|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Release|x86.ActiveCfg = Release|Any CPU + {0466318D-33CF-46ED-8466-3809F01A97C3}.Release|x86.Build.0 = Release|Any CPU {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Debug|x64.ActiveCfg = Debug|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Debug|x64.Build.0 = Debug|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Debug|x86.ActiveCfg = Debug|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Debug|x86.Build.0 = Debug|Any CPU {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Release|Any CPU.Build.0 = Release|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Release|x64.ActiveCfg = Release|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Release|x64.Build.0 = Release|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Release|x86.ActiveCfg = Release|Any CPU + {4C140134-CF64-4104-82CA-5A09AD0E2AF5}.Release|x86.Build.0 = Release|Any CPU {05DD23BA-333E-4024-95A7-A9A1A8719925}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {05DD23BA-333E-4024-95A7-A9A1A8719925}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Debug|x64.ActiveCfg = Debug|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Debug|x64.Build.0 = Debug|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Debug|x86.ActiveCfg = Debug|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Debug|x86.Build.0 = Debug|Any CPU {05DD23BA-333E-4024-95A7-A9A1A8719925}.Release|Any CPU.ActiveCfg = Release|Any CPU {05DD23BA-333E-4024-95A7-A9A1A8719925}.Release|Any CPU.Build.0 = Release|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Release|x64.ActiveCfg = Release|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Release|x64.Build.0 = Release|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Release|x86.ActiveCfg = Release|Any CPU + {05DD23BA-333E-4024-95A7-A9A1A8719925}.Release|x86.Build.0 = Release|Any CPU {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Debug|x64.ActiveCfg = Debug|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Debug|x64.Build.0 = Debug|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Debug|x86.ActiveCfg = Debug|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Debug|x86.Build.0 = Debug|Any CPU {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Release|Any CPU.Build.0 = Release|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Release|x64.ActiveCfg = Release|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Release|x64.Build.0 = Release|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Release|x86.ActiveCfg = Release|Any CPU + {CB15FFEA-0F15-4928-AB43-19E61BADD1FE}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Sicoob.Cobranca/Models/Shared/DadosPagador.cs b/Sicoob.Cobranca/Models/Shared/DadosPagador.cs index 310eafb..6c6ad5a 100644 --- a/Sicoob.Cobranca/Models/Shared/DadosPagador.cs +++ b/Sicoob.Cobranca/Models/Shared/DadosPagador.cs @@ -9,5 +9,10 @@ public class DadosPagador public string cidade { get; set; } public string cep { get; set; } public string uf { get; set; } - public string[] email { get; set; } + public string email { get; set; } } + +public class DadosPagadorRequest : DadosPagador +{ + public long numeroCliente { get; set; } +} \ No newline at end of file diff --git a/Sicoob.Cobranca/Models/v3/AlterarBoletoRequest.cs b/Sicoob.Cobranca/Models/v3/AlterarBoletoRequest.cs index c754896..15cf6b1 100644 --- a/Sicoob.Cobranca/Models/v3/AlterarBoletoRequest.cs +++ b/Sicoob.Cobranca/Models/v3/AlterarBoletoRequest.cs @@ -46,11 +46,22 @@ public class SeuNumero public class Desconto { public int tipoDesconto { get; set; } + + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataPrimeiroDesconto { get; set; } + public decimal valorPrimeiroDesconto { get; set; } + + [JsonConverter(typeof(CustomDateTimeConverter))] + [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] public DateTime? dataSegundoDesconto { get; set; } + public decimal? valorSegundoDesconto { get; set; } + + [JsonConverter(typeof(CustomDateTimeConverter))] + [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] public DateTime? dataTerceiroDesconto { get; set; } + public decimal? valorTerceiroDesconto { get; set; } } @@ -62,6 +73,7 @@ public class Abatimento public class Multa { public int tipoMulta { get; set; } + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataMulta { get; set; } public decimal valorMulta { get; set; } } @@ -69,6 +81,7 @@ public class Multa public class JurosMora { public int tipoJurosMora { get; set; } + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataJurosMora { get; set; } public decimal valorJurosMora { get; set; } } @@ -103,11 +116,13 @@ public class Pix public class ProrrogacaoVencimento { + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataVencimento { get; set; } } public class ProrrogacaoLimitePagamento { + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataLimitePagamento { get; set; } } diff --git a/Sicoob.Cobranca/Models/v3/ConsultaFaixasNossoNumero.cs b/Sicoob.Cobranca/Models/v3/ConsultaFaixasNossoNumero.cs new file mode 100644 index 0000000..89781de --- /dev/null +++ b/Sicoob.Cobranca/Models/v3/ConsultaFaixasNossoNumero.cs @@ -0,0 +1,9 @@ +namespace Sicoob.Cobranca.Models.v3; + +public class ConsultaFaixasNossoNumeroRequest +{ + public int numeroCliente { get; set; } + public int codigoModalidade { get; set; } + public int quantidade { get; set; } + public int? numeroContratoCobranca { get; set; } +} \ No newline at end of file diff --git a/Sicoob.Cobranca/Models/v3/ConsultaWebhookRequest.cs b/Sicoob.Cobranca/Models/v3/ConsultaWebhookRequest.cs new file mode 100644 index 0000000..562afdd --- /dev/null +++ b/Sicoob.Cobranca/Models/v3/ConsultaWebhookRequest.cs @@ -0,0 +1,99 @@ +namespace Sicoob.Cobranca.Models.v3; + +using System; +using System.Diagnostics; +using Newtonsoft.Json; + +public class ConsultaWebhookRequest +{ + [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] + public long? idWebhook { get; set; } + [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] + public int? codigoTipoMovimento { get; set; } +} + +public class ConsultaWebhookResponse +{ + public DadosWebhook[]? resultado { get; set; } +} + +public class ConsultaSolicitacoesWebhookRequest +{ + [JsonConverter(typeof(CustomDateTimeConverter))] + public DateTime dataSolicitacao { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public int? pagina { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public int? codigoSolicitacaoSituacao { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string? codigoBarras { get; set; } = null; + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public int? nossoNumero { get; set; } +} + +public class ConsultaSolicitacoesWebhookResponse +{ + public SolicitacoesWebhookResponse? resultado { get; set; } +} + +public class IncluirWebhooksResponse +{ + public DadosWebhook? resultado { get; set; } +} + +public class DadosWebhook +{ + public long idWebhook { get; set; } + public string url { get; set; } = null; + public string email { get; set; } + public int codigoTipoMovimento { get; set; } + public string descricaoTipoMovimento { get; set; } + public int codigoPeriodoMovimento { get; set; } + public string descricaoPeriodoMovimento { get; set; } + public int codigoSituacao { get; set; } + public string descricaoSituacao { get; set; } + public DateTime dataHoraCadastro { get; set; } + public DateTime dataHoraUltimaAlteracao { get; set; } + public DateTime dataHoraInativacao { get; set; } + public string descricaoMotivoInativacao { get; set; } +} + +public class SolicitacoesWebhookResponse +{ + public int paginaAtual { get; set; } + public int totalPaginas { get; set; } + public int totalRegistros { get; set; } + public DadosSolicitacoesWebhookResponse[] webhookSolicitacoes { get; set; } +} + +public class DadosSolicitacoesWebhookResponse +{ + public int codigoWebhookSituacao { get; set; } + public string descricaoWebhookSituacao { get; set; } + public int codigoSolicitacaoSituacao { get; set; } + public string descricaoSolicitacaoSituacao { get; set; } + public int codigoTipoMovimento { get; set; } + public string descricaoTipoMovimento { get; set; } + public int codigoPeriodoMovimento { get; set; } + public string descricaoPeriodoMovimento { get; set; } + public string descricaoErroProcessamento { get; set; } + public DateTime dataHoraCadastro { get; set; } + public bool validacaoWebhook { get; set; } + public int nossoNumero { get; set; } + public string codigoBarras { get; set; } + public DadosSolicitacoesWebhookNotificacoesResponse[] webhookNotificacoes { get; set; } +} + +public class DadosSolicitacoesWebhookNotificacoesResponse +{ + public string url { get; set; } + public DateTime dataHoraInicio { get; set; } + public DateTime dataHoraFim { get; set; } + public int tempoComunicao { get; set; } + public int codigoStatusRequisicao { get; set; } + public string descricaoCodigoStatusRequisicao { get; set; } +} \ No newline at end of file diff --git a/Sicoob.Cobranca/Models/v3/IncluirBoleto.cs b/Sicoob.Cobranca/Models/v3/IncluirBoleto.cs index 3ab5805..c3ea290 100644 --- a/Sicoob.Cobranca/Models/v3/IncluirBoleto.cs +++ b/Sicoob.Cobranca/Models/v3/IncluirBoleto.cs @@ -29,15 +29,15 @@ public class IncluirBoletoRequest public int tipoDesconto { get; set; } [JsonConverter(typeof(CustomDateTimeConverter))] [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] - public DateTime dataPrimeiroDesconto { get; set; } + public DateTime? dataPrimeiroDesconto { get; set; } public decimal valorPrimeiroDesconto { get; set; } [JsonConverter(typeof(CustomDateTimeConverter))] [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] - public DateTime dataSegundoDesconto { get; set; } + public DateTime? dataSegundoDesconto { get; set; } public decimal valorSegundoDesconto { get; set; } [JsonConverter(typeof(CustomDateTimeConverter))] [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] - public DateTime dataTerceiroDesconto { get; set; } + public DateTime? dataTerceiroDesconto { get; set; } public decimal valorTerceiroDesconto { get; set; } public int tipoMulta { get; set; } [JsonConverter(typeof(CustomDateTimeConverter))] diff --git a/Sicoob.Cobranca/Models/v3/IncluirWebhook.cs b/Sicoob.Cobranca/Models/v3/IncluirWebhook.cs new file mode 100644 index 0000000..a927b3a --- /dev/null +++ b/Sicoob.Cobranca/Models/v3/IncluirWebhook.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; + +namespace Sicoob.Cobranca.Models.v3; + +public class AlterarWebhookRequest +{ + public string url { get; set; } + public string email { get; set; } +} + +public class IncluirWebhookRequest : AlterarWebhookRequest +{ + [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] + public int codigoTipoMovimento { get; set; } + [JsonProperty(NullValueHandling=NullValueHandling.Ignore)] + public int codigoPeriodoMovimento { get; set; } +} \ No newline at end of file diff --git a/Sicoob.Cobranca/Models/v3/MovimentacaoRequest.cs b/Sicoob.Cobranca/Models/v3/MovimentacaoRequest.cs index 74e82c4..53d3f7a 100644 --- a/Sicoob.Cobranca/Models/v3/MovimentacaoRequest.cs +++ b/Sicoob.Cobranca/Models/v3/MovimentacaoRequest.cs @@ -1,4 +1,5 @@ using System; +using Newtonsoft.Json; namespace Sicoob.Cobranca.Models.v3; @@ -9,6 +10,10 @@ public class MovimentacaoRequest /// 1. Entrada 2. Prorrogação 3. A Vencer 4. Vencido 5. Liquidação 6. Baixa /// public int tipoMovimento { get; set; } + + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataInicial { get; set; } + + [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime dataFinal { get; set; } } \ No newline at end of file diff --git a/Sicoob.Cobranca/Models/v3/WebhookCallback.cs b/Sicoob.Cobranca/Models/v3/WebhookCallback.cs new file mode 100644 index 0000000..254f357 --- /dev/null +++ b/Sicoob.Cobranca/Models/v3/WebhookCallback.cs @@ -0,0 +1,38 @@ +using System; + +namespace Sicoob.Cobranca.Models.v3; + +public class WebhookCallback +{ + public int idWebhook { get; set; } + public int tipoMovimento { get; set; } + public WebhookDadosCallback dados { get; set; } +} + +public class WebhookDadosCallback +{ + public string numeroIdentificadorBaixa { get; set; } + public string codigoBarrasBoleto { get; set; } + public string codigoBarrasBaixa { get; set; } + public string nossoNumero { get; set; } + public string seuNumero { get; set; } + public string codigoBancoRecebedor { get; set; } + public int codigoAgenciaRecebedora { get; set; } + public int numeroCliente { get; set; } + public string cpfCnpjBeneficiario { get; set; } + public string codigoTipoPessoaPagador { get; set; } + public string cpfCnpjPagador { get; set; } + public string nomePagador { get; set; } + public string codigoTipoPessoaPortador { get; set; } + public string cpfCnpjPortador { get; set; } + public string nomePortador { get; set; } + public decimal valorBoleto { get; set; } + public decimal valorPagamento { get; set; } + public int codigoCanalPagamento { get; set; } + public DateTime dataEmissao { get; set; } + public DateTime dataVencimento { get; set; } + public DateTime? dataLimitePagamento { get; set; } + public DateTime dataHoraSituacaoBaixa { get; set; } + public bool baixaRealizadaEmContingencia { get; set; } + public bool cancelamentoBaixa { get; set; } +} \ No newline at end of file diff --git a/Sicoob.Cobranca/SicoobCobrancaV3.cs b/Sicoob.Cobranca/SicoobCobrancaV3.cs index de4b06b..8d78589 100644 --- a/Sicoob.Cobranca/SicoobCobrancaV3.cs +++ b/Sicoob.Cobranca/SicoobCobrancaV3.cs @@ -127,6 +127,28 @@ public async Task ConsultarBoletosPagador(string { return await ExecutaChamadaAsync(() => clientApi.PostAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos", boleto)); } + + /// + /// Consulta de dados de faixas de nosso número disponíveis. + /// Serviço para consulta de dados de faixas de nosso número disponíveis. + /// Quando o campo validaDigitoVerificadorNossoNumero retornar o valor "0" a faixa "numeroInicial" e "numeroFinal" refere-se a numeração final (exemplo: 10 e 15 - utilização: 1-0 1-1 1-2 1-3 1-4 1-5). + /// Mas se o campo validaDigitoVerificadorNossoNumero retornar o valor "1" a faixa "numeroInicial" e "numeroFinal" deverá ser calculado o DV (exemplo: 10 e 15 - utilização: 10-4 11-8 12-0 13-1 14-7 15-9). + /// + /// + /// + /// + /// + public async Task ConsultarFaixasNossoNumeroDisponivel(int quantidade, int modalidade = (int)Modalidade.SimplesComRegistro, int? numeroContratoCobranca = null) + { + var consulta = new ConsultaFaixasNossoNumeroRequest() + { + codigoModalidade = modalidade, + numeroCliente = numeroContrato, + quantidade = quantidade, + numeroContratoCobranca = numeroContratoCobranca + }; + return await ExecutaChamadaAsync(() => clientApi.GetAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos/faixas-nosso-numero", consulta)); + } public async Task BaixarBoletos(int nossoNumero, int codigoModalidade) { @@ -135,24 +157,66 @@ public async Task BaixarBoletos(int nossoNumero, int codigoModalidade) numeroCliente = numeroContrato, codigoModalidade = codigoModalidade }; - await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/baixar", baixa)); + await ExecutaChamadaAsync(() => clientApi.PostAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/baixar", baixa)); + } + + public async Task AlterarBoleto(int nossoNumero, AlterarBoletoRequest boletos) + { + await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos/" + nossoNumero, boletos)); + } + + /* Pagador */ + public async Task PagadorBoletos(DadosPagadorRequest dadosPagador) + => await ExecutaChamadaAsync(() => clientApi.PutAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/pagadores", dadosPagador)); + + /* Negativação */ + public async Task NegativarBoletos(int nossoNumero, int codigoModalidade) + { + var protesto = new ProtestoRequest + { + numeroCliente = numeroContrato, + codigoModalidade = codigoModalidade, + }; + await ExecutaChamadaAsync(() => clientApi.PostAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/negativacoes", protesto)); } + public async Task CancelarNegativacaoBoletos(int nossoNumero, int codigoModalidade) + { + var protesto = new ProtestoRequest + { + numeroCliente = numeroContrato, + codigoModalidade = codigoModalidade, + }; + await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/negativacoes", protesto)); + } + + public async Task BaixarNegativacaoBoletos(int nossoNumero) + => await ExecutaChamadaAsync(() => clientApi.DeleteAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/negativacoes")); + + /* Protesto */ public async Task ProtestarBoletos(int nossoNumero, int codigoModalidade) { var protesto = new ProtestoRequest { numeroCliente = numeroContrato, codigoModalidade = codigoModalidade, - }; + }; await ExecutaChamadaAsync(() => clientApi.PostAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/protestos", protesto)); } - - public async Task AlterarBoleto(int nossoNumero, AlterarBoletoRequest boletos) + + public async Task CancelarProtestoBoletos(int nossoNumero, int codigoModalidade) { - await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos/" + nossoNumero, boletos)); + var protesto = new ProtestoRequest + { + numeroCliente = numeroContrato, + codigoModalidade = codigoModalidade, + }; + await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/protestos", protesto)); } + public async Task DesistirProtestoBoletos(int nossoNumero) + => await ExecutaChamadaAsync(() => clientApi.DeleteAsync(ConfigApi.UrlApi + $"cobranca-bancaria/v3/boletos/{nossoNumero}/protestos")); + /* Movimentação */ public async Task SolicitarMovimentacao(Tipo tipoMovimento, DateTime data) { @@ -170,7 +234,7 @@ private async Task SolicitarMovimentaca public async Task ConsultarSituacaoSolicitacao(int codigoSolicitacao) { await VerificaAtualizaCredenciaisAsync(); - var result = await clientApi.GetAsync>( ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos/solicitacoes/movimentacao", new { numeroCliente = numeroContrato, codigoSolicitacao }); + var result = await clientApi.GetAsync>(ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos/movimentacoes", new { numeroCliente = numeroContrato, codigoSolicitacao }); if (result.IsSuccessStatusCode) return result.Data.resultado; @@ -189,9 +253,10 @@ private async Task SolicitarMovimentaca private async Task DownloadArquivoMovimentacao(int codigoSolicitacao, int idArquivo) { - var retorno = await ExecutaChamadaAsync(() => clientApi.GetAsync>(ConfigApi.UrlApi + "/cobranca-bancaria/v3/boletos/movimentacoes/download", new { numeroCliente = numeroContrato, codigoSolicitacao, idArquivo })); + var retorno = await ExecutaChamadaAsync(() => clientApi.GetAsync>(ConfigApi.UrlApi + "cobranca-bancaria/v3/boletos/movimentacoes/download", new { numeroCliente = numeroContrato, codigoSolicitacao, idArquivo })); return retorno.resultado; } + public async Task BaixarMovimentacoes(int codigoSolicitacao, int[] arquivos) { var lst = new List(); @@ -214,6 +279,98 @@ public async Task BaixarMovimentacoes(int codigoSolicit return lst.ToArray(); } + /* Webhook */ + + /// + /// Consultar os webhooks cadastrados. + /// Serviço para consultar os detalhes dos webhooks cadastrados. + /// + /// Identificador único do webhook. + /// Código do tipo de movimento do webhook. 7 - Pagamento (Baixa operacional) + /// Webhooks cadastradros. + public async Task ConsultarWebHooksAsync(long? idWebhook = null, int? codigoTipoMovimento = null) + { + var consulta = new ConsultaWebhookRequest() + { + idWebhook = idWebhook, + codigoTipoMovimento = codigoTipoMovimento + }; + return await ExecutaChamadaAsync(() => clientApi.GetAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/webhooks", consulta)); + } + + /// + /// Cadastrar um webhook para receber notificações de acordo com o tipo de movimento. + /// Este serviço permite cadastrar uma URL que será notificada sempre que ocorrer um evento associado a um tipo de movimento. O webhook pode ser configurado para o período de movimentação atual (D0). + /// + /// Url a ser chamada com POST. A URL deve ser https. + /// E-mail associado ao webhook. + /// Código do tipo de movimento do webhook. 7 - Pagamento (Baixa operacional) + /// Código do período de movimento. 1 - Movimento atual (D0) + /// + public async Task CriarWebHookAsync(string url, string email, int codigoTipoMovimento = 7, int codigoPeriodoMovimento = 1) { + IncluirWebhookRequest webhook = new IncluirWebhookRequest() + { + url = url, + email = email, + codigoTipoMovimento = codigoTipoMovimento, + codigoPeriodoMovimento = codigoPeriodoMovimento + }; + return await ExecutaChamadaAsync(() => clientApi.PostAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/webhooks", webhook)); + } + + /// + /// Atualizar um webhook cadastrado. + /// Serviço de atualização de webhook. Ao modificar a URL, a situação do webhook será automaticamente alterada para '1 - Aguardando validação' e permanecerá assim até que a nova URL seja validada com sucesso. + /// + /// Identificador único do webhook. + /// Dados para alteração do webhook. + /// + public async Task AlterarWebhookAsync(long idWebhook, AlterarWebhookRequest webhook) + => await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/webhooks/" + idWebhook, webhook)); + + + /// + /// Excluir um webhook. + /// Serviço responsável por remover permanentemente um webhook registrado, encerrando o envio de notificações para a URL vinculada." + /// + /// Identificador único do webhook. + /// + public async Task ExcluirWebhookAsync(long idWebhook) + => await ExecutaChamadaAsync(() => clientApi.DeleteAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/webhooks/" + idWebhook)); + + /// + /// Reativar um webhook inativo. + /// Serviço de reativação de webhook desativado, restabelecendo o recebimento de notificações. A situação do webhook será atualizada para '1 - Aguardando validação' e permanecerá assim até que a URL seja validada com sucesso. + /// + /// Identificador único do webhook. + /// + public async Task ReativarWebhookAsync(long idWebhook) + => await ExecutaChamadaAsync(() => clientApi.PatchAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/webhooks/" + idWebhook + "/reativar", null)); + + /// + /// Consultar solicitações de um webhook. + /// Consulta as solicitações de notificação para um webhook com base na data de solicitação informada. + /// + /// Identificador único do webhook. + /// Data da solicitação. Formato: yyyy-MM-dd + /// Número da página a ser consultada. + /// Código da situação da solicitação do webhook. 2 - Aguardando envio, 3 - Enviado com sucesso e 6 - Erro no envio + /// Código de barras do boleto presente na notificação webhook + /// Nosso número do boleto presente na notificação webhook + /// Retorna o histórico das tentativas de notificação, incluindo o status e a resposta da requisição. + public async Task SolicitacoesWebhooksAsync(long idWebhook, DateTime dataSolicitacao, int? pagina = null, int? codigoSolicitacaoSituacao = null, string? codigoBarras = null, int? nossoNumero = null) + { + var consulta = new ConsultaSolicitacoesWebhookRequest() + { + dataSolicitacao = dataSolicitacao, + codigoBarras = codigoBarras, + nossoNumero = nossoNumero, + codigoSolicitacaoSituacao = codigoSolicitacaoSituacao, + pagina = pagina + }; + return await ExecutaChamadaAsync(() => clientApi.GetAsync(ConfigApi.UrlApi + "cobranca-bancaria/v3/webhooks/" + idWebhook + "/solicitacoes", consulta)); + } + private void SalvarCopiaMovimentacao(byte[] bytesZip, string nomeArquivo) { if (PastaCopiaMovimentacoes == null) return; diff --git a/Sicoob.Shared/Models/AuthorizationScope.cs b/Sicoob.Shared/Models/AuthorizationScope.cs index 72f7daf..784e387 100644 --- a/Sicoob.Shared/Models/AuthorizationScope.cs +++ b/Sicoob.Shared/Models/AuthorizationScope.cs @@ -200,6 +200,40 @@ public class AuthorizationScope /// public bool COBRANCA_BOLETOS_FAIXA_NN_DISPONIVEIS { get; set; } + /* API Cobrança Bancária (v3) */ + /// + /// [API Cobrança Bancária V3] boletos_consulta: Permissão de consulta de boletos + /// + public bool COBRANCA_V3_BOLETOS_CONSULTA { get; set; } + /// + /// [API Cobrança Bancária V3] boletos_inclusao: Permissão de inclusão de boletos + /// + public bool COBRANCA_V3_BOLETOS_INCLUSAO { get; set; } + /// + /// [API Cobrança Bancária V3] boletos_alteracao: Permissão de alteração de boletos + /// + public bool COBRANCA_V3_BOLETOS_ALTERACAO { get; set; } + /// + /// [API Cobrança Bancária V3] webhooks_consulta: Permissão de consulta de webhooks + /// + public bool COBRANCA_V3_WEBHOOKS_CONSULTA { get; set; } + /// + /// [API Cobrança Bancária V3] boletos_inclusao: Permissão de inclusão de webhooks + /// + public bool COBRANCA_V3_WEBHOOKS_INCLUSAO { get; set; } + /// + /// [API Cobrança Bancária V3] webhooks_alteracao: Permissão de alteração de webhooks + /// + public bool COBRANCA_V3_WEBHOOKS_ALTERACAO { get; set; } + + /// + /// [API Convênios Pagamentos] convenios_consulta: Permissão de consulta de Api de Convênio de Pagamentos + /// + public bool CONVENIO_PAGAMENTOS_CONSULTA { get; set; } + /// + /// [API Convênios Pagamentos] convenios_consulta: Permissão de escrita de Api de Convênio de Pagamentos + /// + public bool CONVENIO_PAGAMENTOS_ESCRITA { get; set; } /// /// Gera a lista de Scope utilizado na geração do Token @@ -266,6 +300,18 @@ public string[] ToScope() if (COBRANCA_BOLETOS_PIX) lst.Add("cobranca_boletos_pix"); if (COBRANCA_BOLETOS_FAIXA_NN_DISPONIVEIS) lst.Add("cobranca_boletos_faixa_nn_disponiveis"); + /* API Cobrança V3*/ + if (COBRANCA_V3_BOLETOS_CONSULTA) lst.Add("boletos_consulta"); + if (COBRANCA_V3_BOLETOS_INCLUSAO) lst.Add("boletos_inclusao"); + if (COBRANCA_V3_BOLETOS_ALTERACAO) lst.Add("boletos_alteracao"); + if (COBRANCA_V3_WEBHOOKS_CONSULTA) lst.Add("webhooks_consulta"); + if (COBRANCA_V3_WEBHOOKS_INCLUSAO) lst.Add("webhooks_inclusao"); + if (COBRANCA_V3_WEBHOOKS_ALTERACAO) lst.Add("webhooks_alteracao"); + + /* API Convênios Pagamentos */ + if (CONVENIO_PAGAMENTOS_CONSULTA) lst.Add("convenios_consulta"); + if (CONVENIO_PAGAMENTOS_ESCRITA) lst.Add("convenios_escrita"); + return lst.ToArray(); } /// @@ -383,6 +429,24 @@ public AuthorizationScope Cobranca_Setar(bool value) return this; } + public AuthorizationScope CobrancaV3_Setar(bool value) + { + COBRANCA_V3_BOLETOS_CONSULTA = value; + COBRANCA_V3_BOLETOS_INCLUSAO = value; + COBRANCA_V3_BOLETOS_ALTERACAO = value; + COBRANCA_V3_WEBHOOKS_CONSULTA = value; + COBRANCA_V3_WEBHOOKS_INCLUSAO = value; + COBRANCA_V3_WEBHOOKS_ALTERACAO = value; + return this; + } + + public AuthorizationScope Convenio_Setar(bool value) + { + CONVENIO_PAGAMENTOS_CONSULTA = value; + CONVENIO_PAGAMENTOS_ESCRITA = value; + return this; + } + public AuthorizationScope RemoverTodos() { return setarTodosComo(false); @@ -421,8 +485,15 @@ public static AuthorizationScope TodosContaPoupanca() { return new AuthorizationScope().CPoupanca_Setar(true); } - public static AuthorizationScope TodosCobranca() + public static AuthorizationScope TodosCobranca(bool v3 = false) { + if (v3) + return new AuthorizationScope().CobrancaV3_Setar(true); return new AuthorizationScope().Cobranca_Setar(true); } + + public static AuthorizationScope TodosConvenioCobranca() + { + return new AuthorizationScope().Convenio_Setar(true); + } }