Skip to content

Commit

Permalink
feat: Adicionar PIX aos meios de pagamento
Browse files Browse the repository at this point in the history
* ♻️ 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
  • Loading branch information
edson-nascimento authored Nov 13, 2024
1 parent f9e6aa0 commit dddb5ae
Show file tree
Hide file tree
Showing 50 changed files with 1,007 additions and 1,576 deletions.
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# EditorConfig is awesome: https://editorconfig.org/

# top-most EditorConfig file
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = true

[*.php]
indent_size = 4
24 changes: 24 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: 'github-actions'
directory: '/'
commit-message:
prefix: 'chore'
schedule:
interval: 'monthly'
open-pull-requests-limit: 10
labels: ['dependencies']

- package-ecosystem: 'composer'
directory: '/'
commit-message:
prefix: 'chore'
schedule:
interval: 'monthly'
open-pull-requests-limit: 10
groups:
all-dependencies:
patterns: ['*']
update-types: ['minor', 'patch', 'major']
labels: ['dependencies']
versioning-strategy: 'increase'
58 changes: 58 additions & 0 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Run lint and tests
on:
pull_request:
types:
- opened
- reopened
- ready_for_review
workflow_dispatch:

env:
PHP_VERSION: 8.3
PHP_EXTENSIONS: mbstring
PHP_TOOLS: composer:v2, phpunit:11
REDE_PV: ${{ secrets.REDE_PV }}
REDE_TOKEN: ${{ secrets.REDE_TOKEN }}
REDE_DEBUG: ${{ vars.REDE_DEBUG }}

permissions:
id-token: write
contents: read

jobs:
run-tests:
if: ${{ !github.event.pull_request.draft }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install PHP ${{ env.PHP_VERSION }}
uses: shivammathur/setup-php@v2
with:
coverage: none
php-version: ${{ env.PHP_VERSION }}
extensions: ${{ env.PHP_EXTENSIONS }}
tools: ${{ env.PHP_TOOLS }}

- name: Get Composer Cache Directory
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-
- name: Install dependencies
run: composer update --no-interaction --no-progress

- name: Static analysis
run: composer phpstan

- name: PHP Coding Standards Fixer
run: composer format:check

- name: Run PHPUnit
run: composer phpunit
15 changes: 12 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
/vendor/*
/config/app.php
/tmp/*
/.env
/test.php
/teste.php
error_log
.phpunit.cache/*
.vscode/settings.json
.php-cs-fixer.cache
cghooks.lock
.idea
vendor/*
composer.lock

.phpunit.result.cache
.php-cs-fixer.cache
env.test.php
28 changes: 28 additions & 0 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
/**
* @see https://cs.symfony.com/doc/rules/index.html
* @see https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/f65e6a20c9ef30f2fc93d8c3e1bf6aa3bd910192/src/RuleSet/Sets/PSR12Set.php
* @see https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/f65e6a20c9ef30f2fc93d8c3e1bf6aa3bd910192/src/RuleSet/Sets/SymfonySet.php
*/
$finder = PhpCsFixer\Finder::create()
->in(__DIR__)
->name('*.php')
->ignoreDotFiles(true)
->ignoreVCS(true);

return (new PhpCsFixer\Config())
->setParallelConfig(\PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect())
->setRiskyAllowed(false)
->setRules([
'@PSR12' => true, // Aplicar o padrão PSR-12
'@Symfony' => true, // Aplicar o padrão Symfony
'fully_qualified_strict_types' => false, // Garantir namespaces completos
'array_syntax' => ['syntax' => 'short'], // Usar a sintaxe curta para arrays []
'binary_operator_spaces' => ['default' => 'single_space'],
'concat_space' => ['spacing' => 'one'],
'increment_style' => ['style' => 'post'],
'class_attributes_separation' => true,
])
->setIndent(' ')
->setLineEnding("\n")
->setFinder($finder);
17 changes: 17 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"recommendations": [
"editorconfig.editorconfig",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker-portuguese",
"usernamehw.errorlens",
"eamodio.gitlens",
"seatonjiang.gitmoji-vscode",
"devsense.phptools-vscode",
"phproberto.vscode-php-getters-setters",
"mehedidracula.php-namespace-resolver",
"junstyle.php-cs-fixer",
],
"unwantedRecommendations": []
}
35 changes: 35 additions & 0 deletions .vscode/settings.example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"files.eol": "\n",
"eslint.run": "onSave",
"editor.tabSize": 2,
"php-cs-fixer.executablePath": "${workspaceFolder}/vendor/bin/php-cs-fixer",
"[php]": {
"editor.defaultFormatter": "junstyle.php-cs-fixer",
"editor.formatOnSave": false,
"editor.tabSize": 4,
"editor.insertSpaces": true,
"editor.trimAutoWhitespace": true,
"editor.bracketPairColorization.enabled": true
},
"php.format.codeStyle": "PSR-12",
"php.debug.port": 9000,
"editor.rulers": [
150
],
"files.insertFinalNewline": true,
"javascript.suggest.autoImports": true,
"typescript.suggest.autoImports": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "explicit"
},
"eslint.format.enable": true,
"scss.validate": false,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
}
}
97 changes: 54 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,70 @@

