PagarmeOrderPaymentData.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
  3. use App\Data\Pagarme\PagarmeData;
  4. final readonly class PagarmeOrderPaymentData extends PagarmeData
  5. {
  6. /**
  7. * @param PagarmeOrderSplitData[]|null $split
  8. */
  9. public function __construct(
  10. public string $paymentMethod,
  11. public ?PagarmeOrderCreditCardData $creditCard = null,
  12. public ?PagarmeOrderPixData $pix = null,
  13. public ?array $split = null,
  14. ) {
  15. self::requireIn($this->paymentMethod, ['credit_card', 'pix'], 'payments.payment_method');
  16. if ($this->paymentMethod === 'credit_card' && ! $this->creditCard) {
  17. throw new \InvalidArgumentException('payments.credit_card e obrigatorio para credit_card.');
  18. }
  19. if ($this->paymentMethod === 'pix' && ! $this->pix) {
  20. throw new \InvalidArgumentException('payments.pix e obrigatorio para pix.');
  21. }
  22. }
  23. /**
  24. * @param PagarmeOrderSplitData[]|null $split
  25. */
  26. public static function creditCard(PagarmeOrderCreditCardData $creditCard, ?array $split = null): self
  27. {
  28. return new self(
  29. paymentMethod: 'credit_card',
  30. creditCard: $creditCard,
  31. split: $split,
  32. );
  33. }
  34. /**
  35. * @param PagarmeOrderSplitData[]|null $split
  36. */
  37. public static function pix(PagarmeOrderPixData $pix, ?array $split = null): self
  38. {
  39. return new self(
  40. paymentMethod: 'pix',
  41. pix: $pix,
  42. split: $split,
  43. );
  44. }
  45. public function toArray(): array
  46. {
  47. $payload = $this->filterFilledRecursive([
  48. 'payment_method' => $this->paymentMethod,
  49. 'split' => $this->split,
  50. ]);
  51. if ($this->creditCard) {
  52. $payload['credit_card'] = $this->creditCard->toArray();
  53. }
  54. if ($this->pix) {
  55. $payload['pix'] = $this->pix->toArray();
  56. }
  57. return $payload;
  58. }
  59. }