diff --git a/Model/Graphql/PixDataProvider.php b/Model/Graphql/PixDataProvider.php new file mode 100644 index 00000000..b02926fe --- /dev/null +++ b/Model/Graphql/PixDataProvider.php @@ -0,0 +1,29 @@ +<?php +declare(strict_types=1); + +namespace Pagarme\Pagarme\Model\Graphql; + +use Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderInterface; + +/** + * Format input into value expected when setting payment method + */ +class PixDataProvider implements AdditionalDataProviderInterface +{ + private const PATH_ADDITIONAL_DATA = 'pagarme_pix'; + + /** + * Format input into value expected when setting payment method + * + * @param array $args + * @return array + */ + public function getData(array $args): array + { + if (!empty($args[self::PATH_ADDITIONAL_DATA])) { + return $args[self::PATH_ADDITIONAL_DATA]; + } + + return []; + } +} diff --git a/Plugin/GraphQl/PlaceOrder.php b/Plugin/GraphQl/PlaceOrder.php new file mode 100644 index 00000000..9ee628e8 --- /dev/null +++ b/Plugin/GraphQl/PlaceOrder.php @@ -0,0 +1,63 @@ +<?php +declare(strict_types=1); + +namespace Pagarme\Pagarme\Plugin\GraphQl; + +use Magento\Sales\Api\OrderRepositoryInterface; +use Magento\Sales\Model\OrderFactory; +use Pagarme\Core\Kernel\ValueObjects\Id\OrderId; +use Pagarme\Pagarme\Concrete\Magento2CoreSetup; + +class PlaceOrder +{ + + /** + * @var OrderRepositoryInterface + */ + private $orderRepository; + + /** + * @var \Magento\Sales\Model\OrderFactory + */ + private $orderFactory; + + /** + * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository + * @param \Magento\Sales\Model\OrderFactory $orderFactory + */ + public function __construct( + OrderRepositoryInterface $orderRepository, + OrderFactory $orderFactory + ) { + $this->orderRepository = $orderRepository; + $this->orderFactory = $orderFactory; + } + + /** + * @param \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject + * @param mixed $result + * @return mixed + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterResolve( + \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject, + $result + ) { + $order = $this->orderFactory->create()->loadByIncrementId($result['order']['order_number']); + $payment = $order->getPayment(); + + + if (strpos($payment->getMethod(), "pagarme_pix") === false) { + return $result; + } + + $lastTransId = $payment->getLastTransId(); + $orderId = substr($lastTransId, 0, 19); + + Magento2CoreSetup::bootstrap(); + $orderService= new \Pagarme\Core\Payment\Services\OrderService(); + $result['pagarme_pix'] = $orderService->getPixQrCodeInfoFromOrder(new OrderId($orderId)); + + return $result; + } +} diff --git a/etc/graphql/di.xml b/etc/graphql/di.xml new file mode 100644 index 00000000..5cc41018 --- /dev/null +++ b/etc/graphql/di.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> + <type name="Magento\QuoteGraphQl\Model\Resolver\PlaceOrder"> + <plugin disabled="false" name="Pagarme_Pagarme_Plugin_GraphQl_PlaceOrder" sortOrder="10" type="Pagarme\Pagarme\Plugin\GraphQl\PlaceOrder"/> + </type> + <type name="Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderPool"> + <arguments> + <argument name="dataProviders" xsi:type="array"> + <item name="pagarme_pix" xsi:type="object">Pagarme\Pagarme\Model\Graphql\PixDataProvider</item> + </argument> + </arguments> + </type> +</config> \ No newline at end of file diff --git a/etc/schema.graphqls b/etc/schema.graphqls new file mode 100644 index 00000000..62af28f2 --- /dev/null +++ b/etc/schema.graphqls @@ -0,0 +1,8 @@ +type PlaceOrderOutput { + pagarme_pix: PagarmePix +} + +type PagarmePix { + qr_code: String, + qr_code_url: String +} \ No newline at end of file