PHPackages                             joshua-barbosa/erede-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. joshua-barbosa/erede-sdk

ActiveLibrary[Payment Processing](/categories/payments)

joshua-barbosa/erede-sdk
========================

SDK PHP para a API eRede (Rede) com autenticação OAuth 2.0, integrado ao Laravel.

v0.1.1(today)09↑2566.7%MITPHPPHP ^8.2CI passing

Since Jul 28Pushed todayCompare

[ Source](https://github.com/joshua-barbosa/erede-sdk)[ Packagist](https://packagist.org/packages/joshua-barbosa/erede-sdk)[ Docs](https://github.com/joshua-barbosa/erede-sdk)[ Fund](https://www.buymeacoffee.com/joshuabarbosa)[ RSS](/packages/joshua-barbosa-erede-sdk/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (9)Versions (3)Used By (0)

eRede SDK
=========

[](#erede-sdk)

[![Packagist](https://camo.githubusercontent.com/d0b0c8430c5a4db8b8735d0bd5862dfa639322b080beda493786d974526b06ed/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a6f736875612d626172626f73612f65726564652d73646b2e737667)](https://packagist.org/packages/joshua-barbosa/erede-sdk)[![Tests](https://github.com/joshua-barbosa/erede-sdk/actions/workflows/tests.yml/badge.svg)](https://github.com/joshua-barbosa/erede-sdk/actions/workflows/tests.yml)[![PHP](https://camo.githubusercontent.com/37caad6d3ba7bc333403a499c0ce49606113bf8a11c4922ab2c727c0335bdfd7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f6a6f736875612d626172626f73612f65726564652d73646b2f7068702e737667)](https://packagist.org/packages/joshua-barbosa/erede-sdk)[![License](https://camo.githubusercontent.com/d36f452b1a6e1f4967f9f652e106a823b0a8b48db7277f7d0e3bb3dfd960580a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6a6f736875612d626172626f73612f65726564652d73646b2e737667)](LICENSE)[![Buy Me A Coffee](https://camo.githubusercontent.com/8cad44cc8a3cc044bb0337b08439b957574cfd1a2d4bd7dd24c3bc62078a783a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6275792532306d6525323061253230636f666665652d2545322539382539352d464644443030)](https://www.buymeacoffee.com/joshuabarbosa)

SDK PHP para a API [eRede](https://developer.userede.com.br/e-rede) (Rede) com autenticação OAuth 2.0, integrado ao Laravel.

Suporta **Laravel 11, 12 e 13** / **PHP 8.2+**.

LaravelPHPStatus13.x8.3 / 8.4Testado no CI12.x8.3Testado no CI11.x8.2Testado no CI — Laravel 11 está EOL, veja a nota abaixo> **Laravel 11 está fora do suporte da Laravel** e todas as suas versões carregam advisories de segurança. O Composer 2.10+ recusa instalá-lo por padrão; se a sua aplicação ainda está em 11.x, ela já precisa lidar com isso independentemente deste pacote. Para projetos novos, comece em 12.x ou 13.x.

Instalação
----------

[](#instalação)

```
composer require joshua-barbosa/erede-sdk
```

O ServiceProvider é descoberto automaticamente — nada a registrar manualmente.

> O pacote está em `0.x`: a API pública ainda pode mudar. Fixe em `^0.1` se quiser proteção contra quebras, já que o SemVer permite alterações incompatíveis entre versões `0.x` diferentes.

### Desenvolvimento local

[](#desenvolvimento-local)

Para editar o pacote e ver o efeito imediato na aplicação, use um repositório `path`:

```
{
    "repositories": [
        { "type": "path", "url": "../erede-sdk", "options": { "symlink": true } }
    ],
    "require": { "joshua-barbosa/erede-sdk": "@dev" }
}
```

Com `symlink: true` o Composer aponta o `vendor/` para a sua cópia local: você edita o pacote e o efeito é imediato, sem `composer update`.

### Publicar a configuração

[](#publicar-a-configuração)

```
php artisan vendor:publish --tag=erede-config
```

Isso cria `config/erede.php` na aplicação. O pacote funciona sem publicar — os padrões vêm do próprio arquivo interno —, mas publicar é o caminho para versionar ajustes de timeout, cache e log.

Configuração
------------

[](#configuração)

```
EREDE_MODE=sandbox          # ou production
EREDE_PV=seu-pv
EREDE_TOKEN=sua-chave-de-integracao
```

No OAuth 2.0 da Rede o **PV é o clientId** e a **chave de integração é o clientSecret**.

### Proxy

[](#proxy)

Ambientes corporativos costumam exigir saída por proxy. Basta definir:

```
EREDE_PROXY=http://usuario:senha@proxy.empresa.com.br:8080
```

Isso aplica o mesmo proxy a HTTP e HTTPS. Para separar, ou para excluir hosts:

```
EREDE_PROXY_HTTP=http://proxy.empresa.com.br:8080
EREDE_PROXY_HTTPS=http://proxy.empresa.com.br:8443
EREDE_PROXY_NO=localhost,127.0.0.1,.interno
```

Se nenhuma variável for definida, nenhuma opção de proxy é passada ao Guzzle.

### Timeouts

[](#timeouts)

```
EREDE_TIMEOUT=60            # resposta completa
EREDE_CONNECT_TIMEOUT=10    # conexão TCP
EREDE_AUTH_TIMEOUT=30       # chamada OAuth
```

Não há retry automático: criar transação é um `POST` não idempotente e uma retentativa cega pode gerar cobrança duplicada. Se precisar de retry, aplique-o apenas nas leituras (`get`, `getByReference`).

### Log

[](#log)

O pacote registra o canal `erede` em `logging.channels` automaticamente (driver `daily`, `storage/logs/erede.log`, retenção de 14 dias) e loga por ele.

```
EREDE_LOG_CHANNEL=erede     # null → usa o canal padrão da aplicação
EREDE_LOG_ENABLED=true      # false → silencia os logs do SDK
EREDE_LOG_LEVEL=debug
EREDE_LOG_DAYS=14
```

Se você definir `logging.channels.erede` no `config/logging.php` da aplicação, **a sua definição prevalece** — o pacote nunca sobrescreve configuração explícita. Use isso para mandar o eRede para um stack, Slack, Sentry etc.:

```
// config/logging.php
'channels' => [
    'erede' => [
        'driver' => 'stack',
        'channels' => ['daily', 'slack'],
    ],
],
```

Todo contexto passa por `eRede\Support\Redactor` antes de ir para o log: `access_token`, `securityCode`, `cvv` e afins viram `[REDACTED]`, e `cardNumber` fica mascarado preservando os 4 últimos dígitos.

### Cache do access\_token

[](#cache-do-access_token)

O token é reaproveitado até expirar, descontando 60 s de margem.

```
EREDE_CACHE_STORE=redis     # vazio → store padrão da aplicação
```

Com múltiplos workers, prefira um store compartilhado (`redis`, `memcached`). Com `file` ou `array` cada processo autentica por conta própria.

Uso
---

[](#uso)

### Injeção de dependência (recomendado)

[](#injeção-de-dependência-recomendado)

```
use eRede\eRede;

class CobrancaService
{
    public function __construct(private eRede $erede) {}
}
```

Ou `app(eRede::class)`.

### Instância explícita

[](#instância-explícita)

Útil quando o PV varia por loja/tenant:

```
$erede = new eRede(pv: '...', token: '...', env: 'production');
```

Argumentos omitidos caem para o `config/erede.php` — passar só o `pv` mantém timeouts, proxy e cache da aplicação.

### Criar uma transação de crédito

[](#criar-uma-transação-de-crédito)

```
use eRede\Classes\Transaction;

$transaction = (new Transaction(amount: 149.90, reference: 'pedido-1234'))
    ->creditCard('5448280000000007', '123', 12, 2030, 'JOAO DA SILVA')
    ->setInstallments(3)
    ->setSoftDescriptor('MINHA LOJA');

$response = $erede->transactions()->create($transaction);

$response->getTid();
$response->getReturnCode();     // '00' = aprovada
$response->getAuthorizationCode();
```

### Autorizar agora, capturar depois

[](#autorizar-agora-capturar-depois)

```
$transaction->capture(false);
$autorizada = $erede->transactions()->create($transaction);

// mais tarde
$erede->transactions($autorizada->getTid())->capture(new Amount(149.90));
```

### Consultar

[](#consultar)

```
$erede->transactions('30161009000000000001')->get();
$erede->transactions()->getByReference('pedido-1234');
```

### Cancelar / estornar

[](#cancelar--estornar)

```
use eRede\Classes\Amount;
use eRede\Classes\Url;

$erede->transactions($tid)->refunds()->create(
    new Amount(149.90),
    new Url('https://minhaloja.com.br/webhooks/erede'),
);

$erede->transactions($tid)->refunds()->getByTid();
```

Referência da API
-----------------

[](#referência-da-api)

Documentação detalhada de cada tipo, separada por camada:

DocumentoConteúdo[docs/classes.md](docs/classes.md)`eRede\Classes` — objetos de entrada que você monta (`Transaction`, `Amount`, `Url`) e os blocos aninhados das respostas (`Authorization`, `Capture`, `Refund`, `Status`, `Link`), além da tabela `ReturnResponse`[docs/components.md](docs/components.md)`eRede\Components` — `Transactions` e `Refunds`, os verbos do SDK: quais endpoints chamam, como resolvem o `tid` e o que retornam[docs/responses.md](docs/responses.md)`eRede\Responses` — `Transaction`, `TransactionGet`, `Refund` e `RefundGet`: como a hidratação via `fromData` funciona e o que cada campo significa[docs/traits.md](docs/traits.md)`eRede\Traits` — `ToArray` (serialização e a regra do `ignoreNullable`), `Attribute` (acesso por nome) e `RetrieveResponse` (resposta HTTP → payload ou exceção)Tratamento de erros
-------------------

[](#tratamento-de-erros)

Todas as falhas de comunicação e de negócio lançam `eRede\Exceptions\eRedeException`, que estende `\Exception`.

```
use eRede\Exceptions\eRedeException;

try {
    $response = $erede->transactions()->create($transaction);
} catch (eRedeException $e) {
    $e->getMessage();   // mensagem da Rede já traduzida
    $e->returnCode();   // ex.: '51' (saldo insuficiente)
    $e->getCode();      // status HTTP
    $e->context();      // dados já sanitizados
}
```

Erros de configuração (credenciais ausentes, ambiente inválido) lançam `ConfigurationException`, que também estende `eRedeException` — capture-a separadamente se quiser distinguir falha de setup de recusa do emissor.

`InvalidArgumentException` continua sendo lançada para uso incorreto da API do SDK (consulta sem `tid`, por exemplo).

Testes
------

[](#testes)

```
composer install
composer test
```

115 testes, 364 asserções. Cobertura: **95,45% de linhas / 92,46% de métodos** (medida com PCOV em PHP 8.3).

A suíte usa `Http::fake()` — nenhuma requisição sai para a Rede.

Para cobertura local:

```
vendor/bin/phpunit --coverage-text        # requer pcov ou xdebug
```

Nos testes da sua aplicação, faça o mesmo:

```
Http::fake([
    '*oauth2/token' => Http::response(['access_token' => 'fake', 'token_type' => 'Bearer', 'expires_in' => 3600]),
    '*/v2/transactions' => Http::response(['tid' => '123', 'returnCode' => '00']),
]);
```

Corrigido na extração
---------------------

[](#corrigido-na-extração)

- **`Responses\RefundGet::getRefunds()` lançava `TypeError` sempre.** A propriedade é `?Refund`, mas getter, setter e construtor declaravam `?string`. Como a hidratação via `fromData` atribui um `Refund`, qualquer chamada a `getRefunds()` após `refunds()->getByTid()` estourava — o fluxo de consulta de estornos estava quebrado de ponta a ponta. Os três tipos passaram a ser `?Refund`.

Pendências conhecidas
---------------------

[](#pendências-conhecidas)

Herdadas da versão original e mantidas para não alterar comportamento nesta extração:

- `Amount::getConvertedAmount()` e `Transaction::setAmount()` usam `ceil()` sobre `float * 100`. Funciona para os valores usuais, mas arredonda para cima; migrar para `intval(round(...))` ou `bcmath` seria mais seguro para dinheiro.
- `Traits\Attribute::set()` recebe 2 parâmetros, mas `Classes\Link`, `Classes\Status` e `Responses\TransactionGet` a chamam com 3. O terceiro é ignorado pelo PHP; é código morto, não um defeito.

Apoie
-----

[](#apoie)

Este pacote é mantido nas horas vagas. Se ele te poupou algumas horas de briga com a API da Rede, [me paga um café](https://www.buymeacoffee.com/joshuabarbosa) ☕ — ajuda a manter a compatibilidade em dia conforme o Laravel e a API da Rede evoluem.

Contribuição de código também é bem-vinda: abra uma [issue](https://github.com/joshua-barbosa/erede-sdk/issues) ou um PR.

Licença
-------

[](#licença)

MIT.

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance100

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/151871017?v=4)[Joshua S L Barbosa](/maintainers/joshua-barbosa)[@joshua-barbosa](https://github.com/joshua-barbosa)

---

Tags

laravelsdkpaymentgatewayredePagamentoerede

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/joshua-barbosa-erede-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/joshua-barbosa-erede-sdk/health.svg)](https://phpackages.com/packages/joshua-barbosa-erede-sdk)
```

###  Alternatives

[spatie/laravel-export

Create a static site bundle from a Laravel app

674146.0k6](/packages/spatie-laravel-export)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M348](/packages/psalm-plugin-laravel)[moonshine/moonshine

Laravel administration panel

1.3k253.1k86](/packages/moonshine-moonshine)[illuminate/routing

The Illuminate Routing package.

1419.2M3.3k](/packages/illuminate-routing)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5022.6k](/packages/simplestats-io-laravel-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
