GithubHelp home page GithubHelp logo

iugu-net's People

Contributors

alexandresanlim avatar edwardmartinsjr avatar erickmcarvalho avatar lhmartino avatar limaemanuel avatar malkafly avatar renanjorge avatar rscouto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iugu-net's Issues

Deadlock gerado quando o servidor está esperando a resposta da API.

Na linha 100 da classe APIResources.cs há um erro de sincronização, causando um deadlock enquanto a resposta da API é esperada. Uma possível solução é alterar o código :
HttpResponseMessage response = await client.PostAsJsonAsync(BaseURI, data);

por

HttpResponseMessage response = await client.PostAsJsonAsync(BaseURI, data).ConfigureAwait(false);

Versão .NET

Observei que a biblioteca está sendo compilada com a versão 4.6.1 do .NET. Acredito que seria interessante compilar com uma versão anterior, 4.5 talvez, que o pessoal que trabalha em projetos com versão mais antigas do framework possam utilizar.

Erro no response do Withdraw

Pessoal,

erro no response do Request Withdraw. O json de retorno do Iugu é:

{
"id": "530706A3862D4BB49C8AC9637B850CDE",
"status": "pending",
"created_at": "2015-11-26T10:02:23-02:00",
"updated_at": "2015-11-26T10:02:23-02:00",
"reference": null,
"amount": "R$ 10,00",
"account_name": "Conta",
"account_id": "A682CECA59D74527B984CA529D7C2ED4",
"feedback": null,
"bank_address": {
"bank": "Bradesco",
"bank_cc": "11231-2",
"bank_ag": "1234",
"account_type": "Corrente"
}
}

Recebo sempre a exceção falando que não conseguiu converter string em decimal, mas a transferência foi solicitada. Logo fui olhar o código de vocês e está assim:
var retorno = await Api.PostAsync<AccountRequestWithdrawResponseMessage>(new { amount = amount }, $"{targetAccountId}/request_withdraw", customUserApiToken).ConfigureAwait(false);

