Skip to content

Conversation

@JonathanNitroEcom
Copy link
Collaborator

feat: Adicionar PIX aos meios de pagamento

* ♻️ Fix empty url serialize

* ✅ Fix tests

* 🙈 Adicionar env no gitignore

* ✨ Adicionando metodo de pagamento PIX

* ✨ Adicionar e popular `qrCode` na transação

* ♻️ Refatorar estrutura dos testes

* ✅ Adicionar timezone `America/Sao_Paulo` nos testes

* ♻️ Fix case `threeDSecure` props

* 📝 Update readme
refactor: Remover `monolog ` das dependências
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @JonathanNitroEcom, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Este pull request foca na expansão das opções de pagamento ao adicionar o suporte a PIX, além de modernizar a base de código PHP para garantir compatibilidade com versões mais recentes da linguagem. Paralelamente, houve um investimento significativo na melhoria das ferramentas de desenvolvimento e na infraestrutura de testes, visando maior qualidade de código e uma experiência de desenvolvimento mais eficiente.

Highlights

  • Suporte a PIX: Adição do PIX como um novo método de pagamento, incluindo a criação de QR Codes para transações.
  • Modernização do Código PHP: Refatoração extensiva do código para aproveitar recursos modernos do PHP (versão 8.2+), como a remoção de docblocks redundantes e a simplificação de declarações de propriedades e métodos.
  • Atualização da Infraestrutura de Desenvolvimento e Testes: Introdução de novas ferramentas e configurações para padronização de código (EditorConfig, PHP-CS-Fixer), automação de dependências (Dependabot) e um sistema de testes mais robusto (PHPUnit, PHPStan).
  • Melhorias na Manipulação de Respostas da API: Implementação de um novo ResponseTrait e ajustes na desserialização de objetos para melhor encapsulamento e acesso aos dados brutos da resposta HTTP.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Este pull request é uma atualização substancial que introduz o suporte para pagamentos via PIX, moderniza a base de código para PHP 8.2, e melhora significativamente a manutenibilidade e a experiência do desenvolvedor. As mudanças incluem uma refatoração completa da desserialização de objetos, a adição de novos scripts de composer, configuração de ferramentas de qualidade de código e uma estrutura de testes mais robusta. No geral, é uma excelente contribuição que moderniza e expande as capacidades do SDK. Minha revisão inclui algumas sugestões para melhorar a consistência do código e a documentação para o usuário final.

if (property_exists($this, $property) && null !== $value) {
if (in_array($property, $dateTimeProps) && is_string($value)) {
$value = new \DateTime($value);
} elseif ($objectMapping && isset($objectMapping[$property]) && !empty($value)) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

A verificação !empty($value) na linha 20 pode causar problemas ao desserializar objetos aninhados que estejam vazios na resposta da API. Se a API retornar um objeto JSON vazio (ex: {}), json_decode o converterá em um objeto stdClass sem propriedades. A função empty() para tal objeto retorna true, fazendo com que a condição !empty($value) seja false e, consequentemente, o objeto aninhado não seja instanciado, resultando em um valor null. Isso pode levar a erros inesperados de ponteiro nulo em outras partes do código. Sugiro usar is_object($value) para garantir que, se o valor for um objeto (mesmo que vazio), a lógica de população seja acionada, criando uma instância vazia do objeto esperado e evitando possíveis bugs.

                } elseif ($objectMapping && isset($objectMapping[$property]) && is_object($value)) {

Comment on lines 59 to 63
public function setJavaEnabled(bool $JavaEnabled = true): static
{
$this->JavaEnabled = $JavaEnabled;
$this->javaEnabled = $JavaEnabled;

return $this;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

O nome do parâmetro $JavaEnabled no método setJavaEnabled está em PascalCase, o que é inconsistente com o nome da propriedade ($javaEnabled) e com a convenção camelCase usada no restante do código para variáveis e parâmetros. Para manter a consistência do código e seguir as boas práticas do PSR, sugiro renomeá-lo para $javaEnabled.

    public function setJavaEnabled(bool $javaEnabled = true): static
    {
        $this->javaEnabled = $javaEnabled;

        return $this;
    }

## Observações

- Ao criar uma transação com `$transaction = (new eRede($store))->create($transaction)` não vai retornar o campo `authorization`, para retornar o campo é preciso fazer uma consulta `$transaction = (new eRede($store))->get('TID123')`
- O campo `$transaction->getAuthorizationCode()` não está retornando nada, use `$transaction->getBrand()?->getAuthorizationCode()` ou `$transaction->getAuthorization()?->getBrand()?->getAuthorizationCode()`

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

A nota sobre como obter o código de autorização pode ser melhorada. A introdução do método getFirstAuthorizationCode() na classe Transaction simplifica a obtenção deste valor, pois ele já encapsula a lógica de procurar o código nos diferentes locais da resposta da API. Recomendo atualizar o README para sugerir o uso deste novo método, o que tornará o SDK mais fácil e intuitivo de usar.

Suggested change
- O campo `$transaction->getAuthorizationCode()` não está retornando nada, use `$transaction->getBrand()?->getAuthorizationCode()` ou `$transaction->getAuthorization()?->getBrand()?->getAuthorizationCode()`
- O campo `$transaction->getAuthorizationCode()` pode não retornar o código de autorização. Utilize o método `$transaction->getFirstAuthorizationCode()` que busca o código em todos os locais possíveis no retorno da API.

@JonathanNitroEcom JonathanNitroEcom self-assigned this Sep 2, 2025
@JonathanNitroEcom JonathanNitroEcom added the enhancement New feature or request label Sep 2, 2025
@edson-nascimento edson-nascimento force-pushed the master branch 3 times, most recently from 9033910 to c44c9f0 Compare December 16, 2025 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants