AcapaPay · CodeIgniter SDK
Sincronização de Planos de Faturação
Para Que Serve
O Acapadev mantém um catálogo centralizado de planos. Para que a sua app possa criar sessões de checkout com um plan_reference_code válido (ver Checkout), os seus planos locais têm de estar registados no servidor central. O comando spark acapapay:sync-plans automatiza este processo.
Sem Eloquent — usa um Contrato (Interface)
Ao contrário do SDK Laravel (que lê diretamente uma Model Eloquent configurável), o pacote CodeIgniter não assume nenhum ORM ou estrutura de dados específica. Em vez disso, define o contrato AcapaPay\CodeIgniter\Contracts\PlanoProviderInterface, que a sua aplicação implementa — permitindo usar Query Builder, Models CodeIgniter, ou qualquer outra fonte de dados.
O Contrato PlanoProviderInterface
namespace AcapaPay\CodeIgniter\Contracts;
interface PlanoProviderInterface
{
/**
* Devolve os planos ativos a sincronizar com o AcapaPay.
* Cada item deve conter pelo menos: reference_code, name, price.
* Campos opcionais: description, currency, billing_cycle, features.
*
* @return list
*/
public function listarPlanos(): array;
/**
* Chamado após uma sincronização bem-sucedida, para que o host
* persista o id atribuído pelo AcapaPay a cada plano localmente.
*/
public function marcarSincronizado(string $referenceCode, string $acapapayPlanId): void;
}
Passo 1 — Implementar o Contrato
<?php
namespace App\Services;
use AcapaPay\CodeIgniter\Contracts\PlanoProviderInterface;
class AcapaPayPlanoProvider implements PlanoProviderInterface
{
public function listarPlanos(): array
{
$model = new \App\Models\ProdutoModel(); // ou o seu model de preços/planos
return $model->where('activo', true)->findAll();
// cada item precisa de: reference_code, name, price
// opcional: description, currency, billing_cycle, features
}
public function marcarSincronizado(string $referenceCode, string $acapapayPlanId): void
{
(new \App\Models\ProdutoModel())
->where('reference_code', $referenceCode)
->set('acapapay_plan_id', $acapapayPlanId)
->update();
}
}
Passo 2 — Registar o Provider
Aponte acapapay.planoProvider para a classe concreta em app/Config/AcapaPay.php da sua aplicação:
<?php
namespace Config;
use AcapaPay\CodeIgniter\Config\AcapaPay as BaseAcapaPay;
class AcapaPay extends BaseAcapaPay
{
public ?string $planoProvider = \App\Services\AcapaPayPlanoProvider::class;
}
Passo 3 — Executar a Sincronização
php spark acapapay:sync-plans
O que o comando acapapay:sync-plans faz internamente:
- Lê
acapapay.planoProvidere valida que a classe existe e implementaPlanoProviderInterface. - Chama
listarPlanos()na sua implementação. - Se não houver planos, avisa e termina sem chamar a API.
- Autentica via OAuth2 (token cacheado) e envia o lote via
PUT /v1/billing/plans, através do métodosincronizarPlanos()da classeAcapaPay. - Para cada plano devolvido na resposta (
plans, comreference_codeeid), chamamarcarSincronizado($referenceCode, $id)na sua implementação.
Corra o sync sempre que: adicionar novos planos, alterar preços, ou alterar campos de qualquer plano já sincronizado anteriormente — antes de tentar criar um checkout para esse plano.