Pārlūkot izejas kodu

refactor: retorno do qr code

Gustavo Mantovani 1 nedēļu atpakaļ
vecāks
revīzija
986ffa616e

+ 2 - 0
app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPaymentData.php

@@ -3,6 +3,8 @@
 namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData\OrderPixData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData\OrderSplitData;
 
 final readonly class OrderPaymentData extends PagarmeData
 {

+ 1 - 1
app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixAdditionalInformationData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixData/OrderPixAdditionalInformationData.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData;
 
 use App\Data\Pagarme\PagarmeData;
 

+ 1 - 1
app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixData/OrderPixData.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData;
 
 use App\Data\Pagarme\PagarmeData;
 

+ 1 - 1
app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitData/OrderSplitData.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData;
 
 use App\Data\Pagarme\PagarmeData;
 

+ 1 - 1
app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitOptionsData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitData/OrderSplitOptionsData.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData;
 
 use App\Data\Pagarme\PagarmeData;
 

+ 3 - 3
app/Data/Pagarme/Request/OrderRequestData/OrderRequestData.php

@@ -6,9 +6,9 @@ use App\Data\Pagarme\PagarmeData;
 use App\Data\Pagarme\Request\CustomerRequestData\CustomerRequestData as CustomerData;
 use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderCreditCardData;
 use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPaymentData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitOptionsData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData\OrderPixData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData\OrderSplitData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData\OrderSplitOptionsData;
 use App\Models\PaymentSplit;
 use Illuminate\Support\Collection;
 

+ 11 - 2
app/Data/Pagarme/Response/OrderResponseData/OrderChargeResponseData/OrderTransactionResponseData.php

@@ -13,6 +13,9 @@ final readonly class OrderTransactionResponseData extends PagarmeResponseData
         public ?string $createdAt,
         public ?string $acquirerMessage,
         public array   $gatewayResponse,
+        public ?string $qrCode        = null,
+        public ?string $qrCodeUrl     = null,
+        public ?string $expiresAt     = null,
     ) {}
 
     public static function fromArray(array $payload): static
@@ -24,18 +27,24 @@ final readonly class OrderTransactionResponseData extends PagarmeResponseData
             createdAt:       static::arrString($payload, 'created_at'),
             acquirerMessage: static::arrString($payload, 'acquirer_message'),
             gatewayResponse: static::arrArray($payload, 'gateway_response'),
+            qrCode:          static::arrString($payload, 'qr_code'),
+            qrCodeUrl:       static::arrString($payload, 'qr_code_url'),
+            expiresAt:       static::arrString($payload, 'expires_at'),
         );
     }
 
     public function toArray(): array
     {
-        return [
+        return array_filter([
             'id'               => $this->id,
             'status'           => $this->status,
             'amount'           => $this->amount,
             'created_at'       => $this->createdAt,
             'acquirer_message' => $this->acquirerMessage,
             'gateway_response' => $this->gatewayResponse,
-        ];
+            'qr_code'          => $this->qrCode,
+            'qr_code_url'      => $this->qrCodeUrl,
+            'expires_at'       => $this->expiresAt,
+        ], static fn ($v) => $v !== null);
     }
 }

+ 3 - 6
app/Services/Pagarme/Concerns/FormatsPagarmeData.php

