Skip to content

PHPAY-89: adicionar o gateway Woovi/OpenPix — segundo com as cinco capacidades - #90

Merged
mariolucasdev merged 1 commit into
developfrom
feat/phpay-89
Sep 21, 2026
Merged

mariolucasdev merged 1 commit into
developfrom
feat/phpay-89

Conversation

@mariolucasdev

Copy link
Copy Markdown
Collaborator

Closes #89

Nono gateway — e o segundo da biblioteca a declarar as cinco capacidades.

Por que isso importa além da cobertura

Até aqui só o Asaas populava as cinco. Isso deixava em aberto uma dúvida legítima sobre o modelo de capacidades introduzido em #72: ele generaliza, ou foi modelado em cima de um caso único?

O Woovi responde. Duas empresas independentes, com APIs independentes, preenchendo o mesmo contrato:

Gateway Clientes Cobranças Assinaturas Webhooks Chaves Pix
Asaas
Woovi/OpenPix

Há um teste que assevera exatamente essa paridade — se um dos dois perder uma capacidade, ele falha.

Também confirma o que o modelo dizia sobre SupportsPixKeys: é sobre ser PSP e emitir chave própria. O AbacatePay é Pix-nativo e não tem; o Woovi é PSP e tem.

Particularidades

O AppID vai cru no Authorization — sem Bearer, sem Basic. É o único assim, e há teste garantindo que nenhum esquema é prefixado.

O sandbox tem domínio próprio: api.woovi-sandbox.com, não um subdomínio ou caminho de produção.

O webhook fica em api/openpix/v1/ enquanto os demais recursos ficam em api/v1/. Não é engano — é herança da fusão das duas marcas. Anotei no código para ninguém "corrigir" depois.

Todo objeto é endereçável pelo correlationID, o id no seu sistema em vez do id do gateway. Nenhum outro gateway da biblioteca oferece isso, então achei que valia expor em vez de esconder:

$cobranca = $phpay->charge()
    ->setCorrelationId('pedido-1')
    ->setCustomer(['name' => 'Mário Lucas', 'email' => 'fale@phpay.io'])
    ->create(10050);   // R$ 100,50

$phpay->charge()->find('pedido-1');   // pelo SEU id

Chaves Pix de verdade

$phpay->pix()->createKey(PixKeyTypeEnum::RANDOM);
$phpay->pix()->verifyKey('fale@phpay.io');      // antes de pagar um terceiro
$phpay->pix()->staticQrCode('Caixa 1');          // sem valor: o pagador escolhe

README: tabelas transpostas

Com nove gateways, uma coluna por gateway não renderia. Agora gateway é linha e capacidade é coluna — mais legível e escala daqui pra frente.

Verificação

240 testes (643 asserções), PHPStan nível 9 limpo, Pint limpo.

Nono gateway, e o segundo da biblioteca a declarar as CINCO capacidades.

Isso importa além da cobertura. Até aqui só o Asaas populava as cinco, o que
deixava em aberto se o modelo de capacidades introduzido em PHPAY-72
generalizava ou tinha sido modelado em cima de um caso único. Dois gateways
independentes, de empresas independentes, preenchendo o mesmo contrato é
evidência de que a abstração descreve o domínio.

  SupportsCustomers     api/v1/customer
  SupportsCharges       api/v1/charge
  SupportsSubscriptions api/v1/subscriptions
  SupportsWebhooks      api/openpix/v1/webhook
  SupportsPixKeys       api/v1/pix-keys e api/v1/pixQrCode

Particularidades:

- O AppID vai cru no header Authorization, sem Bearer nem Basic. É o único
  assim.
- O sandbox tem domínio próprio, api.woovi-sandbox.com, em vez de subdomínio
  ou caminho de produção.
- O webhook fica em api/openpix/v1/ enquanto os demais recursos ficam em
  api/v1/. Não é engano: é herança da fusão das duas marcas, e está anotado no
  código para ninguém "corrigir" depois.
- Todo objeto é endereçável pelo correlationID, o id no sistema de quem
  integra, em vez do id do gateway. Nenhum outro gateway da biblioteca oferece
  isso, então find() e destroy() aceitam os dois e a documentação mostra o
  caminho pelo correlationID.
- Valores em centavos inteiros.

O README transpõe as duas tabelas de capacidade: com nove gateways, colunas por
gateway não renderiam. Agora gateway é linha e capacidade é coluna, o que
também escala melhor daqui pra frente.

240 testes no total. Os do Woovi cobrem as cinco capacidades declaradas, a
paridade com o Asaas, o AppID sem esquema, o domínio de sandbox, o prefixo
próprio do webhook, e o endereçamento por correlationID.
@mariolucasdev mariolucasdev self-assigned this Sep 21, 2026
@mariolucasdev
mariolucasdev merged commit cde9f3e into develop Sep 21, 2026
6 checks passed
@mariolucasdev
mariolucasdev deleted the feat/phpay-89 branch September 21, 2026 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Adicionar o gateway Woovi/OpenPix — segundo com as cinco capacidades

1 participant