Git Product home page Git Product logo

vindi-php's People

Contributors

asagalo avatar havennow avatar laerte-guimaraes avatar lyoncesar avatar marcosfreitas avatar rafaelyanagui avatar ravanscafi avatar rodrigo avatar rtakauti avatar st3llaris avatar talesgalvao avatar tauanlemos avatar tmazza avatar vindi-deploy avatar wagner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vindi-php's Issues

Parse da chave "bill" ignorada ao fazer um request em "subscription"

Devido a uma necessidade, acabei detectando um problema com a Lib, na hora de fazer uma subscription e verificar se o pagamento foi efetuado com sucesso, o json original retornado devolve subscription e bill, porém, ao fazer o parse e devolver o objeto do response nesta Lib, vocês estão associando apenas o que foi retornado no subscription, ignorando totalmente o que foi retornado em bill, fiz um workaround local pra resolver isso, que foi fazer o parse do response original e pegar as informações que necessitava, como segue o código abaixo (PS: no exemplo abaixo, customer_id e plan_id são dados falsos):

$data = array(
    "plan_id" => 12356, 
    "customer_id" => 12356,
    "payment_method_code" => "credit_card",
);
$subscriptionManage = new Vindi\Subscription;
$subscription = $subscriptionManage->create($data);
$body = json_decode((string) $subscriptionManage->getLastResponse()->getBody());
if($body->bill->status != 'paid') {
   // Lógica para cancelar a inscrição aqui
}

Talvez adicionando os dados de bill dentro da classe retornada, com um atributo de mesmo nome (bill), resolveria o problema, isso evitaria ter que fazer toda essa volta que fiz, pra conseguir a informação que precisava, podendo fazer um acesso direto, como:

echo $subscription->bill->status;

Problema ao retornar dados depois de um registro de assinatura

Olá,

Efetuando testes com um cliente, notei que o método response do arquivo ApiRequester.php tem o seguinte trecho:

        if (!empty($decoded)) {
            reset($decoded);
            $data = current($decoded); // get first attribute from array, e.g.: subscription, subscriptions, errors.
        }

        $this->checkRateLimit($response)
            ->checkForErrors($response, $data);

        return $data;

A linha onde é utilizada a função current faz com que somente o primeiro atributo do objeto de retorno seja enviado no retorno da função.

Em particular, no método de criação de assinaturas, isso faz com que nem todas as informações sejam retornadas, pois existem duas propriedades no mesmo nível, que são "subscription" e "bill". Desta forma, o atributo bill não é retornado.

Conforme orientado pela equipe da Vindi, foi indicado para usar o $subscriptionService->getLastResponse->getBody(), para recuperar a string da última requisição feita. Dessa forma, sim, a resposta é exatamente igual à documentação.

Isto posto, como não verifiquei toda a documentação, seria interessante rever esta parte, pois podem haver outros métodos em que o mesmo problema aconteça.

Atenciosamente,
Hugo Silva

Erro de sintaxe

Descreva o bug
Tentando usar string como objeto. Possível mudança de retorno da API.

Como reproduzir
Passos para reprodução do comportamento:

  1. Instanciar o serviço \Vindi\Merchant sem o parâmetro "role";
  2. Usar o método create;

Comportamento Esperado
Tratamento de exceptions

Prints de tela
Retorno recebido na exception
captura de tela 2018-07-17 as 11 00 42
😅

Não é possível passar parâmetros para ações de delete

Estou tentando deletar uma subscription, pela documentação é possível passar o parâmetro cancel_bills. Mas a função delete não permite passar nenhum parâmetro

 public function delete($id = null) {
        return $this->apiRequester->request('DELETE', $this->url($id));
 }

Erro de validação ao enviar um array de hashes como form-urlencoded

Olá!

Antes de abrir um PR preferi postar meu commit aqui p/ discussão.

Por padrão, as requisições à API da Vindi são serializadas no formato x-www-form-urlencoded, mas isso gera um erro de validação ao enviar um array de hashes. Esbarrei nesse erro ao criar uma nova assinatura usando o SDK, onde precisei informar o atributo product_items, que é um array de hashes.

Para evitar problemas de serialização, passei a usar JSON em vez de Form:

https://github.com/templateria/vindi-php/commit/2b0796b22d941e2b7bbb29dcd266d43f68bbda4c

Já passei por isso aqui na Templateria: nosso backend é Grape e o frontend é Lithium (PHP). Sempre que eu definia um endpoint que aceitava um paramêtro com type: Array[OutraClasse] encontrava problemas. Creio que isso acontece porque a função http_build_query do PHP adiciona índices nos arrays. Depois dessa dor de cabeça, passei a usar JSON apenas.

