Skip to content

Repository files navigation

Introdução

MultiPayment permite gerenciar pagamentos de diversos gateways de pagamento. Atualmente suporta o Iugu.

Requisitos

  • PHP 8.0+
  • Laravel 8.0+

Instalação

Instale esse pacote pelo composer:

composer require potelo/multi-payment "dev-main" 

Configuração

Após instalar o pacote rode o comando abaixo para publicar as configurações no projeto Laravel

php artisan vendor:publish --provider="Potelo\MultiPayment\Providers\MultiPaymentServiceProvider" 

Verifique se o arquivo multi-payment.php foi criado no diretório config/.

Agora configure as variáveis de ambiente no arquivo .env:

APP_ENV=localMULTIPAYMENT_DEFAULT=iugu#iugu IUGU_ID=IUGU_APIKEY=

Opcionalmente você pode configurar o Trait, para facilitar o uso do método charge junto a um usuário.

usePotelo\MultiPayment\MultiPaymentTrait; class User extends Authenticatable
{
use MultiPaymentTrait;
}

Usando o Trait:

$usuario = User::find(1);
$usuario->charge($options, 'iugu', 10000); 

Também é possível utilizar o Facade:

\Potelo\MultiPayment\Facades\MultiPayment::charge($options); 

Utilizando

MultiPayment:

Usando a classe MultiPayment:

$payment = new \Potelo\MultiPayment\MultiPayment(); // gateway default será usado// ou$payment = new \Potelo\MultiPayment\MultiPayment('iugu');
// ou $payment = new \Potelo\MultiPayment\MultiPayment();
$payment->setGateway('iugu');

InvoiceBuilder

$multiPayment = new \Potelo\MultiPayment\MultiPayment('iugu');
$invoiceBuilder = $multiPayment->newInvoice();
$invoice = $invoiceBuilder->setPaymentMethod('payment_method')
->addCustomer('name', 'email', 'tax_document', 'phone_area', 'phone_number')
->addCustomerAddress('zip_code', 'street', 'number')
->addItem('description', 'quantity', 'price')
->create();

Confira src/MultiPayment/Builders/InvoiceBuilder.php para saber quais métodos estão disponíveis.

Pix Automático

O Pix Automático está disponível no gateway Iugu e é configurado como parte da fatura:

usePotelo\MultiPayment\Models\AutomaticPix;
$invoice = (new \Potelo\MultiPayment\MultiPayment('iugu'))
->newInvoice()
->addAvailablePaymentMethod('pix')
->addCustomer('Nome', 'email@example.com', '01234567891')
->addItem('Mensalidade', 10000, 1)
->addAutomaticPix(
AutomaticPix::AUTHORIZATION_TYPE_QR_CODE_WITH_PAYMENT,
AutomaticPix::FREQUENCY_MONTHLY,
'2026-08-01',
'contrato-123',
'2027-08-01',
AutomaticPix::RETRY_POLICY_ALLOWED,
)
->addAutomaticPixCharge('Mensalidade do plano')
->create();

As demais operações também utilizam os modelos do MultiPayment, enquanto os nomes específicos da Iugu são tratados internamente pelo gateway:

$multiPayment = new \Potelo\MultiPayment\MultiPayment('iugu');
$multiPayment->rescheduleAutomaticPixPayment($invoiceId);
$multiPayment->cancelAutomaticPixRecurrence($recurrenceId);
$multiPayment->cancelAutomaticPixScheduledPayment($invoice->automaticPixCharge);
$multiPayment->getAutomaticPixCancellation($recurrenceId, $cancellationId);
$multiPayment->listAutomaticPixCancellations($recurrenceId, page: 1, limit: 100);
Testes com a sandbox da Iugu

A suíte Integration reúne todos os testes que acessam a sandbox da Iugu. Cada teste cria durante a execução os clientes, faturas e cartões de que precisa; não há dependência de IDs ou outros dados previamente existentes no gateway.

IUGU_ID=seu_account_id \
IUGU_APIKEY=seu_api_token \
./vendor/bin/phpunit -c phpunit.xml.dist --testsuite Integration

Atualmente, a sandbox responde que Pix Automático não está disponível no modo de teste. Os cenários que dependem desse recurso estão identificados com o grupo iugu-sandbox-limitation e usam um skip explícito com a razão da limitação. Os testes permanecem junto das classes responsáveis pelo builder e pela facade para que possam ser reativados quando o ambiente passar a suportar o fluxo.

CustomerBuilder

$multiPayment = new \Potelo\MultiPayment\MultiPayment('iugu');
$customerBuilder = $multiPayment->newCustomer();
$customer = $customerBuilder->setName('Nome')
->setEmail('email')
->setTaxDocument('01234567891')
->setPhone('999999999', '71')
->addAddress('45400000', 'Rua', 'S/N')
->create();

Confira src/MultiPayment/Builders/CustomerBuilder.php para saber quais métodos estão disponíveis.

getInvoice

$invoiceId = '312ASDHGZXSGRTET312ASDHGZXSGRTET';
$payment = new \Potelo\MultiPayment\MultiPayment('iugu');
$foundInvoice = $payment->getInvoice($invoiceId);

