caiquemcz / asaas-payment-gateway
SDK for Asaas Payment integration
v1.0.0
2025-02-26 00:20 UTC
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.9
- myclabs/php-enum: ^1.8
Requires (Dev)
- fakerphp/faker: ^1.24
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.6
- squizlabs/php_codesniffer: ^3.11
README
Uma biblioteca não-oficial para integração com a plataforma Asaas, desenvolvida no estilo Laravel-like. Proporciona uma interface fluida, intuitiva e orientada a objetos para gerenciar cobranças, assinaturas, clientes e outras funcionalidades, seguindo os padrões e a experiência de uso característicos do Laravel.
Nota Importante: Esta é uma implementação não-oficial da API Asaas. Para informações oficiais, consulte a documentação oficial da API Asaas.
Instalação
composer require caiquemcz/asaas-payment-gateway
Inicialização
Para começar a usar a biblioteca, é necessário inicializar o Gateway com suas credenciais:
use CaiqueMcz\AsaasPaymentGateway\Gateway; // Inicializa o Gateway (ambiente: 'sandbox' ou 'production') Gateway::init('sua_api_key', 'seu_webhook_token', 'sandbox');
Modelos Disponíveis
Cliente (Customer)
use CaiqueMcz\AsaasPaymentGateway\Model\Customer; // Criar um cliente $customer = Customer::create([ 'name' => 'João Silva', 'cpfCnpj' => '12345678901', 'email' => 'joao@exemplo.com', 'phone' => '4738010919', 'mobilePhone' => '47998781877', 'address' => 'Rua Teste', 'addressNumber' => '123', 'complement' => 'Apto 101', 'province' => 'Centro', 'postalCode' => '01001001', 'externalReference' => 'CLIENTE123', 'notificationDisabled' => false, 'additionalEmails' => 'outro@exemplo.com', 'municipalInscription' => '46683695908', 'stateInscription' => '646.168.807', 'observations' => 'Cliente VIP' ]); // Obter cliente por ID $customer = Customer::getById('cus_000123456789'); // Atualizar cliente $customer->setName('João Silva Junior'); $customer->update([ 'name' => 'João Silva Junior', 'email' => 'joao.jr@exemplo.com' ]); // Listar clientes $customers = Customer::all(); $customers = Customer::get(['name' => 'João']); $customers = Customer::where('email', 'joao@exemplo.com')->get(); // Excluir cliente $customer->delete(); // Restaurar cliente excluído $customer->restore(); // Tokenizar cartão de crédito para o cliente $creditCard = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCard( '4111111111111111', 'João Silva', '12', '2030', '123' ); $holderInfo = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCardHolderInfo( 'João Silva', 'joao@exemplo.com', '12345678901', '01001001', '123', 'Apto 101', '4738010919', '47998781877' ); $tokenizedCard = $customer->tokenizeCreditCard($creditCard, $holderInfo, '127.0.0.1');
Cobrança (Payment)
use CaiqueMcz\AsaasPaymentGateway\Model\Payment; use CaiqueMcz\AsaasPaymentGateway\Enums\Payments\BillingType; use CaiqueMcz\AsaasPaymentGateway\Enums\Payments\DiscountType; use CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\Discount; use CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\Fine; use CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\Interest; use CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\SplitList; use CaiqueMcz\AsaasPaymentGateway\Model\Split; // Criar uma cobrança simples $payment = Payment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::BOLETO(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Cobrança de teste' ]); // Criar cobrança com desconto $payment = Payment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::BOLETO(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Cobrança com desconto', 'discount' => new Discount(10.0, 5, DiscountType::PERCENTAGE()) ]); // Criar cobrança com multa e juros por atraso $payment = Payment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::BOLETO(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Cobrança com multa e juros', 'fine' => new Fine(5.0, \CaiqueMcz\AsaasPaymentGateway\Enums\Payments\FineType::PERCENTAGE()), 'interest' => new Interest(2.5) ]); // Criar cobrança com split (divisão de pagamentos) $splitList = new SplitList(); $split = Split::fromArray([ 'walletId' => '7bafd95a-e783-4a62-9be1-23999af742c6', 'percentualValue' => 20 // 20% do valor líquido ]); $splitList->addSplit($split); $payment = Payment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::BOLETO(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Cobrança com split', 'split' => $splitList ]); // Criar cobrança com cartão de crédito $creditCard = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCard( '4111111111111111', 'João Silva', '12', '2030', '123' ); $holderInfo = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCardHolderInfo( 'João Silva', 'joao@exemplo.com', '12345678901', '01001001', '123', 'Apto 101', '4738010919', '47998781877' ); $payment = Payment::createWithCreditCard([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Pagamento com cartão', 'creditCard' => $creditCard, 'creditCardHolderInfo' => $holderInfo, 'remoteIp' => '127.0.0.1' ]); // Criar cobrança com cartão de crédito tokenizado $payment = Payment::createWithCreditCardTokenized([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Pagamento com cartão tokenizado', 'creditCardToken' => 'token_123456789', 'remoteIp' => '127.0.0.1' ]); // Pagar uma cobrança existente com cartão de crédito $pendingPayment = Payment::getById('pay_000123456789'); $paidPayment = $pendingPayment->payWithCreditCard($creditCard, $holderInfo); // Pagar com cartão tokenizado $paidPayment = $pendingPayment->payWithCreditCardTokenized('token_123456789'); // Pré-autorização de pagamento com cartão $preAuthPayment = Payment::createWithCreditCard([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 100.00, 'dueDate' => '2025-12-31', 'description' => 'Pagamento pré-autorizado', 'creditCard' => $creditCard, 'creditCardHolderInfo' => $holderInfo, 'remoteIp' => '127.0.0.1', 'authorizeOnly' => true ]); // Capturar pagamento pré-autorizado $capturedPayment = $preAuthPayment->captureAuthorizedPayment(); // Confirmar recebimento em dinheiro $payment->confirmReceiveInCash(date('Y-m-d'), 100.00, true); // Desfazer confirmação de recebimento em dinheiro $payment->undoConfirmReceiveInCash(); // Estornar pagamento $payment->refund(); // Com valor parcial $payment->refund(50.00, 'Estorno parcial'); // Obter QR Code PIX $pixQrCode = $payment->getPixQrCode(); // Obter informações de visualização $viewingInfo = $payment->getViewingInfo(); // Obter dados bancários para identificação $identification = $payment->getIdentificationField(); // Obter informações de pagamento $billingInfo = $payment->getBillingInfo(); // Simular opções de pagamento $simulationOptions = Payment::simulate(1000.00, 12, ['CREDIT_CARD', 'BOLETO', 'PIX']); // Obter limites de pagamento $limits = Payment::getLimits(); // Gerenciar documentos $document = $payment->uploadDocument('INVOICE', '/caminho/para/arquivo.pdf', true); $documentList = $payment->getDocuments(); $updatedDocument = $payment->updateDocument('doc_123456789', true, 'CONTRACT'); $payment->deleteDocument('doc_123456789'); // Estornar pagamento via boleto bancário $payment->bankSlipRefund();
Parcelamento (Installment)
use CaiqueMcz\AsaasPaymentGateway\Model\Installment; use CaiqueMcz\AsaasPaymentGateway\Enums\Payments\BillingType; // Criar um parcelamento $installment = Installment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 100.00, // Valor de cada parcela 'installmentCount' => 3, // Número de parcelas 'dueDate' => '2023-12-31', // Data de vencimento da primeira parcela 'description' => 'Parcelamento de teste', 'externalReference' => 'PARCELA123' ]); // Criar parcelamento com cartão de crédito $installment = Installment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 100.00, 'installmentCount' => 3, 'dueDate' => '2025-12-31', 'description' => 'Parcelamento com cartão', 'creditCard' => $creditCard, 'creditCardHolderInfo' => $holderInfo, 'remoteIp' => '127.0.0.1' ]); // Obter pagamentos de um parcelamento $payments = $installment->getPayments(); $payments = $installment->getPayments('PENDING'); // Filtrar por status // Obter carnê de pagamento $paymentBookUrl = $installment->getPaymentBook(); // Atualizar divisões (splits) do parcelamento $splitList = new SplitList(); $splitList->addSplit(Split::fromArray([ 'walletId' => '7bafd95a-e783-4a62-9be1-23999af742c6', 'percentualValue' => 30 ])); $updatedSplits = $installment->updateSplits($splitList); // Estornar parcelamento $installment->refund();
Assinatura (Subscription)
use CaiqueMcz\AsaasPaymentGateway\Model\Subscription; use CaiqueMcz\AsaasPaymentGateway\Enums\Payments\BillingType; use CaiqueMcz\AsaasPaymentGateway\Enums\Subscriptions\SubscriptionCycle; use CaiqueMcz\AsaasPaymentGateway\Enums\Subscriptions\SubscriptionStatus; // Criar uma assinatura $subscription = Subscription::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 99.90, 'nextDueDate' => '2023-12-31', 'cycle' => SubscriptionCycle::MONTHLY(), 'description' => 'Assinatura mensal', 'externalReference' => 'ASSINATURA123', 'maxPayments' => 12 // Limite de cobranças ]); // Criar assinatura com cartão de crédito $subscription = Subscription::createWithCreditCard([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 99.90, 'nextDueDate' => '2023-12-31', 'cycle' => SubscriptionCycle::MONTHLY(), 'description' => 'Assinatura com cartão', 'creditCard' => $creditCard, 'creditCardHolderInfo' => $holderInfo, 'remoteIp' => '127.0.0.1' ]); // Criar assinatura com cartão tokenizado $subscription = Subscription::createWithCreditCardTokenized([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => 99.90, 'nextDueDate' => '2023-12-31', 'cycle' => SubscriptionCycle::MONTHLY(), 'description' => 'Assinatura com cartão tokenizado', 'creditCardToken' => 'token_123456789', 'remoteIp' => '127.0.0.1' ]); // Atualizar assinatura $subscription->update([ 'value' => 119.90, 'description' => 'Assinatura atualizada', 'status' => SubscriptionStatus::INACTIVE() ]); // Obter cobranças da assinatura $payments = $subscription->getPayments(); $payments = $subscription->getPayments(['status' => 'CONFIRMED']); // Obter carnê de pagamento $paymentBookUrl = $subscription->getPaymentBook();
Split (Divisão de Pagamentos)
use CaiqueMcz\AsaasPaymentGateway\Model\Split; // Obter split por ID $split = Split::getPaid('split_123456789'); $split = Split::getReceived('split_987654321'); // Listar splits $paidSplits = Split::getAllPaid(); $receivedSplits = Split::getAllReceived(); // Filtrar splits $filteredSplits = Split::getAllPaid(['status' => 'DONE']);
Exemplos Completos
Gerenciar Clientes e Cobranças
// Inicializar o Gateway Gateway::init('api_key', null, 'sandbox'); // Criar um cliente $customer = Customer::create([ 'name' => 'José da Silva', 'cpfCnpj' => '12345678901', 'email' => 'jose@exemplo.com', 'phone' => '4738010919', 'mobilePhone' => '47998781877', 'address' => 'Rua das Flores', 'addressNumber' => '100', 'complement' => 'Casa', 'province' => 'Jardim Primavera', 'postalCode' => '89000100' ]); // Criar uma cobrança com desconto, multa, juros e split $discount = new Discount(10.0, 5, DiscountType::PERCENTAGE()); // 10% de desconto se pagar até 5 dias antes $fine = new Fine(2.0, \CaiqueMcz\AsaasPaymentGateway\Enums\Payments\FineType::PERCENTAGE()); // 2% de multa por atraso $interest = new Interest(1.0); // 1% de juros ao mês por atraso $splitList = new SplitList(); $split = Split::fromArray([ 'walletId' => '7bafd95a-e783-4a62-9be1-23999af742c6', 'percentualValue' => 10 // 10% do valor líquido ]); $splitList->addSplit($split); $payment = Payment::create([ 'customer' => $customer->getId(), 'billingType' => BillingType::BOLETO(), 'value' => 299.99, 'dueDate' => date('Y-m-d', strtotime('+30 days')), 'description' => 'Fatura #12345', 'externalReference' => 'FATURA12345', 'discount' => $discount, 'fine' => $fine, 'interest' => $interest, 'split' => $splitList ]); // Link para boleto echo "URL do boleto: " . $payment->getBankSlipUrl() . "\n"; // QR Code PIX (se disponível) $pixInfo = $payment->getPixQrCode(); if ($pixInfo) { echo "Payload PIX: " . $pixInfo->getPayload() . "\n"; echo "QR Code: " . $pixInfo->getEncodedImage() . "\n"; }
Assinatura Recorrente
// Criar cliente $customer = Customer::create([ 'name' => 'Maria Oliveira', 'cpfCnpj' => '98765432109', 'email' => 'maria@exemplo.com', 'mobilePhone' => '11987654321' ]); // Tokenizar cartão $creditCard = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCard( '5555555555554444', 'Maria Oliveira', '01', '2030', '123' ); $holderInfo = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCardHolderInfo( 'Maria Oliveira', 'maria@exemplo.com', '98765432109', '01001001', '100', 'Apto 200', '1138010919', '11987654321' ); $tokenizedCard = $customer->tokenizeCreditCard($creditCard, $holderInfo, '127.0.0.1'); // Criar assinatura com cartão tokenizado $subscription = Subscription::createWithCreditCardTokenized([ 'customer' => $customer->getId(), 'billingType' => BillingType::CREDIT_CARD(), 'value' => 49.90, 'nextDueDate' => date('Y-m-d'), 'cycle' => SubscriptionCycle::MONTHLY(), 'description' => 'Plano Básico Mensal', 'creditCardToken' => $tokenizedCard->getCreditCardToken(), 'remoteIp' => '127.0.0.1' ]); // Obter cobranças geradas $payments = $subscription->getPayments(); foreach ($payments->getRows() as $payment) { echo "Cobrança: " . $payment->getId() . " - Valor: " . $payment->getValue() . " - Status: " . $payment->getStatus() . "\n"; }
Parcelamento com Cartão de Crédito
// Criar parcelamento com cartão $creditCard = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCard( '4111111111111111', 'Carlos Pereira', '12', '2030', '123' ); $holderInfo = new \CaiqueMcz\AsaasPaymentGateway\ValueObject\Payments\CreditCardHolderInfo( 'Carlos Pereira', 'carlos@exemplo.com', '11122233344', '01001001', '123', 'Casa', '1138010919', '11987654321' ); // Calculando valor total com juros $valorTotal = 1200.00; $numParcelas = 6; $valorParcela = $valorTotal / $numParcelas; $installment = Installment::create([ 'customer' => 'cus_000123456789', 'billingType' => BillingType::CREDIT_CARD(), 'value' => $valorParcela, 'installmentCount' => $numParcelas, 'dueDate' => date('Y-m-d'), 'description' => 'Compra parcelada', 'externalReference' => 'COMPRA12345', 'creditCard' => $creditCard, 'creditCardHolderInfo' => $holderInfo, 'remoteIp' => '127.0.0.1' ]); // Obter pagamentos do parcelamento $payments = $installment->getPayments();
Tratamento de Erros
use CaiqueMcz\AsaasPaymentGateway\Exception\AsaasException; use CaiqueMcz\AsaasPaymentGateway\Exception\AsaasValidationException; use CaiqueMcz\AsaasPaymentGateway\Exception\AsaasPageNotFoundException; try { $customer = Customer::getById('cus_id_inexistente'); } catch (AsaasPageNotFoundException $e) { echo "Cliente não encontrado: " . $e->getMessage(); } catch (AsaasValidationException $e) { echo "Erro de validação: " . $e->getMessage(); $errors = $e->getErrors(); foreach ($errors as $error) { echo "- " . $error['description'] . "\n"; } } catch (AsaasException $e) { echo "Erro na API Asaas: " . $e->getMessage(); } catch (\Exception $e) { echo "Erro geral: " . $e->getMessage(); }
Ciclos de Assinatura Disponíveis
WEEKLY
: SemanalBIWEEKLY
: QuinzenalMONTHLY
: MensalBIMONTHLY
: BimestralQUARTERLY
: TrimestralSEMIANNUALLY
: SemestralYEARLY
: Anual
Formas de Pagamento
BOLETO
: Boleto BancárioCREDIT_CARD
: Cartão de CréditoPIX
: Pagamento Instantâneo PIXDEPOSIT
: Depósito BancárioUNDEFINED
: Indefinido
Status de Pagamento
PENDING
: PendenteAUTHORIZED
: AutorizadoCONFIRMED
: ConfirmadoRECEIVED
: RecebidoOVERDUE
: VencidoREFUNDED
: EstornadoRECEIVED_IN_CASH
: Recebido em dinheiroREFUND_REQUESTED
: Estorno solicitadoREFUND_IN_PROGRESS
: Estorno em andamentoCHARGEBACK_REQUESTED
: Chargeback solicitadoCHARGEBACK_DISPUTE
: Disputa de chargebackAWAITING_CHARGEBACK_REVERSAL
: Aguardando reversão de chargebackDUNNING_REQUESTED
: Cobrança solicitadaDUNNING_RECEIVED
: Cobrança recebidaAWAITING_RISK_ANALYSIS
: Aguardando análise de risco
Requisitos
- PHP 7.4 ou superior
- Extensão cURL habilitada
- Extensão JSON habilitada
Licença
Esta biblioteca é distribuída sob a licença MIT.