@@ -14,10 +14,8 @@ trait FormatsPagarmeData
 
     protected function extractAddressParts(array $data): array
     {
-        $addressLine = trim((string) ($data['address'] ?? ''));
-
-        $segments = array_map('trim', explode(',', $addressLine));
-
+        $addressLine   = trim((string) ($data['address'] ?? ''));
+        $segments      = array_map('trim', explode(',', $addressLine));
         $streetSegment = $segments[0] ?? '';
 
         if (($data['number'] ?? null) === null) {
@@ -68,8 +66,7 @@ trait FormatsPagarmeData
 
         if (count($parts) >= 3) {
             $firstName = array_shift($parts);
-
-            $lastName = array_pop($parts);
+            $lastName  = array_pop($parts);
 
             $initials = array_map(
                 static fn (string $part): string => Str::upper(Str::substr($part, 0, 1)),

+ 7 - 5
app/Services/Pagarme/Concerns/SendsPagarmeRequests.php

@@ -10,10 +10,13 @@ use Throwable;
 trait SendsPagarmeRequests
 {
     protected function pagarmeRequest(
-        string $method, string $path, string $idempotencyKey, string $errorMessage, array|PagarmeData $payload,
+        string            $method,
+        string            $path,
+        string            $idempotencyKey,
+        string            $errorMessage,
+        array|PagarmeData $payload,
     ): array {
-        $payload = $payload instanceof PagarmeData ? $payload->toArray() : $payload;
-
+        $payload  = $payload instanceof PagarmeData ? $payload->toArray() : $payload;
         $endpoint = $this->pagarmeUrl($path);
 
         try {
@@ -53,8 +56,7 @@ trait SendsPagarmeRequests
             ]);
 
             $message = $errorMessage;
-
-            $errors = $responseBody['errors'] ?? [];
+            $errors  = $responseBody['errors'] ?? [];
 
             if ($errors) {
                 $details = [];

+ 3 - 2
app/Services/Pagarme/PagarmeCardService.php

@@ -32,11 +32,12 @@ class PagarmeCardService
 
         $cardData = CardResponseData::fromArray($this->pagarmeRequest(
             method: 'POST',
-            path: "/customers/{$customerId}/cards",
+            path:   "/customers/{$customerId}/cards",
 
             payload: new CardRequestData(
                 token: $paymentMethod->token,
                 label: $paymentMethod->card_name,
+
                 billingAddress: CardBillingAddressData::fromAddress(
                     Address::query()
                         ->with(['city.state', 'state'])
@@ -49,7 +50,7 @@ class PagarmeCardService
             ),
 
             idempotencyKey: $this->idempotencyKey($paymentMethod),
-            errorMessage: 'Erro ao salvar cartao no Pagar.me.',
+            errorMessage:   'Erro ao salvar cartao no Pagar.me.',
         ));
 
         $cardId = $cardData->requireId();

+ 23 - 22
app/Services/Pagarme/PagarmeCustomerService.php

@@ -24,33 +24,34 @@ class PagarmeCustomerService
 
         $client->loadMissing('user');
 
-        $name = $client->user?->name ?? $data['name'] ?? 'Cliente';
+        $name  = $client->user?->name ?? $data['name'] ?? 'Cliente';
         $email = $client->user?->email ?? $data['email'] ?? null;
-        $code = $client->ensureGatewayCode();
+        $code  = $client->ensureGatewayCode();
 
         $document = $this->digits($client->document ?? $data['document'] ?? null);
+
         $documentLen = strlen($document);
 
         $address = $this->buildAddressData($data);
-        $phones = $this->buildPhones($client->user?->phone ?? $data['phone'] ?? null);
+        $phones  = $this->buildPhones($client->user?->phone ?? $data['phone'] ?? null);
 
         $customerRequest = new CustomerRequestData(
-            name: $name,
-            email: (string) $email,
-            document: $document,
-            type: $documentLen === 14 ? 'company' : 'individual',
+            name:         $name,
+            email:        (string) $email,
+            document:     $document,
+            type:         $documentLen === 14 ? 'company' : 'individual',
             documentType: $documentLen === 14 ? 'CNPJ' : 'CPF',
-            code: $code,
-            address: $address,
-            phones: $phones,
+            code:         $code,
+            address:      $address,
+            phones:       $phones,
         );
 
         $customerData = CustomerResponseData::fromArray($this->pagarmeRequest(
-            method: 'POST',
-            path: '/customers',
-            payload: $customerRequest,
+            method:         'POST',
+            path:           '/customers',
+            payload:        $customerRequest,
             idempotencyKey: $this->idempotencyKey($client->id),
-            errorMessage: 'Erro ao criar cliente no Pagar.me.',
+            errorMessage:   'Erro ao criar cliente no Pagar.me.',
         ));
 
         $customerId = $customerData->requireId();
@@ -74,11 +75,11 @@ class PagarmeCustomerService
         ], static fn ($value) => $value !== '');
 
         return new CustomerAddressRequestData(
-            line1: implode(', ', $line1Parts),
-            line2: (string) ($data['complement'] ?? $data['instructions'] ?? ''),
+            line1:   implode(', ', $line1Parts),
+            line2:   (string) ($data['complement'] ?? $data['instructions'] ?? ''),
             zipCode: $this->digits($data['zip_code'] ?? null),
-            city: (string) ($data['city'] ?? ''),
-            state: (string) ($data['state'] ?? ''),
+            city:    (string) ($data['city'] ?? ''),
+            state:   (string) ($data['state'] ?? ''),
             country: (string) ($data['country'] ?? 'BR'),
         );
     }
@@ -92,18 +93,18 @@ class PagarmeCustomerService
         }
 
         $areaCode = substr($digits, 0, 2);
-        $number = substr($digits, 2);
+        $number   = substr($digits, 2);
 
         if (strlen($digits) <= 2) {
             $areaCode = '';
-            $number = $digits;
+            $number   = $digits;
         }
 
         return new CustomerPhonesRequestData(
             mobilePhone: new CustomerPhoneData(
                 countryCode: '55',
-                areaCode: $areaCode,
-                number: $number,
+                areaCode:    $areaCode,
+                number:      $number,
             ),
         );
     }

+ 84 - 77
app/Services/Pagarme/PagarmePaymentService.php

@@ -9,10 +9,10 @@ use App\Data\Pagarme\Request\CustomerRequestData\CustomerRequestData;
 use App\Data\Pagarme\Request\OrderRequestData\OrderItemData;
 use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderCreditCardData;
 use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPaymentData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixAdditionalInformationData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData;
-use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitOptionsData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData\OrderPixAdditionalInformationData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData\OrderPixData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData\OrderSplitData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData\OrderSplitOptionsData;
 use App\Data\Pagarme\Request\OrderRequestData\OrderRequestData;
 use App\Data\Pagarme\Response\OrderResponseData\OrderResponseData;
 use App\Enums\PaymentSplitStatusEnum;
@@ -31,17 +31,17 @@ class PagarmePaymentService
     use SendsPagarmeRequests;
 
     public function processPayment(
-        Payment $payment,
+        Payment  $payment,
         Schedule $schedule,
-        string $paymentMethod,
-        ?string $cardId = null,
-        array $options = [],
+        string   $paymentMethod,
+        ?string  $cardId  = null,
+        array    $options = [],
     ): array {
         $grossAmount = (float) $payment->gross_amount;
 
-        $items = $this->buildOrderItems($schedule, $grossAmount);
+        $items    = $this->buildOrderItems($schedule, $grossAmount);
         $customer = $this->buildCustomer($schedule, $options);
-        $split = $this->buildSplit($payment, $options);
+        $split    = $this->buildSplit($payment, $options);
 
         $pixOptions = config('services.pagarme.pix_disable_split')
             ? []
@@ -51,84 +51,89 @@ class PagarmePaymentService
 
         if ($paymentMethod === 'credit_card') {
             $creditCard = new OrderCreditCardData(
-                cardId: $cardId,
-                installments: 1,
+                cardId:              $cardId,
+                installments:        1,
                 statementDescriptor: Str::limit((string) config('app.name', 'SOFTPAR'), 13, ''),
-                operationType: 'auth_and_capture',
+                operationType:       'auth_and_capture',
             );
 
             return $this->createOrderWithCreditCard(
-                payment: $payment,
-                items: $items,
-                customer: $customer,
+                payment:    $payment,
+                items:      $items,
+                customer:   $customer,
                 creditCard: $creditCard,
-                options: $orderOptions,
+                options:    $orderOptions,
             );
         }
 
         $pixData = new OrderPixData(
             expiresIn: 1800,
+
             additionalInformation: [
                 new OrderPixAdditionalInformationData(
-                    name: 'Agendamento',
+                    name:  'Agendamento',
                     value: (string) $schedule->id,
                 ),
             ],
         );
 
         return $this->createOrderWithPix(
-            payment: $payment,
-            items: $items,
+            payment:  $payment,
+            items:    $items,
             customer: $customer,
-            pix: $pixData,
-            options: $pixOptions,
+            pix:      $pixData,
+            options:  $pixOptions,
         );
     }
 
     public function createOrderWithCreditCard(
-        Payment $payment,
-        array $items,
+        Payment             $payment,
+        array               $items,
         CustomerRequestData $customer,
         OrderCreditCardData $creditCard,
-        array $options = []
+        array               $options = []
     ): array {
         return $this->createOrder(
-            payment: $payment,
-            items: $items,
+            payment:  $payment,
+            items:    $items,
             customer: $customer,
+
             paymentMethod: OrderRequestData::creditCardPaymentMethod(
                 creditCard: $creditCard,
-                split: is_array($options['split'] ?? null) ? $options['split'] : null,
+                split:      is_array($options['split'] ?? null) ? $options['split'] : null,
             ),
+
             options: $options,
         );
     }
 
     public function createOrderWithPix(
-        Payment $payment,
-        array $items,
+        Payment             $payment,
+        array               $items,
         CustomerRequestData $customer,
-        OrderPixData $pix,
-        array $options = []
+        OrderPixData        $pix,
+        array               $options = []
     ): array {
         return $this->createOrder(
-            payment: $payment,
-            items: $items,
+            payment:  $payment,
+            items:    $items,
             customer: $customer,
+
             paymentMethod: OrderRequestData::pixPaymentMethod(
-                pix: $pix,
+                pix:   $pix,
                 split: is_array($options['split'] ?? null) ? $options['split'] : null,
             ),
+
             options: $options,
         );
     }
 
     public function createOrder(
-        Payment $payment,
-        array $items,
+        Payment             $payment,
+        array               $items,
         CustomerRequestData $customer,
-        OrderPaymentData $paymentMethod,
-        array $options = []
+        OrderPaymentData    $paymentMethod,
+        array               $options = []
     ): array {
         $metadata = array_merge([
             'payment_id'  => (string) $payment->id,
@@ -138,22 +143,22 @@ class PagarmePaymentService
         ], $options['metadata'] ?? []);
 
         $requestData = new OrderRequestData(
-            code: $payment->ensureGatewayCode(),
-            items: $items,
-            payments: [$paymentMethod],
-            metadata: $metadata,
-            customer: $customer,
+            code:       $payment->ensureGatewayCode(),
+            items:      $items,
+            payments:   [$paymentMethod],
+            metadata:   $metadata,
+            customer:   $customer,
             customerId: $options['customer_id'] ?? null,
-            closed: $options['closed'] ?? true,
-            channel: $options['channel'] ?? null,
+            closed:     $options['closed']      ?? true,
+            channel:    $options['channel']     ?? null,
         );
 
         $order = OrderResponseData::fromArray($this->pagarmeRequest(
-            method: 'POST',
-            path: '/orders',
-            payload: $requestData,
+            method:         'POST',
+            path:           '/orders',
+            payload:        $requestData,
             idempotencyKey: $this->idempotencyKey($payment),
-            errorMessage: 'Erro ao criar pedido de pagamento no Pagar.me.',
+            errorMessage:   'Erro ao criar pedido de pagamento no Pagar.me.',
         ));
 
         $order->requireId();
@@ -166,12 +171,13 @@ class PagarmePaymentService
     public function applyGatewayResponseToPayment(Payment $payment, array $orderResponse): Payment
     {
         $order = OrderResponseData::fromArray($orderResponse);
-        $newStatus = $order->paymentStatus();
-        $failureCode = null;
+
+        $newStatus      = $order->paymentStatus();
+        $failureCode    = null;
         $failureMessage = null;
 
         if ($newStatus === PaymentStatusEnum::FAILED) {
-            $failureCode = $order->failureCode();
+            $failureCode    = $order->failureCode();
             $failureMessage = $order->failureMessage();
         }
 
@@ -208,8 +214,8 @@ class PagarmePaymentService
 
     private function buildCustomer(Schedule $schedule, array $options = []): CustomerRequestData
     {
-        $client = $schedule->client;
-        $user = $client->user()->first(['id', 'name', 'email', 'phone']);
+        $client  = $schedule->client;
+        $user    = $client->user()->first(['id', 'name', 'email', 'phone']);
         $address = Address::with(['city.state', 'state'])->find($schedule->address_id);
 
         foreach ([
@@ -231,8 +237,8 @@ class PagarmePaymentService
         $phone = $this->buildPhonePayload($user->phone)
             ?: $this->buildPhonePayload($options['phone'] ?? null);
 
-        $state = $address->state?->code ?? $address->city?->state?->code;
-        $city = $address->city?->name;
+        $state   = $address->state?->code ?? $address->city?->state?->code;
+        $city    = $address->city?->name;
         $zipCode = $this->digits($address->zip_code);
 
         $line1 = implode(', ', array_filter([
@@ -255,11 +261,11 @@ class PagarmePaymentService
         }
 
         $customerAddress = new CustomerAddressRequestData(
-            line1: $line1,
-            line2: $address->complement ?: $address->instructions,
+            line1:   $line1,
+            line2:   $address->complement ?: $address->instructions,
             zipCode: $zipCode,
-            city: $city,
-            state: $state,
+            city:    $city,
+            state:   $state,
             country: 'BR',
         );
 
@@ -269,21 +275,21 @@ class PagarmePaymentService
             $customerPhones = new CustomerPhonesRequestData(
                 mobilePhone: new CustomerPhoneData(
                     countryCode: $phone['country_code'],
-                    areaCode: $phone['area_code'],
-                    number: $phone['number'],
+                    areaCode:    $phone['area_code'],
+                    number:      $phone['number'],
                 ),
             );
         }
 
         return new CustomerRequestData(
-            name: $user->name,
-            email: $user->email,
-            document: $document,
-            type: strlen($document) === 14 ? 'company' : 'individual',
+            name:         $user->name,
+            email:        $user->email,
+            document:     $document,
+            type:         strlen($document) === 14 ? 'company' : 'individual',
             documentType: strlen($document) === 14 ? 'CNPJ' : 'CPF',
-            code: "client-{$client->id}",
-            address: $customerAddress,
-            phones: $customerPhones,
+            code:         "client-{$client->id}",
+            address:      $customerAddress,
+            phones:       $customerPhones,
         );
     }
 
@@ -293,9 +299,9 @@ class PagarmePaymentService
             ?? "Servico {$schedule->id}";
 
         return [new OrderItemData(
-            code: "schedule-{$schedule->id}",
-            amount: OrderRequestData::amountInCents($grossAmount),
-            quantity: 1,
+            code:        "schedule-{$schedule->id}",
+            amount:      OrderRequestData::amountInCents($grossAmount),
+            quantity:    1,
             description: $description,
         )];
     }
@@ -333,13 +339,14 @@ class PagarmePaymentService
             $platformRecipientId = config('services.pagarme.platform_recipient_id');
 
             $split[] = new OrderSplitData(
-                amount: OrderRequestData::amountInCents($platformFee),
+                amount:      OrderRequestData::amountInCents($platformFee),
                 recipientId: $platformRecipientId,
-                type: 'flat',
+                type:        'flat',
+
                 options: new OrderSplitOptionsData(
                     chargeProcessingFee: true,
-                    chargeRemainderFee: true,
-                    liable: true,
+                    chargeRemainderFee:  true,
+                    liable:              true,
                 ),
             );
         }

+ 46 - 46
app/Services/Pagarme/PagarmeRecipientService.php

@@ -27,19 +27,19 @@ class PagarmeRecipientService
             return $provider->recipient_id;
         }
 
-        $metadata = $data['recipient_metadata'] ?? [];
-        $paymentMode = $data['recipient_payment_mode'];
+        $metadata      = $data['recipient_metadata'] ?? [];
+        $paymentMode   = $data['recipient_payment_mode'];
         $recipientCode = $provider->ensureGatewayCode();
 
         $addressParts = $this->extractAddressParts($data);
 
         $registerInformation = new RecipientRegisterInformationData(
-            name: $data['recipient_name'],
-            email: $data['recipient_email'],
-            document: $this->digits($data['recipient_document'] ?? null),
-            type: $data['recipient_type'] ?? 'individual',
-            birthdate: $this->formatBirthdate($data['birth_date'] ?? null),
-            monthlyIncome: isset($data['monthly_income']) ? (int) $data['monthly_income'] : 1000,
+            name:                   $data['recipient_name'],
+            email:                  $data['recipient_email'],
+            document:               $this->digits($data['recipient_document'] ?? null),
+            type:                   $data['recipient_type'] ?? 'individual',
+            birthdate:              $this->formatBirthdate($data['birth_date'] ?? null),
+            monthlyIncome:          isset($data['monthly_income']) ? (int) $data['monthly_income'] : 1000,
             professionalOccupation: $data['professional_occupation'] ?? 'autonomo',
 
             phoneNumbers: new RecipientPhoneNumbersData(
@@ -47,13 +47,13 @@ class PagarmeRecipientService
             ),
 
             address: new RecipientAddressData(
-                street: $addressParts['street'],
-                complementary: $addressParts['complementary'],
-                streetNumber: $addressParts['street_number'],
-                neighborhood: $addressParts['neighborhood'],
-                city: $data['city'] ?? null,
-                state: $data['state'] ?? null,
-                zipCode: $this->digits($data['zip_code'] ?? null),
+                street:         $addressParts['street'],
+                complementary:  $addressParts['complementary'],
+                streetNumber:   $addressParts['street_number'],
+                neighborhood:   $addressParts['neighborhood'],
+                city:           $data['city']  ?? null,
+                state:          $data['state'] ?? null,
+                zipCode:        $this->digits($data['zip_code'] ?? null),
                 referencePoint: $addressParts['reference_point'],
             ),
         );
@@ -66,12 +66,12 @@ class PagarmeRecipientService
             code: $recipientCode,
 
             registerInformation: $registerInformation,
-            defaultBankAccount: $defaultBankAccount,
+            defaultBankAccount:  $defaultBankAccount,
 
             transferSettings: new RecipientTransferSettingsData(
-                transferEnabled: false,
+                transferEnabled:  false,
                 transferInterval: 'Daily',
-                transferDay: 0,
+                transferDay:      0,
             ),
 
             automaticAnticipationSettings: new RecipientAutomaticAnticipationSettingsData(
@@ -82,11 +82,11 @@ class PagarmeRecipientService
         $bankAccountData = $payload->defaultBankAccount->toArray();
 
         $raw = $this->pagarmeRequest(
-            method: 'POST',
-            path: '/recipients',
-            payload: $payload,
+            method:         'POST',
+            path:           '/recipients',
+            payload:        $payload,
             idempotencyKey: $this->idempotencyKey($provider->id),
-            errorMessage: 'Erro ao criar recebedor no Pagar.me.',
+            errorMessage:   'Erro ao criar recebedor no Pagar.me.',
         );
 
         $recipientData = RecipientResponseData::fromArray($raw);
@@ -123,23 +123,23 @@ class PagarmeRecipientService
     public function updateDefaultBankAccount(Provider $provider, array $bankAccountData): Provider
     {
         $payload = new BankAccountUpdateRequestData(
-            holderName: $this->normalizeHolderName($bankAccountData['holder_name']),
-            holderType: $bankAccountData['holder_type'],
-            holderDocument: $this->digits($bankAccountData['holder_document']),
-            bank: $bankAccountData['bank'],
-            branchNumber: $bankAccountData['branch_number'],
-            branchCheckDigit: $bankAccountData['branch_check_digit'] ?? null,
-            accountNumber: $bankAccountData['account_number'],
+            holderName:        $this->normalizeHolderName($bankAccountData['holder_name']),
+            holderType:        $bankAccountData['holder_type'],
+            holderDocument:    $this->digits($bankAccountData['holder_document']),
+            bank:              $bankAccountData['bank'],
+            branchNumber:      $bankAccountData['branch_number'],
+            branchCheckDigit:  $bankAccountData['branch_check_digit'] ?? null,
+            accountNumber:     $bankAccountData['account_number'],
             accountCheckDigit: $bankAccountData['account_check_digit'],
-            type: $bankAccountData['type'],
+            type:              $bankAccountData['type'],
         );
 
         $raw = $this->pagarmeRequest(
-            method: 'PATCH',
-            path: "/recipients/{$provider->recipient_id}/default-bank-account",
-            payload: $payload,
+            method:         'PATCH',
+            path:           "/recipients/{$provider->recipient_id}/default-bank-account",
+            payload:        $payload,
             idempotencyKey: $this->idempotencyKey($provider->id, 'default-bank-account-'.sha1(json_encode($payload->toArray()))),
-            errorMessage: 'Erro ao atualizar conta bancaria do recebedor no Pagar.me.',
+            errorMessage:   'Erro ao atualizar conta bancaria do recebedor no Pagar.me.',
         );
 
         $recipientData = RecipientResponseData::fromArray($raw);
@@ -156,15 +156,15 @@ class PagarmeRecipientService
     private function buildRecipientBankAccount(array $data): RecipientBankAccountData
     {
         return new RecipientBankAccountData(
-            holderName: $this->normalizeHolderName($data['holder_name']),
-            holderType: $data['holder_type'],
-            holderDocument: $this->digits($data['holder_document']),
-            bank: $data['bank'],
-            branchNumber: $data['branch_number'],
-            branchCheckDigit: $data['branch_check_digit'] ?? null,
-            accountNumber: $data['account_number'],
+            holderName:        $this->normalizeHolderName($data['holder_name']),
+            holderType:        $data['holder_type'],
+            holderDocument:    $this->digits($data['holder_document']),
+            bank:              $data['bank'],
+            branchNumber:      $data['branch_number'],
+            branchCheckDigit:  $data['branch_check_digit'] ?? null,
+            accountNumber:     $data['account_number'],
             accountCheckDigit: $data['account_check_digit'],
-            type: $data['type'],
+            type:              $data['type'],
         );
     }
 
@@ -174,9 +174,9 @@ class PagarmeRecipientService
 
         if (strlen($digits) < 10) {
             return new RecipientPhoneData(
-                ddd: '11',
+                ddd:    '11',
                 number: '999999999',
-                type: 'mobile',
+                type:   'mobile',
             );
         }
 
@@ -185,9 +185,9 @@ class PagarmeRecipientService
         }
 
         return new RecipientPhoneData(
-            ddd: substr($digits, 0, 2),
+            ddd:    substr($digits, 0, 2),
             number: substr($digits, 2),
-            type: 'mobile',
+            type:   'mobile',
         );
     }
 

+ 32 - 28
app/Services/Pagarme/PagarmeTransferService.php

@@ -17,21 +17,23 @@ class PagarmeTransferService
     {
         if ($this->shouldMockTransferRequest()) {
             return $this->mockTransferResponse(
-                amountInCents: $amountInCents,
-                recipientId: $recipientId,
+                amountInCents:  $amountInCents,
+                recipientId:    $recipientId,
                 idempotencyKey: $idempotencyKey,
             );
         }
 
         return TransferResponseData::fromArray($this->pagarmeRequest(
             method: 'POST',
-            path: '/transfers',
+            path:   '/transfers',
+
             payload: new TransferRequestData(
-                amount: $amountInCents,
+                amount:      $amountInCents,
                 recipientId: $recipientId,
             ),
+
             idempotencyKey: $idempotencyKey,
-            errorMessage: 'Erro ao criar transferencia (saque) no Pagar.me.',
+            errorMessage:   'Erro ao criar transferencia (saque) no Pagar.me.',
         ));
     }
 
@@ -42,11 +44,11 @@ class PagarmeTransferService
         }
 
         return TransferResponseData::fromArray($this->pagarmeRequest(
-            method: 'GET',
-            path: "/transfers/{$transferId}",
-            payload: [],
+            method:         'GET',
+            path:           "/transfers/{$transferId}",
+            payload:        [],
             idempotencyKey: "get-transfer-{$transferId}",
-            errorMessage: 'Erro ao consultar transferencia no Pagar.me.',
+            errorMessage:   'Erro ao consultar transferencia no Pagar.me.',
         ));
     }
 
@@ -75,16 +77,17 @@ class PagarmeTransferService
         $createdAt = Carbon::now();
 
         return new TransferResponseData(
-            id: $transferId,
-            amount: $withdrawal ? (int) round((float) $withdrawal->gross_amount * 100) : 0,
-            type: $withdrawal?->type ?? 'credito_em_conta',
-            status: $withdrawal?->status?->value ?? 'pending_transfer',
-            fee: $withdrawal ? (int) round((float) $withdrawal->gateway_fee_amount * 100) : 0,
-            fundingDate: $withdrawal?->completed_at?->toISOString(),
+            id:                   $transferId,
+            amount:               $withdrawal ? (int) round((float) $withdrawal->gross_amount * 100) : 0,
+            type:                 $withdrawal?->type ?? 'credito_em_conta',
+            status:               $withdrawal?->status?->value ?? 'pending_transfer',
+            fee:                  $withdrawal ? (int) round((float) $withdrawal->gateway_fee_amount * 100) : 0,
+            fundingDate:          $withdrawal?->completed_at?->toISOString(),
             fundingEstimatedDate: $createdAt->copy()->addWeekday()->toISOString(),
-            bankAccount: $withdrawal?->bank_account,
-            bankResponse: $withdrawal?->bank_response,
-            createdAt: $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
+            bankAccount:          $withdrawal?->bank_account,
+            bankResponse:         $withdrawal?->bank_response,
+            createdAt:            $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
+
             metadata: $withdrawal?->metadata ?? [
                 'mocked'      => true,
                 'environment' => app()->environment(),
@@ -94,20 +97,21 @@ class PagarmeTransferService
 
     private function mockTransferResponse(int $amountInCents, string $recipientId, string $idempotencyKey): TransferResponseData
     {
-        $provider = Provider::query()->where('recipient_id', $recipientId)->first();
+        $provider  = Provider::query()->where('recipient_id', $recipientId)->first();
         $createdAt = Carbon::now();
 
         return new TransferResponseData(
-            id: $this->mockTransferId($idempotencyKey),
-            amount: $amountInCents,
-            type: 'credito_em_conta',
-            status: 'pending_transfer',
-            fee: 0,
-            fundingDate: null,
+            id:                   $this->mockTransferId($idempotencyKey),
+            amount:               $amountInCents,
+            type:                 'credito_em_conta',
+            status:               'pending_transfer',
+            fee:                  0,
+            fundingDate:          null,
             fundingEstimatedDate: $createdAt->copy()->addWeekday()->toISOString(),
-            bankAccount: $provider?->recipient_default_bank_account,
-            bankResponse: null,
-            createdAt: $createdAt->toISOString(),
+            bankAccount:          $provider?->recipient_default_bank_account,
+            bankResponse:         null,
+            createdAt:            $createdAt->toISOString(),
+
             metadata: [
                 'mocked'          => true,
                 'environment'     => app()->environment(),

+ 3 - 2
pint.json

@@ -3,10 +3,11 @@
     "exclude": [
         "database/migrations",
         "routes",
-        "app/Models",
+        "app/Data/Pagarme",
         "app/Enums",
         "app/Http/Requests",
-        "app/Data/Pagarme"
+        "app/Models",
+        "app/Services/Pagarme"
     ],
     "rules": {
         "binary_operator_spaces": {