PHPAY-78: adicionar o gateway Pagar.me (Core API v5) - #79
Merged
Merged
Conversation
Quinto gateway da biblioteca. Declara três das cinco capacidades:
SupportsCustomers /customers (CRUD completo, com cartões salvos)
SupportsCharges /orders, /charges
SupportsSubscriptions /plans, /subscriptions
Correção de uma avaliação anterior: o Pagar.me NÃO encaixa nas cinco. Eu tinha
afirmado que sim por causa do endpoint /hooks, mas ele lista as entregas de
webhook já despachadas — o cadastro dos endpoints que as recebem é feito no
dashboard. Não é a capacidade SupportsWebhooks, que nasceu do CRUD de endpoints
do Asaas.
Particularidades:
- Autenticação Basic, com a secret key como usuário e senha vazia, diferente do
Bearer dos outros gateways.
- Ambiente pelo prefixo da chave (sk_test_), não por host: teste e produção
compartilham api.pagar.me/core/v5. Mesmo modelo do Mercado Pago, então o
construtor não recebe $sandbox.
- Valores em centavos inteiros, como no PagBank.
- Pix é payments[].payment_method com um objeto pix: {expires_in}; o
copia-e-cola volta em charges[0].last_transaction.qr_code.
- Cancelamento é DELETE /charges/{id}, com o valor no corpo para estorno
parcial — o delete() do trait não manda corpo, então usa request().
O /hooks vira o recurso webhookDeliveries(), exposto só no gateway concreto e
fora do modelo de capacidades. É o caminho que o modelo abre para o que um
gateway oferece sozinho: quem segura PagarMeGateway alcança, quem tipa uma
capacidade não. Um teste garante que a facade não ganhou esse método.
Cliente e assinatura aceitam o recurso embutido ou por id — passar um array com
`id` troca customer por customer_id, para não criar cadastro duplicado.
151 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 #78
Parte da v2.0.0. Empilhado sobre #77 (PagBank).
Quinto gateway. O Pagar.me é descrito no mercado como o favorito técnico, e o SDK oficial em PHP é autogerado e pouco amigável — é onde o PHPay agrega mais.
Eu havia afirmado que o Pagar.me seria o primeiro a encaixar nas cinco capacidades, por causa do endpoint
/hooks. Estava errado. O/hookslista as entregas de webhook já despachadas; o cadastro dos endpoints que as recebem é feito no dashboard. Não é a capacidadeSupportsWebhooks, que nasceu do CRUD de endpoints do Asaas.São três das cinco, como Mercado Pago e PagBank.
Capacidades
SupportsCustomers/customerscom CRUD completo e cartões salvosSupportsCharges/orders,/chargesSupportsSubscriptions/plans,/subscriptionsSupportsWebhooks/hookslê entregas; cadastro no dashboardSupportsPixKeyspayment_methoddo pedidoO
/hooksvirou um extra fora do modeloLer e reenviar entregas é útil demais para descartar, mas declarar
SupportsWebhookspor causa disso seria mentir —$phpay->webhook()devolveria algo com semântica diferente de todos os outros gateways.A solução é o caminho que o modelo de capacidades abre: vive no gateway concreto, não na facade.
Quem segura
PagarMeGatewayalcança; quem tipa uma capacidade não. Tem teste garantindo que a facade não ganhou esse método.Particularidades
sk_test_), host único. Mesmo modelo do Mercado Pago, então sem$sandbox.payments[].payment_methodcompix: {expires_in}; copia-e-cola emcharges[0].last_transaction.qr_code.DELETE /charges/{id}com valor no corpo para estorno parcial. Odelete()do trait não manda corpo, então usorequest().Recursos
setCustomer/setCustomerId,setItems/addItem,setPix,setBoleto,setPayments,create,find,getAll,findCharge,getStatus,getPixCode,capture,cancelcreate,find,update,getAll,cards,setFiltercreatePlan,findPlan,getAllPlans,destroyPlan,create(com ou sem plano),find,getAll,cancelgetAll,find,resend(fora das capacidades)Cliente e assinatura aceitam o recurso embutido ou por id — passar um array com
idtrocacustomerporcustomer_id, para não criar cadastro duplicado.Verificação
151 testes (391 asserções), PHPStan nível 9 limpo, Pint limpo. Endpoints, autenticação, o caminho do QR Code e o cancelamento por
DELETEforam conferidos na documentação oficial.