PagarmeAnticipationService.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Services\Pagarme;
  3. use App\Data\Pagarme\Anticipation\BulkAnticipationRequestData;
  4. use App\Data\Pagarme\Anticipation\BulkAnticipationResponseData;
  5. use App\Data\Pagarme\Order\OrderRequestData;
  6. use App\Models\Payment;
  7. use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
  8. use Illuminate\Support\Facades\Log;
  9. use Throwable;
  10. class PagarmeAnticipationService
  11. {
  12. use SendsPagarmeRequests;
  13. public function createBulkAnticipation(Payment $payment): ?BulkAnticipationResponseData
  14. {
  15. $provider = $payment->provider()->first();
  16. if (! $provider) {
  17. return null;
  18. }
  19. $recipientId = $provider->recipient_id;
  20. if (empty($recipientId)) {
  21. return null;
  22. }
  23. $providerSplit = $payment->splits()
  24. ->where('provider_id', $payment->provider_id)
  25. ->first();
  26. if (! $providerSplit) {
  27. return null;
  28. }
  29. $requestedAmount = OrderRequestData::amountInCents((float) $providerSplit->gross_amount);
  30. if ($requestedAmount <= 0) {
  31. return null;
  32. }
  33. try {
  34. $response = BulkAnticipationResponseData::fromArray($this->pagarmeRequest(
  35. method: 'POST',
  36. path: "/recipients/{$recipientId}/bulk_anticipations",
  37. payload: new BulkAnticipationRequestData(
  38. paymentDate: now()->toISOString(),
  39. timeframe: 'start',
  40. requestedAmount: $requestedAmount,
  41. automaticTransfer: false,
  42. ),
  43. idempotencyKey: "bulk-ant-{$payment->id}-{$payment->provider_id}",
  44. errorMessage: 'Erro ao criar antecipacao no Pagar.me.',
  45. ));
  46. $response->requireId();
  47. return $response;
  48. } catch (Throwable $e) {
  49. Log::channel('pagarme')->warning('Falha ao criar antecipacao no Pagar.me.', [
  50. 'payment_id' => $payment->id,
  51. 'provider_id' => $payment->provider_id,
  52. 'recipient_id' => $recipientId,
  53. 'requested_amount' => $requestedAmount,
  54. 'error' => $e->getMessage(),
  55. ]);
  56. return null;
  57. }
  58. }
  59. }