PHPAY-87: adicionar o gateway AbacatePay - #88
Merged
Merged
Conversation
Oitavo gateway, e o primeiro fora do grupo de incumbentes: Pix nativo, com tração entre dev indie, infoproduto e micro-SaaS. Declara duas das cinco capacidades: SupportsCustomers e SupportsCharges. A pergunta que motivou avaliar este gateway era se ele seria o primeiro desde o Asaas a declarar SupportsPixKeys, por ser Pix nativo. A resposta é NÃO. Ele não gerencia chaves nem QR Code estático: Pix ali é o método de pagamento da cobrança, e o único aceito (methods aceita exatamente um item, e só PIX). Reforça o que o modelo já dizia — aquela capacidade é sobre ser PSP e emitir chave própria, não sobre aceitar Pix. Também não declara assinaturas: o OpenAPI documenta ONE_TIME como a única frequência aceita, então seria declarar algo que a API recusa. Particularidades: - Host único, e a chave NÃO traz prefixo que diferencie dev mode de produção. Diferente de Mercado Pago (TEST-) e Pagar.me (sk_test_), aqui não dá para derivar o ambiente da credencial — então não criei isSandbox(). Inventar convenção seria mentir. A resposta da cobrança traz devMode, e é isso que isDevMode() lê: a informação honesta. - A cobrança é um link de pagamento montado a partir de PRODUTOS, não de um valor solto; o total vem calculado em amount. addProduct() expressa isso. - Preço em centavos com mínimo de 100 (R$ 1,00), que o OpenAPI define e o validador recusa antes de qualquer chamada. - returnUrl e completionUrl são obrigatórios — é um gateway de link. - Cupons de desconto são recurso que nenhum outro gateway da biblioteca tem. Como o webhookDeliveries() do Pagar.me, entram no gateway concreto, fora do modelo de capacidades, com teste garantindo que a facade não os ganhou. A documentação publica llms.txt e a definição OpenAPI completa por endpoint, o que deu confiança alta — bem diferente da Rede, onde tive que reverter de um SDK de terceiros. 219 testes no total.
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 #87
Oitavo gateway, e o primeiro fora do grupo de incumbentes. Pix nativo, com tração entre dev indie, infoproduto e micro-SaaS — público que casa com uma biblioteca PHP.
A pergunta que motivou avaliar este gateway
Sendo Pix nativo, ele seria o primeiro candidato desde o Asaas a declarar
SupportsPixKeys.A resposta é não. O AbacatePay não gerencia chaves nem QR Code estático. Pix ali é o método de pagamento da cobrança, e o único aceito — o OpenAPI define
methodscomminItems: 1, maxItems: 1e enum["PIX"].Isso reforça o que o modelo de capacidades já dizia:
SupportsPixKeysé sobre ser PSP e emitir chave própria, não sobre aceitar Pix. Continua exclusividade do Asaas.Capacidades: 2 de 5
SupportsCustomerseSupportsCharges.Não declara assinaturas porque o OpenAPI documenta
ONE_TIMEcomo a única frequência aceita — declarar seria prometer algo que a API recusa.Particularidades
Host único, e a chave não traz prefixo. Diferente de Mercado Pago (
TEST-) e Pagar.me (sk_test_), aqui não dá para derivar o ambiente da credencial. Por isso não crieiisSandbox()— inventar uma convenção que a documentação não define seria mentir sobre o que a biblioteca sabe.A resposta da cobrança traz
devMode, e é isso queisDevMode()lê:A cobrança é montada por produtos, não por valor. O total vem calculado em
amount:O
externalIdé o id do produto no seu sistema — o AbacatePay cria o produto do lado dele a partir dele, então precisa ser único.Preço em centavos com mínimo de 100 (R$ 1,00), definido no OpenAPI e recusado pelo validador antes de qualquer chamada.
returnUrlecompletionUrlsão obrigatórios — é um gateway de link de pagamento.Cupons: extra fora do modelo
Nenhum outro gateway da biblioteca tem cupons de desconto, então não virou capacidade. Vive no gateway concreto, como o
webhookDeliveries()do Pagar.me — com teste garantindo que a facade não ganhou o método.Confiança da fonte
Alta, e bem diferente da Rede. A documentação publica um
llms.txte a definição OpenAPI completa por endpoint — campos obrigatórios, enums e mínimos vieram direto de lá, não de inferência.Verificação
219 testes (589 asserções), PHPStan nível 9 limpo, Pint limpo.