Refunds
Defina uma referência própria para o estorno e recupere os dados da compra aprovada guardada na aplicação:
$vinti4
->setMerchant(\Erilshk\Sisp\Vinti4Net::generateMerchantRef())
->prepareRefund(
amount: $order['amount'], // inteiro ou string com o total original
transactionID: $order['transaction_id'], // string devolvida pela SISP
clearingPeriod: $order['clearing_period'], // string devolvida pela SISP
);$order representa a compra original; adapte as chaves ao seu modelo.
Depois, gere o formulário:
echo $vinti4->createPaymentForm(
'https://minha-loja.cv/reembolsos/callback',
'pt',
);Dados da transação original
Guarde estes dois dados quando o pagamento for aprovado:
| Dado | Campo retornado pela SISP | Método da resposta |
|---|---|---|
| Clearing Period | merchantRespCP | getClearingPeriod() |
| Transaction ID | merchantRespTid | getTransactionId() |
$transactionId = $response->getTransactionId();
$clearingPeriod = $response->getClearingPeriod();O clearingPeriod é o período contabilístico no qual a transação ocorreu. O transactionID identifica a transação original. Juntos, eles permitem localizar a operação na rede Vinti4.
Parâmetros
| Parâmetro | Tipo | Regra |
|---|---|---|
amount | `float | string` |
transactionID | string | Até 8 caracteres alfanuméricos |
clearingPeriod | string | Numérico, até 4 dígitos |
O reembolso usa CVE, código 132. A biblioteca envia transactionCode=4 e reversal=R.
O montante deve ser o total da transação original; a SISP não suporta estorno parcial neste fluxo. Guarde esse montante no seu banco e não o extraia da resposta do estorno, que pode trazer merchantRespPurchaseAmount=0.
Fluxo de reembolso
sequenceDiagram
participant Merchant
participant SDK
participant SISP
participant Callback
Merchant->>SDK: prepareRefund()
Merchant->>SDK: createPaymentForm()
SDK->>SISP: Pedido de reembolso
SISP->>Callback: Resultado
Callback->>SDK: processResponse()
SDK-->>Callback: Vinti4ResponseProcessar o retorno
$response = $vinti4->processResponse($_POST);
if ($response->hasInvalidFingerprint()) {
http_response_code(400);
exit('Resposta inválida.');
}
if ($response->isSuccess()) {
// Localize pela referência um estorno pendente, confira a sessão
// e marque-o como concluído uma única vez.
echo $response->renderRefundReceipt(
amount: $originalAmount, // valor guardado para a transação original
originalTransactionId: $originalTransactionId,
data: ['companyName' => 'Minha Empresa'],
);
}O estorno pode retornar diretamente à URL de callback, sem apresentar uma página intermediária ao cliente. Erros messageType=6 não revelam se eram de estorno: associe a referência recebida ao estorno pendente guardado na aplicação. Antes de reembolsar, confirme no seu banco que a transação original foi aprovada e ainda permite a devolução solicitada.