SDK de integração eRede

# Funcionalidades
## Funcionalidades

Este SDK possui as seguintes funcionalidades:
* Autorização
* Captura
* Consultas
* Cancelamento
* 3DS2
* Zero dollar
* iata
* MCC dinâmico.

# Instalação
- Autorização
- Captura
- Consultas
- Cancelamento
- 3DS2
- Zero dollar
- iata
- MCC dinâmico.
- PIX

## Dependências

* PHP >= 8.1
- PHP >= 8.1

## Instalando o SDK

Se já possui um arquivo `composer.json`, basta adicionar a seguinte dependência ao seu projeto:

```json
{
"require": {
"require": {
"developersrede/erede-php": "*"
}
}
}

```

Com a dependência adicionada ao `composer.json`, basta executar:

```
```bash
composer install
```

Alternativamente, você pode executar diretamente em seu terminal:

```
```bash
composer require "developersrede/erede-php"
```

# Testes
## Comandos

- Rodar todos os testes e PHPStan `composer test`
- Rodar todos os testes `composer phpunit`
- Testes unitários `composer test:unit`
- Testes integração `composer test:e2e`
- PHPStan `composer phpstan`
- PHP-CS-Fixer verify `composer format:check`
- PHP-CS-Fixer fix `composer format:fix`

## Testes

O SDK utiliza PHPUnit com TestDox para os testes. Para executá-los em ambiente local, você precisa exportar
as variáveis de ambiente `REDE_PV` e `REDE_TOKEN` com suas credenciais da API. Feito isso, basta rodar:

```
```bash
export REDE_PV=1234
export REDE_TOKEN=5678
./tests
```

Os testes também podem ser executados através de um container com a configuração ideal para o projeto. Para isso, basta
fazer:

```
docker build . -t erede-docker
docker run -e REDE_PV='1234' -e REDE_TOKEN='5678' erede-docker
```
````
Caso necessário, o SDK possui a possibilidade de logs de depuração que podem ser utilizados ao executar os testes. Para isso,
basta exportar a variável de ambiente `REDE_DEBUG` com o valor 1:
```
export REDE_DEBUG=1
export REDE_DEBUG=0
```

# Utilizando
Ou copie o arquivo `tests/config/env.test.php.example` para `tests/config/env.test.php` e adicione as suas credenciais

## Autorizando uma transação

Expand Down Expand Up @@ -130,6 +123,7 @@ if ($transaction->getReturnCode() == '00') {
```

## Adiciona configuração de parcelamento

```php
<?php
// Configuração da loja em modo produção
Expand Down Expand Up @@ -351,13 +345,13 @@ $transaction = (new Transaction(25, 'pedido' . time()))->debitCard(
// Configura o 3dSecure para autenticação
$transaction->threeDSecure(
new Device(
ColorDepth: 1,
DeviceType3ds: 'BROWSER',
JavaEnabled: false,
Language: 'BR',
ScreenHeight: 500,
ScreenWidth: 500,
TimeZoneOffset: 3
colorDepth: 1,
deviceType3ds: 'BROWSER',
javaEnabled: false,
language: 'BR',
screenHeight: 500,
screenWidth: 500,
timeZoneOffset: 3
)
);
$transaction->addUrl('https://redirecturl.com/3ds/success', Url::THREE_D_SECURE_SUCCESS);
Expand All @@ -369,3 +363,20 @@ if ($transaction->getReturnCode() == '220') {
printf("Redirecione o cliente para \"%s\" para autenticação\n", $transaction->getThreeDSecure()->getUrl());
}
```

## Transação com PIX

```php
<?php
// Configura a transação para o PIX e passa a data de expiração
$transaction = (new Transaction(200.99, 'pedido' . time()))->createQrCode(new \DateTimeImmutable('+ 1 hour'));

$transaction = (new eRede($store))->create($transaction);

if ($transaction->getReturnCode() == '00') {
printf(
"Transação criada com sucesso; tid=%s, qrCodeData=%s, qrCodeImage=%s\n",
$transaction->getTid(), $transaction->getQrCode()->getQrCodeData(), $transaction->getQrCode()->getQrCodeImage()
);
}
```
Loading

0 comments on commit dddb5ae

Please sign in to comment.