public AssinaturaVINDIRequest Salvar(Cliente cliente, Assinatura assinatura, CartaoCredito cartao)
        {
            var clienteVINDI = ObterCliente(cliente.Email);
            var customer     = new ClienteVINDI();

            if (clienteVINDI == null)
            {
                customer = SalvarCliente(cliente, assinatura, cartao);
            }
            else
            {
                customer = clienteVINDI;
            }

            if (customer == null)
            {
                return(null);
            }

            if (assinatura.TipoPagamento == "credit_card")
            {
                var profile           = SalvarProfile(cartao, customer.id);
                var assinaturaRetorno = SalvarAssinatura(assinatura, customer.id, profile.id);

                EnviarDadosCliente(cliente, assinatura);
                return(assinaturaRetorno);
            }
            else
            {
                var assinaturaRetorno = SalvarAssinaturaBoleto(assinatura, customer.id);
                EnviarDadosCliente(cliente, assinatura);
                return(assinaturaRetorno);
            }
        }
        public ClienteVINDI SalvarCliente(Cliente cliente, Assinatura assinatura, CartaoCredito cartao)
        {
            var phones = new List <Phone>();

            phones.Add(new Phone
            {
                phone_type = "mobile",
                number     = "55" + cliente.Telefone,
                extension  = ""
            });

            var customer = new ClienteVINDI()
            {
                name          = cliente.Nome,
                email         = cliente.Email,
                registry_code = cliente.CPF,
                address       = new Address
                {
                    street             = cliente.Logradouro,
                    number             = cliente.Numero,
                    additional_details = cliente.Complemento,
                    zipcode            = cliente.CEP,
                    state        = cliente.Estado,
                    city         = cliente.Cidade,
                    country      = "BR",
                    neighborhood = cliente.Bairro
                },
                phones = phones
            };


            var url = $"https://app.vindi.com.br:443/api/v1/customers";

            var json   = JsonConvert.SerializeObject(customer);
            var result = servicoApi.PostDataAuth <ClienteVINDIResponse>(url, json);

            if (result.Errors.Any())
            {
                var errors = "";
                foreach (var item in result.Errors)
                {
                    errors = errors + item.id + " - " + item.message + " - " + item.parameter;
                    AdicionarNotificacao(errors);
                }

                return(null);
            }

            clienteRepositorio.SalvarCliente(cliente, assinatura, cartao);
            return(result.Customer);
        }
        public ClienteVINDI SalvarEmpresa(EmpresaSQL empresa, Assinatura assinatura, CartaoCredito cartao, List <Socio> socios, Competencia competencia)
        {
            var phones = new List <Phone>();

            phones.Add(new Phone
            {
                phone_type = "landline",
                number     = "55" + empresa.Telefone
            });

            phones.Add(new Phone
            {
                phone_type = "mobile",
                number     = "55" + empresa.Telefone2,
            });

            var customer = new ClienteVINDI()
            {
                name          = empresa.RazaoSocial,
                email         = empresa.Email,
                registry_code = empresa.CNPJ,
                phones        = phones
            };


            var url = $"https://app.vindi.com.br:443/api/v1/customers";

            var json   = JsonConvert.SerializeObject(customer);
            var result = servicoApi.PostDataAuth <ClienteVINDIResponse>(url, json);

            if (result.Errors.Any())
            {
                var errors = "";
                foreach (var item in result.Errors)
                {
                    errors = errors + item.id + " - " + item.message + " - " + item.parameter;
                    AdicionarNotificacao(errors);
                }

                return(null);
            }

            clienteRepositorio.SalvarEmpresa(empresa, assinatura, cartao, socios, competencia);
            return(result.Customer);
        }