Acham que é uma boa mudar aqui também?

Assinatura não retorna objeto fatura

Olá, fiz um teste de assinatura na pagina sandbox de vcs e percebi um retorno completo, quando fiz download da sua SDK, além de ter que instalar várias bibliotecas que não estão no projeto, ele não retornou a futura (objeto BILL) sendo que usei o mesmo json de request da sua pagina sandbox. Vocês tem algum exemplo melhor do que aprensentado nessa biblioteca? Ou alguma ideia do pq isso ocorre?

Versão aprimorada do Try Catch para o php Exception.

O try catch block clássico:

        try {
            $customer_subscription = $this->customer_subscription_service->all($query);
        }

        catch (Exception $except) {
            $status = array('Subs Ld', $except->getMessage(), 'critico');         
        }

quando dá errado, faz com que o getMessage() apresente o erro:

"Erros de validação foram encontrados!"

Mas este tipo de erro é muito amplo. O desenvolvedor fica sem saber se o erro é na duplicação do "code", se o erro é na sigla do Estado quando um cliente novo está sendo inserido, se o erro é no telefone, etc.

Para conseguir uma visão mais específica do erro com o mesmo try catch block, considere adicionar as seguintes linhas de código no arquivo ValidationException.php, dentro do __construct:

public function __construct($status, $errors, array $lastOptions = [])
    {
        parent::__construct($status, $errors, $lastOptions);
        // novo código inserido -- start
        $error_log = '';
        if ( is_array( $errors ) ) {
            if ( !empty($errors) ) {
                $error_log .= ' --- ' . $errors[0]->id . ' --- ' . $errors[0]->parameter . ' --- ' . $errors[0]->message . ' --- ' ;
            }
        }
        // novo código inserido -- end

        $this->message     = "Erros de validação foram encontrados!" . $error_log;  // $error_log appended to error message.
    }

Dessa forma fica fácil saber o erro específico, um de cada vez, com PHP puro, sem precisar instalar, instanciar um novo objeto do Guzzle dentro de um namespace específico.

Boa sorte!

Problema com RateLimitException

A exception está sendo lançada com base no header Rate-Limit-Remaining, quando o ultimo request feito voltar com Rate-Limit-Remaining igual 0 a exception é lançada, mesmo que ele tenha sido realizado com sucesso!

Parâmetro Modo Sandbox

Acredito que falta um parâmetro indicando que desejamos usar o modo Sandbox.

Quando estamos usando ambiente "real" (produção) ou "sandbox trial", a URL da API é

public static $apiBase = 'https://app.vindi.com.br/api/v1/';

Porém, em ambiente de sandbox (sem trial), a URL correta é:

public static $apiBase = 'https://sandbox-app.vindi.com.br/api/v1/';

Poderíamos passar como variável de ambiente, a exemplo da "VINDI_API_KEY", ex:

putenv('VINDI_API_KEY=A1B2C3D4E5');
putenv('VINDI_SANDBOX=1');

Local:

public static $apiBase = 'https://app.vindi.com.br/api/v1/';

Problemas no Laravel

Descreva o bug
Quando preciso utilizar o ambiente de produção do Laravel, por não utilizar o variáveis de ambientes, da problemas com as chaves de API pois não é possivel utilizar as variaveis de ambiente

ErrorException Trying to get property of non-object. RequestException:54

O erro é no tratamento de erros, no arquivo RequestException, linha 54. ErrorException Trying to get property of non-object.

Como reproduzir
Passos para reprodução do comportamento:

  1. Faça uma requisição para atualização de um ProductItem passando null como ID.
$productItem = new \Vindi\ProductItem;
$productItem->update(null, ['price' => 25.90]);

Comportamento Esperado
Retorno de uma mensagem de erro. Pode ser algo como "Endpoint não encontrado."

TLS 1.2

Forçar conexão HTTPS usando TLS 1.2. O suporte à versão 1.0 será descontinuado pela plataforma em junho/2016.

RequestException error

RequestException não espera receber o seguinte json:

{
  "errors": [
    {
      "id": "invalid_parameter",
      "message": "Malformed parameter."
    }
  ]
}

Parâmetros método busca all

Como passar o tipo de consulta para realizar filtros com o método all (Resource.php) ?
Exemplo: Eu gostaria de filtrar Bill onde created_at seja >= alguma data

Get a new way to handle api key

Is it possible to send the api key through constructor of vindi or method ?
env variable is not a really good way to store this.
Thanks

Erro na validação ao atualizar um Customers

