Acapadev
⚠️
Esta é a documentação v1 (REF/GPO/EKZ/RDP). Para integrações novas, vê a v2 (WiPay + RedotPay).

AcapaPay · Laravel SDK

Iniciar um Pagamento (Checkout Session)

Como Funciona

O SDK comunica com o servidor central AcapaPay em duas fases sequenciais e automáticas: pede um token OAuth (Client Credentials), cria a sessão de checkout, e devolve o URL de pagamento para redirecionar o utilizador. Tudo isto acontece numa única chamada AcapaPay::checkoutSession(). O token OAuth é obtido e descartado automaticamente — nunca precisa de o gerir manualmente.

ℹ️
Precisas de construir o teu próprio ecrã de pagamento? Este é o fluxo de checkout hospedado (redirect ou iFrame) — o utilizador vê sempre o ecrã de pagamento do SSO. Se precisares de desenhar a tua própria interface (referência Multicaixa, prompt Multicaixa Express, ticket E-Kwanza) sem nunca sair da tua app, usa a API de Pagamento Direta em alternativa.

Assinatura do Método

AcapaPay::checkoutSession(
    mixed  $userId,        // ID do utilizador na sua base de dados
    string $planReference, // Referência do plano (ex: 'PRO_MONTHLY')
    array  $metadata = [], // Dados extras que quer receber de volta no Webhook
    string $successUrl,    // URL para onde redirecionar após pagamento
    string $cancelUrl      // URL para onde redirecionar se o utilizador cancelar
): string // Devolve o URL seguro da sessão de checkout

Exemplo Completo no Controller

<?php

namespace App\Http\Controllers;

use AcapaPay\Laravel\Facades\AcapaPay;

class AssinaturaController extends Controller
{
    public function iniciarCheckout(Request $request)
    {
        $plano = Plano::where('code', $request->plano_code)->firstOrFail();

        try {
            $urlPagamento = AcapaPay::checkoutSession(
                auth()->id(),
                $plano->reference_code,
                [
                    'local_user_id'  => auth()->id(),
                    'local_order_id' => $plano->id,
                    'plano_name'     => $plano->name,
                ],
                route('assinatura.sucesso'),
                route('assinatura.cancelado')
            );

            return view('assinatura.checkout', compact('urlPagamento', 'plano'));

        } catch (\Exception $e) {
            return back()->with('error', 'Não foi possível iniciar o pagamento: ' . $e->getMessage());
        }
    }

    public function sucesso()
    {
        // Nota: a confirmação real vem pelo Webhook, não por esta rota.
        return view('assinatura.sucesso');
    }
}

Metadata é a sua âncora

Tudo o que colocar no array $metadata durante o checkout será devolvido integralmente no payload do Webhook quando o pagamento for confirmado. Use sempre local_user_id e local_order_id para conseguir identificar qual pedido confirmar na sua base de dados.

Enter para selecionar ESC para sair