Send Hbar

The following sample will show you how to prompt a user to send Hbar. Useful to make a payment. We will first generate a request for the end user with transaction's details. Once validated, you will get notified about transaction's status.

Prerequisites:

pageGetting started

Step 1: Import the following modules

Let's continue building on the index.js from the previous example (Environment Set-up) and add the following modules:

const { Client, MiddleManFeesType } = require("@xact-wallet-sdk/client");
require("dotenv").config();

Step 2: Get Xact Fees

Before initializing the payment, you probably need to get the fees from our service. For that matter, we will simply need to specify the amount of the transaction

const hbarAmount = 100;
const xactFees = await client.getXactFeesPayment(hbarAmount);

The amount must be specified in Hbar.

Step 3: Initializing a payment

1.1 From an account to an account

When initializing a payment, a request is sent to the end user for authorization.

/* Update the fields with your informations */
const hbarAmount = 100;
const toAccountId = '';
const fromAccountId = '';

/* Request for payment */
await client.pay({toAccountId, fromAccountId, hbarAmount});

1.2 From an account to an account and to a middleman

You can also add middleman account to pay throughout the process. Middleman take fees, those fees can be a fixed amount of HBAR (MiddleManFeesType.HBAR) or a percent (MiddleManFeesType.PERCENT) of the hbarAmount, the type is defined in the middleManTypeOfFees property.

Payer account fromAccountId will pay Hedera Hashgraph network fees for each transaction. If there is three middlemen and one recipient, payer will pay four transactions fees. Note that middle men fees are taken from the hbarAmount

/* Update the fields with your informations */
const hbarAmount = 100;
const toAccountId = '';
const fromAccountId = '';
const middleManAccountId = ''
const middleManAccountId2 = '';

/* Add 3rd-party payment */
const middleMen = [
    {
        middleManAccountId,
        middleManTypeOfFees: MiddleManFeesType.HBAR,
        middleManFees: 10
    },
     {
        middleManAccountId2,
        middleManTypeOfFees: MiddleManFeesType.PERCENT,
        middleManFees: 2
    },
    
];

/* Request for payment with tiers */
await client.pay({toAccountId, fromAccountId, hbarAmount, middleMen});

Step 4: Listen to new Payments

Finally get notified when a new payment has been done successfully!

/* Subscribe to new Payments */
client.paymentValidation().subscribe(payment => {
    console.log('new Payment', payment);
});

⭐ Congratulations! You have successfully completed a payment process

Code Check ✅

Your index.js file should look like this:

index.js
const { Client, TierFeesType } = require("@xact-wallet-sdk/client");
require("dotenv").config();

async function pay() {

    //Grab your api key from your .env file
    const apiKey = process.env.API_KEY;


    // If we weren't able to grab it, we should throw a new error
    if (apiKey == null) {
        throw new Error("Environment variables API_KEY must be present");
    }
    /* Create a new instance of Client */
    const client = new Client({apiKey});
    
    /* Init the connexion */
    await client.initConnexion();
    
    /* Update the fields with your informations */
    const hbarAmount = 100;
    const toAccountId = '';
    const fromAccountId = '';
    const middleManAccountId = ''
    const middleManAccountId2 = '';
    
    /* Add tiers payment */
    const middleMen = [
        {
            middleManAccountId,
            middleManTypeOfFees: MiddleManFeesType.HBAR,
            middleManFees: 10
        },
         {
            middleManAccountId: middleManAccountId2,
            middleManTypeOfFees: MiddleManFeesType.PERCENT,
            middleManFees: 2
        },
        
    ];
    
    /* Get Xact Fees */
    const xactFees = await this.client.getXactFeesPayment(100);
    
    /* Request for payment */
    await client.pay({toAccountId, fromAccountId, hbarAmount, middleMen});
    
    /* Listen for Payment's success */
    client.paymentValidation().subscribe(payment => {
        console.log('new Payment', payment);
    });
}

pay();

Last updated