recipient_id)) { return $provider->recipient_id; } $metadata = $data['recipient_metadata'] ?? []; $paymentMode = $data['recipient_payment_mode']; $recipientCode = $this->ensureRecipientCode($provider); $payload = PagarmeRecipientRequestData::fromPayload($recipientCode, $data); $bankAccountData = $payload->defaultBankAccount->toArray(); $recipientData = PagarmeRecipientResponseData::fromArray($this->pagarmeRequest( method: 'POST', path: '/recipients', payload: $payload, idempotencyKey: $this->idempotencyKey($provider->id), errorMessage: 'Erro ao criar recebedor no Pagar.me.', )); $recipientId = $recipientData->requireId(); $provider->forceFill([ 'recipient_id' => $recipientId, 'recipient_name' => $data['recipient_name'], 'recipient_email' => $data['recipient_email'], 'recipient_description' => $data['recipient_description'], 'recipient_document' => $data['recipient_document'], 'recipient_type' => $payload->registerInformation->type, 'recipient_code' => $recipientCode, 'recipient_payment_mode' => $paymentMode, 'recipient_default_bank_account' => $bankAccountData, 'recipient_transfer_settings' => [ 'transfer_enabled' => false, 'transfer_interval' => 'daily', 'transfer_day' => 0, ], 'recipient_automatic_anticipation_settings' => [ 'enabled' => false, ], 'recipient_metadata' => $metadata, ])->save(); return $recipientId; } public function updateDefaultBankAccount(Provider $provider, array $bankAccountData): Provider { $payload = PagarmeBankAccountUpdateRequestData::fromArray($bankAccountData); $recipientData = PagarmeRecipientResponseData::fromArray($this->pagarmeRequest( 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.', )); $provider->forceFill([ 'recipient_default_bank_account' => $recipientData->defaultBankAccount()?->toArray() ?: $payload->toArray()['bank_account'], ])->save(); return $provider->fresh(); } // evita criacao duplica de recipient private function idempotencyKey(int $providerId, string $suffix = 'recipient'): string { return "provider-{$providerId}-{$suffix}"; } private function ensureRecipientCode(Provider $provider): string { if (! empty($provider->recipient_code)) { return $provider->recipient_code; } $recipientCode = 'provider-'.(string) Str::uuid(); $provider->forceFill(['recipient_code' => $recipientCode])->save(); return $recipientCode; } }