Skip to content

Commit 2688e53

Browse files
Merge pull request #8 from silbeckdevs/feature/upgrade-v2
feat: Migrar autenticação para protocolo OAuth 2.0
2 parents bc3b38b + 46b2ae5 commit 2688e53

15 files changed

Lines changed: 720 additions & 288 deletions

.cursorignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/dist/
2+
build/
3+
/logs/
4+
/log/
5+
/cache/
6+
/.git/
7+
/vendor/
8+
/node_modules/
9+
tests/config/env.test.php
10+
tmp/
11+
error_log

.github/workflows/pull_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
if: ${{ !github.event.pull_request.draft }}
2525
runs-on: ubuntu-latest
2626
steps:
27-
- uses: actions/checkout@v4
27+
- uses: actions/checkout@v6
2828

2929
- name: Install PHP ${{ env.PHP_VERSION }}
3030
uses: shivammathur/setup-php@v2

README.md

Lines changed: 67 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
SDK de integração eRede
44

5+
## ⚠️ Atualização Importante - Nova Autenticação
6+
7+
A partir de **janeiro de 2026**, a Rede implementou um novo método de autenticação baseado em **OAuth2** para aprimorar a segurança das transações.
8+
9+
**A versão 2.x deste SDK é compatível com o novo método de autenticação OAuth2**, garantindo uma transição suave e segura para os desenvolvedores.
10+
11+
Para mais detalhes sobre a nova autenticação e migração, consulte a [documentação oficial da e-Rede](https://developer.userede.com.br/e-rede).
12+
513
## Funcionalidades
614

715
Este SDK possui as seguintes funcionalidades:
@@ -27,7 +35,7 @@ Se já possui um arquivo `composer.json`, basta adicionar a seguinte dependênci
2735
```json
2836
{
2937
"require": {
30-
"silbeckdevs/erede-php": "*"
38+
"silbeckdevs/erede-php": "^2.0.0"
3139
}
3240
}
3341
```
@@ -67,7 +75,13 @@ export REDE_DEBUG=0
6775

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

70-
## Autorizando uma transação
78+
## Configuração da loja
79+
80+
A configuração da loja é feita através da classe `Store`. Ela possui os seguintes parâmetros:
81+
82+
- `filiation`: Número de filiação do estabelecimento (ClientId na versão 2.x)
83+
- `token`: Chave de Integração (ClientSecret na versão 2.x)
84+
- `environment`: Ambiente da loja (Production ou Sandbox)
7185

7286
```php
7387
<?php
@@ -77,6 +91,13 @@ $store = new Store('PV', 'TOKEN', Environment::production());
7791
// Configuração da loja em modo sandbox
7892
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
7993

94+
$eRedeService = new \Rede\eRede($store);
95+
```
96+
97+
## Autorizando uma transação
98+
99+
```php
100+
<?php
80101
// Transação que será autorizada
81102
$transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
82103
'5448280000000007',
@@ -87,7 +108,7 @@ $transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
87108
);
88109

89110
// Autoriza a transação
90-
$transaction = (new eRede($store))->create($transaction);
111+
$transaction = $eRedeService->create($transaction);
91112

92113
if ($transaction->getReturnCode() == '00') {
93114
printf("Transação autorizada com sucesso; tid=%s\n", $transaction->getTid());
@@ -98,12 +119,6 @@ Por padrão, a transação é capturada automaticamente; caso seja necessário a
98119

99120
```php
100121
<?php
101-
// Configuração da loja em modo produção
102-
$store = new Store('PV', 'TOKEN', Environment::production());
103-
104-
// Configuração da loja em modo sandbox
105-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
106-
107122
// Transação que será autorizada
108123
$transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
109124
'5448280000000007',
@@ -114,7 +129,7 @@ $transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
114129
)->capture(false);
115130

116131
// Autoriza a transação
117-
$transaction = (new eRede($store))->create($transaction);
132+
$transaction = $eRedeService->create($transaction);
118133