Deveria estar assim:
var retorno = await Api.PostAsync<AccountRequestWithdrawResponseMessage>(new { amount = decimal.Parse(amount.Trim().Replace("R$", "").Replace(" ", "") }, $"{targetAccountId}/request_withdraw", customUserApiToken).ConfigureAwait(false);

Opção de envio de Token na Api de cobrança (Lib divergente da documentação)

De acordo com a análise da API atual (https://iugu.com/referencias/api) há algumas divergências que impedem o novo modelo indicado para uso.

A equipe de suporte do iugu me recomendou integração utilizado do iugu.js para registrar o meio de pagamento e depois vincular o cliente ao Token de pagamento apenas e não mais utilizar o atributo Data para envio dos dados de pagamento, pois este está obsoleto.

O problema é que o request para registrar o meio de pagamento não possui o campo Token e por isto não consigo vincular o cliente com a forma de pagamento gerada pelo iugu.js.

*Obs: não analisei a API toda, este foi o ponto que identifiquei de problema no arquivo de Request de um meio de pagamento (https://github.com/iugu/iugu-net/blob/vnext/iugu.net/Request/PaymentTokenRequestMessage.cs)

Issue criada conforme solicitação da equipe de suporte.

Adicionar campos não documentados as resposta da API

Existem APIs, que tem mais campos do que o retornado pelo client, por conta dos mesmos não estarem documentados e o client utilizar os exemplos de resposta da documentação para criar os objetos.

  • API de fatura.
  • Todas as listagens paginadas. (ou que permitem paginação, mas ainda não estão implementadas)
  • Outras APIs não levantas.

Tornar client totalmente assíncrono

É necessário remover os .Results dos métodos e tornar o client verdadeiramente assíncrono e evitar deadlocks.

  • Todos os métodos do client devem retornar Tasks e ser assíncronos;
  • Devem existit métodos que não são assíncronos, mas estes apenas chamam os assíncronos com um .Result;

Ex:

// Devem existir 2 versões para o método Get (Uma sincrona e outra assíncrona)
// Versão síncrona
public CustomersModel Get()
{
            var retorno = GetAsync().Result;
            return retorno;
}

// Versão assincrona
public async Task<CustomersModel> GetAsync()
{
            var retorno = await GetAsync<CustomersModel>().ConfigureAwait(false);
            return retorno;
}

ref #1

Como recuperar os erros?

Estou iniciando agora a integração e vi que com a utilização da API, caso tenha algum erro, o objeto é criado de forma normal sem os dados. Veja o exemplo:

using (IHttpClientWrapper stubHttpClient = new StandardHttpClient())
using (IApiResources apiClient = new APIResource(stubHttpClient))
using (var client = new Account(apiClient))
{
     verifyAccountResponse = await client.VerifyUnderAccountAsync(requestAccountVerify, response.AccountId, response.UserToken).ConfigureAwait(false);
}

Recebi uma exception do Json com caracteres que não consegui tratar de nenhuma forma:

{"StatusCode":422,"ReasonPhase":"Unprocessable Entity","Message":"{\"errors\":{\"cnpj\":[\"n\\u00e3o pode ficar em branco\",\"n\\u00e3o \\u00e9 v\\u00e1lido\"],\"bank_cc\":[\"d\\u00edgito invalido. (Formato: Ag\\u00eancia: 9999, Conta: XXX99999999-D [X: Opera\\u00e7\\u00e3o])\"]}}"}

Como é feito o tratamento dos erros resultados pela API?

Inclusão do atributo PayerModel (payer{}) para a classe InvoiceRequestMessage

Prezados(as),

Sugiro a inclusão do objeto payer{} (PayerModel) para a classe InvoiceRequestMessage, pois hoje é só possível informá-lo no objeto ChargeRequestMessage.

Como preciso customizar data de vencimento e outros itens da invoice, o objeto Charge não atende.

Com a exigência de emissão de boletos registrados, preciso informar mais dados do pagador, além de apenas o e-mail do pagador.

Obrigado,
Ayslan Flores

CleanUp da solução

  • Remoção de comentários desnecessários;
  • Adição de sumários(comentários e summary) e links de documentação da API;
  • Diminuir repetição;
  • Liberar recursos (IDisposables);
  • Tornar classes o mais readonly possível, para diminuir efeitos colaterais em cenários multi-thread;
  • Remove usings desnecessários;
  • User "var" ao invés de definir explicitamente o tipo;
  • Interpolar strings (C# 6);
  • Mover configuração da API para .config (versão, endpoint..etc, hoje só esta a apiKey)
  • Seguir padrão de case do .Net nas entidades e configurar no serializador a convenção a ser utilizada.

Erro em tempo de execução

Eu baixei a última versão, ajustei as de dependências e executei, mas ele dá erro de dependência em tempo de execução, tentei pegar a versão do NuGet, mas ela não reconhece as classes PaymentTokenResponseMessage e PaymentTokenRequestMessage.

Deixar mensagens de erro acessíveis

throw new Exception(response.ReasonPhrase);

Nessa linha estamos dando throw numa exception com o reasonPhase da request. Segundo a documentação do c#, esse campo retorna uma string descrevendo o status da request (422 -> Unprocessable Entity, 404 -> Not Found), porém a API da iugu retorna uma mensagem detalhada sobre o erro no corpo da request.

Transformar projeto em pacote nuget

Para que o usuários deste client possam receber suas atualizações de forma integrada ao visual studio e como biblioteca externa, via command line, tenha suas dependências diretas resolvidas, e não seja necessário subir nenhuma dll, é necessário transformar em pacote nuget.

Erro ao incluir invoice: total deve ser maior que 0

Ao incluir uma fatura obtive o seguinte retorno:

{"StatusCode":422,"ReasonPhase":"Unprocessable Entity","Message":"{\"errors\":{\"total\":[\"deve ser maior que 0\"]}}"}

Porém não existe "total" no item, eu apenas estava usando "price" ao invés de "price_cents". Talvez seja uma boa ajustar a mensagem da api.

Implementar Api de Antecipação de pagamentos

API ADVANCE - Antecipação de pagamentos

Listar transações

Listar de 30 em 30 as transações

GET(https://api.iugu.com/v1/financial_transaction_requests)

| https://api.iugu.com/v1/financial_transaction_requests/?start=30
Obs: Navegação entre páginas é feita enviando via queystring

Simular Antecipação

Simula o adiantamento retornando as taxas e demais informações

GET(https://api.iugu.com/v1/financial_transaction_requests/advance_simulation)
| Parametro transactions é uma lista com os ids das transações obtidas pela chamada da listagem

Antecipação

Executa uma antecipação

POST(https://api.iugu.com/v1/financial_transaction_requests/advance)
| Parâmetro transactions é uma lista com os ids das transações obtidas pela chamada da listagem

Exemplo de utiização com cartão de crédito

Olá, boa noite!

Alguém possui um exemplo de como usar as seguintes funções:

  1. Pré-autorizar e/ou validar um cartão de crédito
  2. Realizar uma transação no cartão de crédito

Obrigado,
Homero.

Criar branch develop

Como recomendação sugiro criar o branch develop no repositório. E torna-lo o principal.

Melhorias de design do código

O objetivo desta issue é trazer mais testabilidade com as seguintes alterações:

  • Extrair interface de ApiResource.
  • APIs passam a ser compostas por uma interface IApiResource
  • Remove herança de ApiResource

Ex:

// Atualmente 
public class Customer : APIResource
{
    public Customer()
    {
        BaseURI += "/customers";
    }
}

// Depois 
public class Customer : IDisposable
{
    private readonly IApiResource _client;

    public Customer(IApiResourceclient) : this()
    {
        _client = client;
    }

    protected Customer()
    {
        _client = _client ?? new ApiResource();
        _client.BaseURI += "/customers";
    }

    public void Dispose()
    {
        _client.Dispose();
        GC.SuppressFinalize(this);
    }
}

Implementar buscas avançadas

Existem APIs que permitem buscas com filtros mais elaborados, como:

  • API de Fatura;
  • API de Clientes;
  • API de Contas;

IUGU.NET - InvoiceModel

Ao utilizar a API Listar as Faturas (GET https://api.iugu.com/v1/invoices), e receber o retorno OK, e ao realizar o parse e/ou tentar popular os respectivos campos no lado da minha aplicação, os campos vem todos NULL. Analisando verifiquei que alguns poucos campos retornam dados e o preenchem em minha model. Também percebo que a Model Entity InvoiceModel não tem suas propriedades decoradas com os atributos retornados pela API em JSON, como as outras model tem. Será que alguem ja teve este problema, pois com as outras api que utilizo esta funcionando e esta não...

MarketPlace - Enviar Verificação de Sub-Conta

Ao utilizar o método da API VerifyUnderAccountAsync com Id que contenha hífen está sempre retornando Unauthorized.
Acredito que isso seja um bug pois em outras chamadas isso não acontece.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.