Configurando o Split Pagbank

É recomendável que faça um backup completo de sua loja e banco de dados antes de iniciar.

Métodos de instalação

O método recomendado é via Composer, no entanto, caso queira, também é possível fazer uma instalação com upload manual ou ainda via Git clone.

Via Composer

Na pasta do projeto execute:
composer require pagbank/split-magento

Após a instalação pelo Composer, execute os seguintes comandos:
bin/magento setup:upgrade bin/magento setup:di:compile

Via Upload de arquivos

  1. Na raiz de seu site, crie a pasta:
    app/code/PagBank/SplitMagento
  2. Faça o download de acordo com a versão usada:
    • Magento 2.4.6
    • Magento 2.4.0 até Magento 2.4.5
    • Magento 2.3x

Descompacte o arquivo recebido.

  1. Envie o conteúdo da pasta obtida no download para dentro da pasta PaymentMagento que você criou em app/code/PagBank/SplitMagento.
  2. Para registrar o módulo, execute os seguintes comandos na pasta principal do Magento:
    bin/magento setup:upgrade bin/magento setup:di:compile

Via Git

  1. Clone o repositório:

Por ssh
git clone [email protected]:pagbank/split-magento.git app/code/PagBank/SplitMagento

Por http
git clone <https://github.com/pagbank/split-magento.git> app/code/PagBank/SplitMagento

  1. Para registrar o módulo, execute os seguintes comandos:
    bin/magento setup:upgrade bin/magento setup:di:compile

Configuração
No painel administrativo, acesse as configurações de pagamento.

Lojas → Configuração

Lojas → Vendas → Formas de Pagamento

Lojas → Vendas → Formas de Pagamento → Configurar

Dividir Pagamento
Opções de configuração para o Split.

Lojas → Vendas → Formas de Pagamento → Configurar

Como personalizar a regra de Split
Aqui você encontra instruções de como personalizar o nó de split encaminhado ao PagBank.

Estrutura esperada pelo PagBank
Para o endpoint /orders deve ser criado o nó splits:

"splits": {
    "method": "FIXED",
    "receivers": [
      {
        "account": {
          "id": "ACCO_A54FD6CD-E43F-4783-A7F4-XXXXXXXXX"
        },
        "amount": {
          "value": 1844
        }
      },
      {
        "account": {
          "id": "ACCO_B1BB0AD0-A8DE-441C-8007-XXXXXXXXX"
        },
        "amount": {
          "value": 3600
        }
      }
    ]
}

Explicação
Method -> Prevê o valor fixo ou percentual.
Receivers -> é o nó de array com os vendedores da transação. Importante o somatório de todos os valores declarados tem que corresponder a 100% do valor que o cliente paga.

Personalizando o recebedor
Você deve personalizar a classe PagBank\SplitMagento\Gateway\Request\Split\ReciversDataRequest, implementando em seu módulo um di.xml, como:

<!-- Add Sub Seller to request -->
<type name="PagBank\SplitMagento\Gateway\Request\Split\ReciversDataRequest">
    <plugin name="pagbank_webkul_add_sub_seller" type="[Vendor]\[Module_Name]\Plugin\Gateway\Request\Split\SubSellerReciversDataRequest" sortOrder="10" />
</type>

Sugerimos alterar apenas o recebedor secundário da transação, usando o método around para esse processo.

/**
 * Build.
 *
 * @param ReciversDataRequest $subject
 * @param callable            $proceed
 * @param array               $buildSubject
 *
 * @SuppressWarnings(PHPMD.StaticAccess)
 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
 */
public function aroundGetSecondarys(ReciversDataRequest $subject, callable $proceed, array $buildSubject)
{
    $isEnabled = $this->helper->isEnabled();

    if (!$isEnabled) {
        return $proceed($buildSubject);
    }

    $secondary = [];

    /** @var PaymentDataObject $paymentDO **/
    $paymentDO = SubjectReader::readPayment($buildSubject);

    /** @var InfoInterface $payment **/
    $payment = $paymentDO->getPayment();

    /** @var Order $order **/
    $order = $payment->getOrder();

    $sellersData = $this->helper->getReciversData($order);

    foreach ($sellersData as $sellerData) {
        $secondary[] = [
            BaseDataRequest::RECEIVER_ACCOUNT => [
                BaseDataRequest::RECEIVER_ACCOUNT_ID => $sellerData['pag_bank_id'],
            ],
            BaseDataRequest::RECEIVER_AMOUNT => [
                BaseDataRequest::RECEIVER_AMOUNT_VALUE => $sellerData['pag_bank_amount'],
            ],
        ];
    }
    
    return $secondary;
}

Note que no exemplo os valores de Seller Data são recebidos de um Helper do módulo que você criou, você pode trocar essa abordagem pela que desejar.

Alterando apenas a função de recebedor secundário, o módulo irá calcular e popular o primário já realizando a regra de calculo do valor para atender a regra de que o split teve ter 100% dos valores declarados.