119134
if ($transaction->getReturnCode() == '00') {
120135
printf("Transação autorizada com sucesso; tid=%s\n", $transaction->getTid());
@@ -126,12 +141,6 @@ if ($transaction->getReturnCode() == '00') {
126141

127142
```php
128143
<?php
129-
// Configuração da loja em modo produção
130-
$store = new Store('PV', 'TOKEN', Environment::production());
131-
132-
// Configuração da loja em modo sandbox
133-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
134-
135144
// Transação que será autorizada
136145
$transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
137146
'5448280000000007',
@@ -145,7 +154,7 @@ $transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
145154
$transaction->setInstallments(3);
146155

147156
// Autoriza a transação
148-
$transaction = (new eRede($store))->create($transaction);
157+
$transaction = $eRedeService->create($transaction);
149158

150159
if ($transaction->getReturnCode() == '00') {
151160
printf("Transação autorizada com sucesso; tid=%s\n", $transaction->getTid());
@@ -156,12 +165,6 @@ if ($transaction->getReturnCode() == '00') {
156165

157166
```php
158167
<?php
159-
// Configuração da loja em modo produção
160-
$store = new Store('PV', 'TOKEN', Environment::production());
161-
162-
// Configuração da loja em modo sandbox
163-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
164-
165168
// Transação que será autorizada
166169
$transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
167170
'5448280000000007',
@@ -172,7 +175,7 @@ $transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
172175
)->additional(1234, 56);
173176

174177
// Autoriza a transação
175-
$transaction = (new eRede($store))->create($transaction);
178+
$transaction = $eRedeService->create($transaction);
176179

177180
if ($transaction->getReturnCode() == '00') {
178181
printf("Transação autorizada com sucesso; tid=%s\n", $transaction->getTid());
@@ -183,12 +186,6 @@ if ($transaction->getReturnCode() == '00') {
183186

184187
```php
185188
<?php
186-
// Configuração da loja em modo produção
187-
$store = new Store('PV', 'TOKEN', Environment::production());
188-
189-
// Configuração da loja em modo sandbox
190-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
191-
192189
// Transação que será autorizada
193190
$transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
194191
'5448280000000007',
@@ -207,7 +204,7 @@ $transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
207204
);
208205

209206
// Autoriza a transação
210-
$transaction = (new eRede($store))->create($transaction);
207+
$transaction = $eRedeService->create($transaction);
211208

212209
if ($transaction->getReturnCode() == '00') {
213210
printf("Transação autorizada com sucesso; tid=%s\n", $transaction->getTid());
@@ -219,12 +216,6 @@ if ($transaction->getReturnCode() == '00') {
219216

220217
```php
221218
<?php
222-
// Configuração da loja em modo produção
223-
$store = new Store('PV', 'TOKEN', Environment::production());
224-
225-
// Configuração da loja em modo sandbox
226-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
227-
228219
// Transação que será autorizada
229220
$transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
230221
'5448280000000007',
@@ -235,7 +226,7 @@ $transaction = (new Transaction(20.99, 'pedido' . time()))->creditCard(
235226
)->iata('code123', '250');
236227

237228
// Autoriza a transação
238-
$transaction = (new eRede($store))->create($transaction);
229+
$transaction = $eRedeService->create($transaction);
239230

240231
if ($transaction->getReturnCode() == '00') {
241232
printf("Transação autorizada com sucesso; tid=%s\n", $transaction->getTid());
@@ -246,14 +237,8 @@ if ($transaction->getReturnCode() == '00') {
246237

247238
```php
248239
<?php
249-
// Configuração da loja em modo produção
250-
$store = new Store('PV', 'TOKEN', Environment::production());
251-
252-
// Configuração da loja em modo sandbox
253-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
254-
255240
// Transação que será capturada
256-
$transaction = (new eRede($store))->capture((new Transaction(20.99))->setTid('TID123'));
241+
$transaction = $eRedeService->capture((new Transaction(20.99))->setTid('TID123'));
257242

258243
if ($transaction->getReturnCode() == '00') {
259244
printf("Transação capturada com sucesso; tid=%s\n", $transaction->getTid());
@@ -264,14 +249,8 @@ if ($transaction->getReturnCode() == '00') {
264249

265250
```php
266251
<?php
267-
// Configuração da loja em modo produção
268-
$store = new Store('PV', 'TOKEN', Environment::production());
269-
270-
// Configuração da loja em modo sandbox
271-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
272-
273252
// Transação que será cancelada
274-
$transaction = (new eRede($store))->cancel((new Transaction(20.99))->setTid('TID123'));
253+
$transaction = $eRedeService->cancel((new Transaction(20.99))->setTid('TID123'));
275254

276255
if ($transaction->getReturnCode() == '359') {
277256
printf("Transação cancelada com sucesso; tid=%s\n", $transaction->getTid());
@@ -282,13 +261,8 @@ if ($transaction->getReturnCode() == '359') {
282261

283262
```php
284263
<?php
285-
// Configuração da loja em modo produção
286-
$store = new Store('PV', 'TOKEN', Environment::production());
287-
288-
// Configuração da loja em modo sandbox
289-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
290-
291-
$transaction = (new eRede($store))->get('TID123');
264+
// Consulta a transação pelo ID
265+
$transaction = $eRedeService->get('TID123');
292266

293267
printf("O status atual da autorização é %s\n", $transaction->getAuthorization()->getStatus());
294268
```
@@ -297,13 +271,8 @@ printf("O status atual da autorização é %s\n", $transaction->getAuthorization
297271

298272
```php
299273
<?php
300-
// Configuração da loja em modo produção
301-
$store = new Store('PV', 'TOKEN', Environment::production());
302-
303-
// Configuração da loja em modo sandbox
304-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
305-
306-
$transaction = (new eRede($store))->getByReference('pedido123');
274+
// Consulta a transação pela referência
275+
$transaction = $eRedeService->getByReference('pedido123');
307276

308277
printf("O status atual da autorização é %s\n", $transaction->getAuthorization()->getStatus());
309278
```
@@ -312,13 +281,8 @@ printf("O status atual da autorização é %s\n", $transaction->getAuthorization
312281

313282
```php
314283
<?php
315-
// Configuração da loja em modo produção
316-
$store = new Store('PV', 'TOKEN', Environment::production());
317-
318-
// Configuração da loja em modo sandbox
319-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
320-
321-
$transaction = (new eRede($store))->getRefunds('TID123');
284+
// Consulta os cancelamentos de uma transação
285+
$transaction = $eRedeService->getRefunds('TID123');
322286

323287
printf("O status atual da autorização é %s\n", $transaction->getAuthorization()->getStatus());
324288
```
@@ -327,12 +291,6 @@ printf("O status atual da autorização é %s\n", $transaction->getAuthorization
327291

328292
```php
329293
<?php
330-
// Configuração da loja em modo produção
331-
$store = new Store('PV', 'TOKEN', Environment::production());
332-
333-
// Configuração da loja em modo sandbox
334-
// $store = new \Rede\Store('PV', 'TOKEN', \Rede\Environment::sandbox());
335-
336294
// Configura a transação que será autorizada após a autenticação
337295
$transaction = (new Transaction(25, 'pedido' . time()))->debitCard(
338296
'5277696455399733',
@@ -357,7 +315,7 @@ $transaction->threeDSecure(
357315
$transaction->addUrl('https://redirecturl.com/3ds/success', Url::THREE_D_SECURE_SUCCESS);
358316
$transaction->addUrl('https://redirecturl.com/3ds/failure', Url::THREE_D_SECURE_FAILURE);
359317

360-
$transaction = (new eRede($store))->create($transaction);
318+
$transaction = $eRedeService->create($transaction);
361319

362320
if ($transaction->getReturnCode() == '220') {
363321
printf("Redirecione o cliente para \"%s\" para autenticação\n", $transaction->getThreeDSecure()->getUrl());
@@ -371,7 +329,7 @@ if ($transaction->getReturnCode() == '220') {
371329
// Configura a transação para o PIX e passa a data de expiração
372330
$transaction = (new Transaction(200.99, 'pedido' . time()))->createQrCode(new \DateTimeImmutable('+ 1 hour'));
373331

374-
$transaction = (new eRede($store))->create($transaction);
332+
$transaction = $eRedeService->create($transaction);
375333

376334
if ($transaction->getReturnCode() == '00') {
377335
printf(
@@ -383,6 +341,33 @@ if ($transaction->getReturnCode() == '00') {
383341

384342
## Observações
385343

386-
- 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')`
344+
- Ao criar uma transação com `$transaction = $eRedeService->create($transaction)` não vai retornar o campo `authorization`, para retornar o campo é preciso fazer uma consulta `$transaction = $eRedeService->get('TID123')`
387345
- O campo `$transaction->getAuthorizationCode()` não está retornando nada, use `$transaction->getBrand()?->getAuthorizationCode()` ou `$transaction->getAuthorization()?->getBrand()?->getAuthorizationCode()`
388346
- Caso precise acessar o JSON original do response utilize `$transaction?->getHttpResponse()->getBody()`
347+
348+
### Gerenciamento de Token OAuth2
349+
350+
O token de autenticação OAuth2 possui um **tempo de expiração** de 24 minutos. Para otimizar o desempenho e evitar requisições desnecessárias, é recomendado **salvar e reutilizar o token** enquanto ele estiver válido.
351+
352+
**Exemplo de implementação:**
353+
354+
```php
355+
<?php
356+
$store = new Store('PV', 'TOKEN', Environment::production());
357+
$eRedeService = new eRede($store);
358+
359+
// Faça suas requisições...
360+
361+
// Salve o token para reutilização e salve em um local seguro
362+
$cachedToken = json_encode($eRedeService->getOAuthToken());
363+
364+
// Para reutilizar o token, basta decodificar o JSON e setar no store
365+
$store->setOAuthToken((new OAuthToken())->populate(json_decode($cachedToken)));
366+
$eRedeService = new eRede($store);
367+
```
368+
369+
**Recomendações:**
370+
371+
- Armazene o token em cache (Redis, Memcached) ou banco de dados para ambientes de produção
372+
- Sempre verifique a expiração antes de reutilizar o token
373+
- O SDK gerencia automaticamente a renovação quando o token expira

composer.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "silbeckdevs/erede-php",
3-
"version": "1.0.2",
3+
"version": "2.0.0",
44
"description": "e.Rede integration SDK",
55
"minimum-stability": "stable",
66
"license": "MIT",
@@ -12,11 +12,11 @@
1212
"psr/log": "*"
1313
},
1414
"require-dev": {
15-
"phpunit/phpunit": "^12.1.6",
16-
"phpstan/phpstan": "^1.12.27",
17-
"kint-php/kint": "^6.0.1",
15+
"phpunit/phpunit": "^12.4.5",
16+
"phpstan/phpstan": "^1.12.32",
17+
"kint-php/kint": "^6.1.0",
1818
"monolog/monolog": "^3.9.0",
19-
"friendsofphp/php-cs-fixer": "^3.75.0",
19+
"friendsofphp/php-cs-fixer": "^3.91.2",
2020
"brainmaestro/composer-git-hooks": "^3.0.0"
2121
},
2222
"autoload": {

0 commit comments

Comments
 (0)