| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- <?php
- namespace App\Services\Pagarme;
- use App\Data\Pagarme\Request\PagarmeBankAccountUpdateRequestData;
- use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRequestData;
- use App\Data\Pagarme\Response\PagarmeRecipientResponseData\PagarmeRecipientResponseData;
- use App\Models\Provider;
- use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
- use Illuminate\Support\Str;
- class PagarmeRecipientService
- {
- use SendsPagarmeRequests;
- public function createRecipientForProvider(Provider $provider, array $data): string
- {
- if (! empty($provider->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;
- }
- }
|