| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- namespace App\Services\Pagarme;
- use App\Data\Pagarme\Anticipation\BulkAnticipationRequestData;
- use App\Data\Pagarme\Anticipation\BulkAnticipationResponseData;
- use App\Data\Pagarme\Order\OrderRequestData;
- use App\Models\Payment;
- use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
- use Illuminate\Support\Facades\Log;
- use Throwable;
- class PagarmeAnticipationService
- {
- use SendsPagarmeRequests;
- public function createBulkAnticipation(Payment $payment): ?BulkAnticipationResponseData
- {
- $provider = $payment->provider()->first();
- if (! $provider) {
- return null;
- }
- $recipientId = $provider->recipient_id;
- if (empty($recipientId)) {
- return null;
- }
- $providerSplit = $payment->splits()
- ->where('provider_id', $payment->provider_id)
- ->first();
- if (! $providerSplit) {
- return null;
- }
- $requestedAmount = OrderRequestData::amountInCents((float) $providerSplit->gross_amount);
- if ($requestedAmount <= 0) {
- return null;
- }
- try {
- $response = BulkAnticipationResponseData::fromArray($this->pagarmeRequest(
- method: 'POST',
- path: "/recipients/{$recipientId}/bulk_anticipations",
- payload: new BulkAnticipationRequestData(
- paymentDate: now()->toISOString(),
- timeframe: 'start',
- requestedAmount: $requestedAmount,
- automaticTransfer: false,
- ),
- idempotencyKey: "bulk-ant-{$payment->id}-{$payment->provider_id}",
- errorMessage: 'Erro ao criar antecipacao no Pagar.me.',
- ));
- $response->requireId();
- return $response;
- } catch (Throwable $e) {
- Log::channel('pagarme')->warning('Falha ao criar antecipacao no Pagar.me.', [
- 'payment_id' => $payment->id,
- 'provider_id' => $payment->provider_id,
- 'recipient_id' => $recipientId,
- 'requested_amount' => $requestedAmount,
- 'error' => $e->getMessage(),
- ]);
- return null;
- }
- }
- }
|