OrderPaymentData.php 2.1 KB

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