🚀Criando uma transação

Esta página contém instruções de como solicitar a criação de uma transação na API da 4P Finance.

Resumo

Para realizar transações, é necessário executar uma chamada para a API e obter como retorno o Identificador da Transação/TID ( Transation ID ), que deverá ser enviado para o smart contract / endereço, ambos retornados pela 4P Finance.

Com o TID e o endereço do smart contract, o próximo passo é executar o método DoTransaction do smart contract iniciando assim a transação, passando como parâmetro o TID e Valor a ser transferido, após o usuário aprovar na sua carteira.

Drawing

Solicitação de registro/transação

A requisição para realizar a criação/registro de uma transação deverá ter como corpo da solicitação JSON as informações necessárias para registrar a transação. Esses dados serão os dados referente a transação e os dados do produto ou serviço a ser cobrado.

Exemplo de requisição

{
    "transaction": {
        "transaction_data": {
            "buyer_name": "Marcos Meira",
            "buyer_email": "[email protected]",
            "total_discount": 2000,
            "amount_brl": 18000,
            "amount_crypto": "24.024",
            "chain_id": "137",
            "currency_symbol": "MATIC",
            "custom_id": "PN0032",
            "notification_url": "https://meudominio.com.br/callback/?numpedido=pn0032"
        },
        "transaction_items": [
            {
                "description": "Produto Teste 01",
                "quantity": 1,
                "discount": 1000,
                "amount": 10000
            },
            {
                "description": "Produto Teste 02",
                "quantity": 1,
                "discount": 1000,
                "amount": 10000
            }
        ]
    }
}

Requisição

Solicita a criação/registro de uma transação.

POST https://api.4p.finance/v1/transaction/create/

Realiza a solicitação do registro de uma transação pelo gateway e o monitoramento da mesma.

Headers

Name
Type
Description

x-api-key*

String

Sua chave API.

Request Body

Name
Type
Description

transaction_data*

Object

Objeto que deverá conter os dados da transação.

transaction*

Object

Objeto principal.

buyer_name*

String

Nome do cliente/usuário.

buyer_email*

String

E-mail do cliente/usuário.

total_discount*

Integer

Total de desconto da transação. Exemplo: 2010 = R$ 20,10.

amount_brl*

Integer

Valor total da compra em BRL/REAL. Exemplo: 18990 = R$ 189,90.

amount_crypto*

String

Valor total da compra convertido para a criptomoeda/token e que será cobrado na transação.

chain_id*

String

ID da rede/blockchain que será executada a transação. Exemplo: 137.

currency_symbol*

String

Símbolo da moeda/token que será transferido na transação. Exemplo: MATIC.

custom_id*

String

Identificador único/personalizado da transação na sua aplicação. Esse identificador deverá ser gerado por sua aplicação para fins de controle.

notification_url*

String

URL de retorno de sua aplicação que receberá as notificações de status da transação via POST.

transaction_items*

Array

Array que deverá conter os dados dos objetos/itens ( produtos ou serviço ).

description*

String

Descrição do item / produto ou serviço.

quantity*

Integer

Quantidade do item.

discount*

Integer

Valor do desconto do item. Exemplo: 2000 = R$ 20,00.

amount*

Integer

Valor do item. Exemplo: 4999 = R$ 49,99.

{
    "http_code": 200,
    "success": true,
    "info": {
        "result": "checkout_registered",
        "message": "Checkout was successfully registered.",
        "data": {
            "address_smart_contract": "0xb40fa00662b512b2d83e4da738b0a35f0b9e38cd",
            "tid": 1591
        }
    }
}

Retorno

Observe que o retorno contém o data onde temos a chave address_smart_contract, e no seu valor, o endereço do smart contract, que deverá receber o Valor em criptomoeda a ser transferido.

Observe também, que dentro do data temos o tid e no seu valor o Identificador da Transação registrada. Esse valor deverá ser passado como parâmetro na execução do método DoTransaction do smart contract.

Execução da transferência

Veja abaixo um exemplo em JavaScript que executa a chamada do método DoTransaction enviado o TID como parâmetro.


// Endereço do smart contract retornado pela API após criar/registrar transação.
let ContractAddress = "0x06cc02d9f89232t20d71d1d32813071562355b9f";
      
// Identificador da transação retornado pela API após criar/registrar transação.
let GwTid = 25323;
  
// Instância o provider.
const Provider = new ethers.providers.Web3Provider(window.ethereum);

// ABI padrão do smart contract.
const ABI = [
    "function DoTransaction(uint BkuTid) public payable"
]

// Obtendo a conta que irá assinar a transação.
const Signer = await Provider.getSigner();

// Instância do smart contract.
const Contract = new ethers.Contract( ContractAddress, ABI, Signer );
  
// Convertendo valor a ser transferido.
let AmountToTransfer = ethers.utils.parseUnits( TotalCrypto.toString() );

// Executando método DoTransaction do smart contract e passando o TID como parâmetro.
Contract.DoTransaction( GwTid, {
    value: AmountToTransfer
}).then( response => {

   console.log(response);

}).catch( error => {

   console.log(error);

});

Conclusão

Após a autorização do usuário na carteira e registro na blockchain, você receberá como retorno os dados da transação na blockchain. Também é possível aguardar a confirmação de blocos para garantir no front-end uma confirmação imediata para o usuário.

Embora sua aplicação receba, após a execução da transferência, retorno da blockchain com os dados da transação e confirmação via front-end; por segurança, o gateway também irá enviar notificações para a sua URL de retorno, assim que obter uma confirmação da transferência. Isso garantirá que, mesmo que o front-end ( em caso de aplicação web ) perca conexão, ou por algum motivo não receba o retorno da blockchain, a fim de confirmar a transação ao usuário, o webhook da 4P Finance irá enviar uma confirmação da transação para sua aplicação.

Saiba mais sobre as notificações e callbacks na próxima sessão.

Last updated

Was this helpful?