Olá, na hora que eu vou atualizar um customer, o state sempre dá erro na validação.
Na documentação diz: state (string, opcional): Código do estado no formato ISO 3166-2. Exemplo: SP. Porém, ao atualizar com SP (string), retorna erro na validação.
Após horas quebrando a cabeça, eu percebi que state não é obrigatório para gerar boletos (contrariando o que o suporte havia dito).

Não seria um problema não aceitar SP como State? A própria documentação cita SP como exemplo.
https://vindi.github.io/api-docs/dist/#!/customers/PUT_version_customers_id_format

Obrigado!

Update para Guzzle 7

Sua requisição de nova feature é relacionado ao problema?. Por favor descreva-o
As versões mais novas do Laravel possuem dependência do Guzzle na versão 7. Esse pacote aceita apenas o Guzzle v. 6

Descreva a solução que você gostaria que a gente implementasse
Update para Guzzle 7

Problema ao efetuar uma cobrança

Estamos implementando recorrência através da Vindi, nosso sistema usa PHP 7.

O que funciona atualmente: Cadastro de clientes, formas de pagamento, faturas.

Agora precisamos liberar uma opção para efetuar a cobrança de uma fatura agendada, seguindo as recomendações da Vindi, claro.

Porém ao realizar a chamada, recebemos o seguinte erro:

An uncaught Exception was encountered
Type: Vindi\Exceptions\RequestException

Message: Recurso não encontrado: Charge

Filename: CAMINHO\vendor\vindi\vindi-php\src\ApiRequester.php

Line Number: 126

Todas as demais funções da SDK funcionam, só esta que não.

Código:

`require FCPATH . '/vendor/autoload.php';


            putenv("VINDI_API_KEY=API");
            putenv("VINDI_API_URI=END_HOMOLOGACAO");
    
        $billService = new Vindi\Charge;

        try {
            $res = $billService->charge($id_cobranca, []);
            print_r($res);
        }
        catch(Vindi\Exceptions\ValidationException $e){
            print_r( $e->getErrors());
        }`

Informações adicionais:
Servidor: Ubuntu Server
Framework PHP: CodeIgniter 3
Versão da SDK: 1.2

Podem me dar um apoio? Se precisarem de mais informações, é só pedir.

A SDK está funcionando?

Bom dia. Sou cliente da VINDI. Responsável pelo TI da empresa hqbeds, usamos a plataforma de vocês para cobrar nossos clientes.

Quero integrar nossa base de clientes com a ferramenta de vocês. Estou tentando utilizar a SDK em PHP, porém não está funcionando. Fiz um teste bem simples, instalando via composer e chamando o executando o programa abaixo :

Estou com php 5.6 aqui..

<?php

require __DIR__.'/vendor/autoload.php';

$config['VINDI_API_KEY'] = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
$config['VINDI_API_URI'] = 'https://app.vindi.com.br/api/v1';

$customerService = new Vindi\Customer($config);

$customers = $customerService->all([
    'sort_by'    => 'created_at',
    'sort_order' => 'desc'
]);

echo '<pre>';
print_r($customers);
?>

Não funciona.. O token está certinho, estou testando via chamada CURL direto aqui e está tudo okay, mas a SDK não rola....

( ! ) Fatal error: Uncaught exception 'Vindi\Exceptions\RequestException' in /Users/cesar/Dev/php/vindi_teste/vendor/vindi/vindi-php/src/ApiRequester.php on line 112

1 | 0.0101 | 239872 | {main}( ) | .../index.php:0
2 | 0.1343 | 440936 | Vindi\Resource->all( ) | .../index.php:25
3 | 0.1343 | 441480 | Vindi\ApiRequester->request( ) | .../Resource.php:67
4 | 0.9384 | 662616 | Vindi\ApiRequester->response( ) | .../ApiRequester.php:53
5 | 0.9385 | 663536 | Vindi\ApiRequester->checkForErrors( ) | .../ApiRequester.php:72

Filtrar por atributos

Pessoal, é possível filtrar utilizando o método ALL dos serviços?
Não consegui entender ainda como fazer uma query , por customer_id por exemplo... Como devo passar o [] params?

Respostas retornam apenas o primeiro elemento do array

Como a resposta retornam sempre o primeiro elemento do array, algumas requisições que deveriam retornam mais informações acabam retornando apenas uma parte delas.

Exemplo: ao criar uma assinatura deveria receber o objeto da assinatura criada juntamente com as cobranças e transações, mas está retornando apenas a assinatura.

melhorar forma de usar chave de api

Seria bom se tivesse outra maneira de usar a chave além de putenv. Por exemplo enviar junto a requisição, dessa forma seria possível usar clients http para fazer testes por exemplo.

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.