PHPAY-85: adicionar o gateway Rede (e.Rede v2) - #86
Merged
Merged
Conversation
Sétimo gateway, e a segunda adquirente. A Rede lidera o mercado por volume transacionado (18%), à frente de Cielo e PagBank. Declara UMA das cinco capacidades: SupportsCharges. É a forma mais estreita da biblioteca, ao lado do Efí, e é a esperada para uma adquirente. Não declarei SupportsSubscriptions de propósito: a transação tem um campo `subscription`, mas ele é uma flag para a adquirente, não um recurso que se liste, altere ou cancele. Duas particularidades, ambas novas: 1. O host de autorização é separado do host de API, e o caminho do token muda por ambiente — oauth2/token no sandbox, redelabs/oauth2/token em produção. Isso ficou em RedeEnvironment, fora do trait, para o gateway poder ler a configuração sem puxar os verbos HTTP que não usa. 2. O token expira. É o primeiro gateway com ciclo de vida de credencial: o Efí autoriza sob demanda mas nunca renova, porque o token dele não vence em uso normal. Aqui a resposta traz expires_in, então Resources/Authorization guarda o token com validade e renegocia sozinho, com margem de 30 segundos para o token nunca vencer entre ser entregue e ser usado. O gateway expõe authorization() para um processo longo inspecionar ou descartar o que está em mãos. O Charge pede um token a cada chamada e injeta como Bearer por requisição, em vez de fixar no header do client — é o que permite a renovação ser invisível para quem usa. CONFIANÇA MENOR QUE NOS GATEWAYS ANTERIORES. O portal da Rede publica a documentação apenas em PDF, então as URLs, os caminhos de token e o fluxo de OAuth vieram de um SDK PHP de terceiros em funcionamento (filipegar/eRede), não da documentação oficial. Os endpoints estão bem evidenciados; os nomes exatos de alguns campos do payload e o suporte a Pix na v2, não. Por isso o escopo ficou em cartão, que é o núcleo de uma adquirente. 171 testes nesta branch (a Cielo está no #84, ainda não mergeada). Os da Rede cobrem o reaproveitamento do token, a renegociação quando expira, o basic auth da negociação, o Bearer por requisição, e o roteamento entre os dois hosts.
Conflitos resolvidos em quatro arquivos. Todos eram aditivos — os dois lados precisavam coexistir, não um substituir o outro: - .gitignore e composer.json: as entradas da Cielo e da Rede entram juntas. - README.md: as tabelas de capacidades, de unidade monetária, de ambientes e a de cobertura do roadmap ganham as duas colunas; as seções de gateway ficam na ordem do documento, Cielo antes de Rede. - tests/Pest.php: os quatro helpers de mock, dois de cada gateway. Duas coisas que precisaram de correção além do merge: 1. O tests/Pest.php tinha conflitos entrelaçados dentro de corpos de função, e resolver "mantendo os dois lados" cortou chaves — o arquivo virou parse error. Reescrevi os quatro helpers inteiros em vez de remendar. 2. O CLAUDE.md não tinha as anotações da Rede. Esta branch saiu do develop antes da Cielo entrar, então os replace() que eu havia escrito procuravam âncoras com texto da Cielo que ainda não existia: viraram no-op silencioso, e eu tinha imprimido "atualizado" sem verificar. Agora as anotações estão lá, e a escrita é conferida em disco. 199 testes com os dois gateways juntos.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #85
Sétimo gateway, e a segunda adquirente. A Rede lidera o mercado por volume transacionado (18%), à frente de Cielo e PagBank.
Capacidades: 1 de 5
Apenas
SupportsCharges. É a forma mais estreita da biblioteca, ao lado do Efí, e é a esperada para uma adquirente.Não declarei
SupportsSubscriptionsde propósito. A transação tem um camposubscription, mas ele é uma flag para a adquirente marcar uma cobrança recorrente — não um recurso que se liste, altere ou cancele. Declarar seria o mesmo erro que eu quase cometi com o/hooksdo Pagar.me: API parecida, semântica diferente.Duas particularidades, ambas novas
1. Host de OAuth separado, com caminho de token por ambiente
sandbox-erede.useredecloud.com.br/v2/api.userede.com.br/erede/v2/rl7-sandbox-api.useredecloud.com.br/api.userede.com.br/oauth2/tokenredelabs/oauth2/tokenRepare que o caminho do token muda entre ambientes — não é só o domínio. Isso ficou em
RedeEnvironment, fora do trait, para o gateway ler a configuração sem puxar os verbos HTTP que não usa.2. O token expira — e este é o primeiro gateway assim
O Efí autoriza sob demanda mas nunca renova, porque o token dele não vence em uso normal. Aqui a resposta traz
expires_in, então um processo longo precisa renegociar.Resources/Authorizationguarda o token com validade e renegocia sozinho, com margem de 30 segundos para o token nunca vencer entre ser entregue e ser usado:O
Chargepede um token a cada chamada e injeta como Bearer por requisição, em vez de fixar no header do client — é o que faz a renovação ser invisível para quem usa. Há testes cobrindo o reaproveitamento, a renegociação após expirar, e o descarte manual.Preciso ser explícito: nos seis anteriores eu conferi endpoints na documentação oficial. Aqui não deu.
O portal da Rede publica a documentação apenas em PDF. As URLs, os caminhos de token e o fluxo de OAuth vieram de um SDK PHP de terceiros em funcionamento (
filipegar/eRede) — evidência razoável, já que é código que roda, mas não é a fonte oficial.Bem evidenciado: URLs, caminhos de token, grant
client_credentials, e os endpointsPOST transactions,PUT transactions/{tid},POST transactions/{tid}/refunds,GET transactions/{tid}.Não confirmado: os nomes exatos de todos os campos do payload, e se a v2 suporta Pix. Por isso o escopo ficou em cartão, que é o núcleo de uma adquirente, e a checagem contra o sandbox importa mais aqui do que nos outros gateways.
Recursos
setReference,setCard,setPayment,setSoftDescriptor,create,find,findByReference,getStatus,capture,refundtoken,hasValidToken,forgetVerificação
171 testes (459 asserções) nesta branch — a Cielo está no #84, ainda não mergeada. PHPStan nível 9 limpo, Pint limpo.