Documentação

Exemplo de Código em PHP



Dados a Enviar


Para efetuar o pedido de pagamento Online devem ser enviados os seguintes dados:


// CONFIGURAÇÕES
$posID = "90051";
$posAutCode = "123456789A";


// OBTER DADOS DE PAGAMENTO
$amount = "1000";
$merchantRef = "R" . date('YmdHms');
$merchantSession = "S" . date('YmdHms');
$dateTime = date('Y-m-d H:m:s');
$entityCode = "";
$referenceNumber = "";


// URL PARA RECEBER RESPOSTA/RESULTADO DO PAGAMENTO
$responseUrl = "http://www.meusite.com/resposta_pagamento.php";

// DADOS A ENVIAR
$fields = [
'transactionCode' => '1',
'posID' => '90051',
'merchantRef' => $merchantRef,
'merchantSession' => $merchantSession,
'amount' => $amount,
'currency' => '132',
'is3DSec' => '1',
'urlMerchantResponse' => $responseUrl,
'languageMessages' => 'en',
'timeStamp' => $dateTime,
'fingerprintversion' => '1'
];

// GERAR PRINGER PRINT E ADICIONAR AOS DADOS DE ENVIO
$fields['fingerprint'] = GerarFingerPrintEnvio(
$posAutCode, $fields['timeStamp'], $amount,
$fields['merchantRef'], $fields['merchantSession'], $fields['posID'],
$fields['currency'], $fields['transactionCode'], $entityCode, $referenceNumber
);

// URL PARA FAZER REQUISIÇÃO
$postUrl = "https://mc.vinti4net.cv/Client_VbV_v2/biz_vbv_clientdata.jsp?FingerPrint=" . urlencode($fields["fingerprint"]) . "&TimeStamp=" . urlencode($fields["timeStamp"]) . "&FingerPrintVersion=" . urlencode($fields["fingerprintversion"]);




Como calcular o FingerPrint


FingerPrint  é gerado no âmbito de pagamento para garantir que os dados não foram alterados no envio.


O FingerPrint de envio de dados pode ser gerado utilizando a seguinte função.

function GerarFingerPrintEnvio
(
    $posAutCode, $timestamp, $amount,
    $merchantRef, $merchantSession, $posID,
    $currency, $transactionCode, $entityCode,
    $referenceNumber
)
{
$toHash = base64_encode(hash('sha512', $posAutCode, true)) . $timestamp . ((int)((float)$amount * 1000))
. $merchantRef . $merchantSession . $posID
. $currency . $transactionCode . $entityCode . $referenceNumber
;
return base64_encode(hash('sha512', $toHash, true));
}


O FingerPrint de validar a resposta em caso de sucesso calcula-se de forma semelhante porêm com campos adicionais,

o desenvolvedor deve calcular o finger print de resposta seguindo a documentação disponibilizada pela SISP. Caso o desenvolvedor não valide o FingerPrint de resposta podem ser feitas compras fraudulentas no seu site ou sua aplicação.


function GerarFingerPrintRespostaBemSucedida
(
    $posAutCode, $messageType, $clearingPeriod,
        $transactionID, $merchantReference, $merchantSession,
        $amount, $messageID, $pan,
        $merchantResponse, $timestamp, $reference,
        $entity, $clientReceipt, $additionalErrorMessage,
        $reloadCode
)
{
// EFETUAR O CALCULO CONFORME A DOCUMENTAÇÃO
$toHash = base64_encode(hash('sha512', $posAutCode, true)) . $messageType . $clearingPeriod . $transactionID
. $merchantReference . $merchantSession .
        ((int)((float)$amount * 1000)) . $messageID . $pan .
        $merchantResponse . $timestamp . $reference .
        $entity . $clientReceipt . $additionalErrorMessage .
        $reloadCode
;
return base64_encode(hash('sha512', $toHash, true));
}




Formulário de envio de dados


Para enviar os dados o programador deve gerar um formulário e permitir que este faça post de forma automática.


Segue o código de Exemplo.

<html>
<head>
<title>Pagamento vinti4</title>
</head>
<body onload='autoPost()'>
<div>
<h5>Processando o pagamento...</h5>
<form action='<?= $postUrl ?>' method='post'>
<?php
foreach ($fields as $key => $value) {
echo "<input type='hidden' name='" . $key . "' value='" . $value . "'>";
}
?>
</form>
</div>
<script>

function autoPost()
{
document.forms[0].submit();
}
</script>
</body>
</html>




Resposta de Pagamento


No End Point (URL a receber resposta de pagamento) para validar o resultado de pagamento deve-se verificar se a resposta é de sucesso ou não, recordando que em caso de sucesso o campo messageType terá um dos seguintes valores "8", "10", "M" ou "P".

Além de verificar o campo messageType deve-se verificar se o FingerPrint recebido no campo resultFingerPrint é igual ao esperado que é calculado conforme a utilização da função GerarFingerPrintRespostaBemSucedida.


<?php
// resposta_pagamento.php

// OBTER DADOS
$posAutCode = "123456789A";

// CONSTANTES DE RESPOSTA DE SUCESSOS
$successMessageType = array('8', '10', 'P', 'M');

// TRANSAÇÃO COM RESPOSTA DE SUCESSO
if(isset($_POST["messageType"]) && in_array($_POST["messageType"], $successMessageType))
{
// CALCULAR FINGERPRINT
$fingerPrintCalculado = GerarFingerPrintRespostaBemSucedida(...);

/*ATENÇÃO: VALIDAR FRINGERPRINT DE SUCESSO
PARA OBTER UMA MELHOR GARANTIA DE SEGURANÇA*/
if($_POST["resultFingerPrint"] == $fingerPrintCalculado)
{
// TRANSACAO BEM SUCEDIDA
echo "Sucesso";
}
else
{
// FINGER PRINT RECEBIDO E CALCULADO SAO DIFERENTES
echo "Erro";
echo "Finger Print de Resposta Inválida";
}
}
else if(isset($_POST["UserCancelled"]) && $_POST["UserCancelled"] == "true")
{
echo "Utilizador cancelou a requisição de compra";
}
else
{
echo "Erro";
echo "<br>";
echo $_POST["merchantRespErrorDescription"];
echo "<br>";
echo $_POST["merchantRespErrorDetail"];
}
?>


Olá, sobre qual assunto desejas conversar?

Refine com uma pergunta mais especifica:

Hey there! Any question?
Hello! 20m ago
Agent typically replies in a few hours. Don't miss their reply.

Send message to agent.
Hey there! Any question?
Hello!
20m ago
Hey! Would you like to talk sales, support, or anyone?
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Where can I get some?
The standard chuck...
There are many variations of passages of Lorem Ipsum available
Just now, Not seen yet
  • Hats
  • T-Shirts
  • Pants