charge

$options = [
'amount' => 10000,
'customer' => [
'name' => 'Nome do cliente',
'email' => 'email@example.com',
'tax_document' => '12345678901',
'phone_area' => '71',
'phone_number' => '999999999',
'address' => [ 'street' => 'Rua do cliente',
'number' => '123',
'complement' => 'Apto. 123',
'district' => 'Bairro do cliente',
'city' => 'Cidade do cliente',
'state' => 'SP',
'zip_code' => '12345678',
],
],
'items' => [
[
'description' => 'Produto 1',
'quantity' => 1,
'price' => 10000,
],
[ 'description' => 'Produto 2',
'quantity' => 2,
'price' => 5000,
],
],
'payment_method' => 'credit_card',
'credit_card' => [
'number' => '1234567890123456',
'month' => '12',
'year' => '2022',
'cvv' => '123',
'first_name' => 'João',
'last_name' => 'Maria' ],
];
$payment = new \Potelo\MultiPayment\MultiPayment();
$payment->setGateway('iugu')->charge($options);
atributoobrigatóriotipodescriçãoexemplo
amountobrigatório caso items não seja informadointvalor em centavos10000
customerobrigatórioarrayarray com os dados do cliente['name' => 'Nome do cliente'...]
customer.nameobrigatóriostringnome do cliente'Nome do cliente'
customer.emailobrigatóriostringemail do cliente'joaomaria@email.com'
customer.tax_documentstringcpf ou cnpj do cliente'12345678901'
birth_datestring formato yyyy-mm-dddata de nascimento'01/01/1990'
customer.phone_numberstringtelefone'999999999'
customer.phone_areastringDDD'999999999'
customer.addressobrigatório para o método de pagamento bank_sliparrayarray com os dados do endereço do cliente['street' => 'Rua do cliente'...]
customer.address.streetobrigatóriostringnome da rua'Nome da rua'
customer.address.numberobrigatóriostringnúmero da casa'123'
customer.address.districtobrigatóriostringbairro'Bairro do cliente'
customer.address.cityobrigatóriostringcidade'Salvador'
customer.address.stateobrigatóriostringestado'Bahia'
customer.address.complementobrigatóriostringcomplemento'Apto. 123'
customer.address.zip_codeobrigatóriostringcep'12345678'
itemsobrigatório caso amount não tenha sido informadoarrayarray com os itens da compra[['description' => 'Produto 1',...
items.descriptionobrigatóriostringdescrição do item'Produto 1'
items.quantityobrigatóriointquantidade do item1
items.priceobrigatóriointvalor do item10000
payment_method'credit_card','bank_slip'método de pagamento'credit_card'
expires_atobrigatório caso payment_method seja 'bank_slip' ou 'pix'string no formato yyyy-mm-dddata de expiração da fatura2021-10-10
credit_cardobrigatório caso payment_method seja 'credit_card'arrayarray com os dados do cartão de crédito['number' => '1234567890123456',...
credit_card.tokenstringtoken do cartão para o gateway escolhido'abcdefghijklmnopqrstuvwxyz'
credit_card.numberobrigatório caso token não tenha sido informadostringnúmero do cartão de crédito'1234567890123456'
credit_card.monthobrigatório caso token não tenha sido informadostringmês de expiração do cartão de crédito'12'
credit_card.yearobrigatório caso token não tenha sido informadostringano de expiração do cartão de crédito'2022'
credit_card.cvvobrigatório caso token não tenha sido informadostringcódigo de segurança do cartão de crédito'123'
credit_card.first_namestringprimeiro nome no cartão de crédito'João'
credit_card.last_namestringúltimo nome no cartão de crédito'Maria'
bank_sliparrayarray com os dados do boleto['expires_at' => '2022-12-31',...

Models

Customer

$customer = newCustomer();
$customer->name = 'Teste';
$customer->email = 'teste@email.com';
$customer->taxDocument = '12345678901';
$customer->save('iugu');
echo$customer->id; // 7D96C7C932F2427CAF54F042345A13C60CD7

Invoice

$invoice = newInvoice();
$invoice->customer = $customer;
$item = newInvoiceItem();
$item->description = 'Teste';
$item->price = 10000;
$item->quantity = 1;
$invoice->items[] = $item;
$invoice->paymentMethod = Invoice::PAYMENT_METHOD_CREDIT_CARD;
$invoice->creditCard = newCreditCard();
$invoice->creditCard->number = '4111111111111111';
$invoice->creditCard->firstName = 'João';
$invoice->creditCard->lastName = 'Silva';
$invoice->creditCard->month = '11';
$invoice->creditCard->year = '2022';
$invoice->creditCard->cvv = '123';
$invoice->creditCard->customer = $customer;
$invoice->save('iugu');
echo$invoice->id; // CB1FA9B5BD1C42B287F4AC7F6259E45D

About

MultiPayment permite gerenciar pagamentos de diversos gateways de pagamento. Atualmente suporta o Iugu.

Topics

Resources

Stars

7 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages