NGN Bank Transfers

The Qwaap API supports for funds collections originating from NGN bank accounts. Customers complete payments by transferring funds to a specified bank account. The guide describes further.

Overview

Before starting, your merchant account needs to have been enabled to do funds collections from Nigerian banks. We equally recommend that you go through the Getting Started section to have a high-level understanding of the funds collection process.

When the initial API request is successful, the customer will be redirected to a payment URL where they'll be guided to complete the transaction. During the process, a unique temporary virtual bank account will be generated, and it is to this account that the customer will transfer the funds. This virtual bank account is a temporary, single-use bank account that can be used to accept one-time payments for transactions. The account is only valid and usable for a limited period of time and for a single transaction, after which it expires.

Step 1: Obtain the required data for the payment request

The table below describes the request parameters that are used for the collection/charge request. Most/all will be collected from the paying customer.

Parameter
Type
Required
Description

merchant_reference

String

true

The unique reference for this request. It must be at least 8 characters long. Alternatively, the value auto can be passed, and a unique reference will be created for you by the API

transaction_method

String

true

The transaction method to be used. This will be BANK for this request

currency

String

true

The 3-character ISO currency code for the request currency

amount

Number

true

The amount being requested

provider_code

String

true

The provider code as obtained from the payment options list

customer_name

String

false

The name of the customer

customer_email

String

false

The email of the customer

description

String

true

The description/narration for the transaction. Between 10-30 characters

charge_customer

Boolean

false

Whether or not the customer should bear the charge for the transaction. By default, this is false to mean that the merchant bears the charge.

allow_final_status_change

Boolean

false

Whether or not the final transaction status can be altered as described here. By default, this is true to mean Qwaap will alter the final transaction status under the circumstances described.

redirect_url

String

true

The HTTPs redirect URL to which the API will redirect when the payment is successful/failed

After collecting the necessary bank payment information from your customer, prepare your request payload as demonstrated below.

{
    "merchant_reference": "auto",
    "transaction_method": "BANK",
    "currency": "NGN",
    "amount": 4000,
    "provider_code": "bank_ng",
    "customer_email": "[email protected]",
    "customer_name": "JOHN DOE",
    "description": "Test Collection",
    "charge_customer": false,
    "allow_final_status_change": true,
    "redirect_url": "https://your-redirect-url"
}

POST https://sandboxapi.qwaap.com/collections/initialize

The request is sent as a JSON body as demonstrated by the sample request below. Sample responses (acknowledgement and failure) are also shared.

curl -X POST "https://sandboxapi.qwaap.com/collections/initialize" \
   -H 'Content-Type: application/json' \
   -H "x-api-version: 1" \
   -H "public-key: your-public-key" \
   -d '{
        "merchant_reference": "auto",
        "transaction_method": "BANK",
        "currency": "NGN",
        "amount": 4000,
        "provider_code": "bank_ng",
        "customer_email": "[email protected]",
        "customer_name": "JOHN DOE",
        "description": "Test Collection",
        "charge_customer": false,
        "allow_final_status_change": true,
        "redirect_url": "https://your-redirect-url"
    }'
{
    "code": 202,
    "status": "accepted",
    "message": "Request Accepted",
    "data": {
        "internal_reference": "QWAAPYSTHVTY7FKSE4Z",
        "merchant_reference": "MCTREF68SPABA2G7BWXE",
        "payment_url": "https://devpay.qwaap.com/pay/collection/QWAAPYSTHVTY7FKSE4Z"
    }
}

Step 2: Redirect to Payment URL

Notice the payment_url parameter in the callback body. The URL should be loaded in the browser so that the customer can proceed with the transaction. When the page loads, the customer will be guided through the payment process and on success/failure, the customer will be redirected to the redirect_url sent by the merchant in the request. Additionally, a callback/webhook will be sent to the configured collection callback URL.

Step 3: Handle the redirect and/or callback

Redirect

On success/failure of the transaction, the customer will be redirected to the URL that was passed in the redirect_url request parameter. The sample requests below demonstrated the success and failure scenarios. You can copy the URL and paste it on this online resource in order to view the query parameters therein.

https://webhook.site/85e18720-aa89-4f18-9db4-21c135642b46?id=34810&event=transaction.completed&merchant_reference=MCTREF68SPABA2G7BWXE&internal_reference=QWAAPYSTHVTY7FKSE4Z&transaction_type=COLLECTION&transaction_status=COMPLETED&status_message=Transaction%20Completed%20Successfully&rsa_signature=CG1ZuVzJMiNwLZEwaHGTvlvBW0ANOa2gncpEU29E5C%2BmSq9%2FUG9VoUr4DDfRfbabXJNmn5jQ98vqgAumIf%2FkKSfGbT7BoNk0X5q6kc1glWc%2FpVFramtPMQRMx39RqgQiPb1Y6wXS0AZmfopeD9IaQJCbicYpM2h23bT56iC9h2wVMIazu%2FeXu%2BZP%2FFoG5jG8utUUDxMHTLe1SMqorFsHkSoqvnRZWuDJZd36gCEogqqnN2Xui2rIjvznhHWdRwaftS9TRlT3ECm3QaIWyRh3Hw2zZ3apN73RjxPIHabDbUKwK0LgqGNtRA6XbBDDGl0tXCt0yIrunextt7XQ928oUMAykhiRYQaIWUbAvVQCrTFUx3K3ZCpnLJ4dBSK3EOnwVCLonxFgGzuoE69op7mf0IKdxU82mr7J1p%2FY6KiJB4I63EtIOouFteYNyVrNPcBHK%2Btd1TX5C39zOqzszDlJogQV0i3gSiMUJZmFysUpriSGT1I6kX3zaC2ac1znDsViHp%2B%2FB2pqYP9y3ggHyRkgKJBAkCu1Fnv%2BQ4YF2ESbFCESoI1ahsw8MvsthSZqN%2BKlMuxk%2F0tEZRbMLtNGcfQ6qqLKJlneony6xCKqAtUjjyr7Xydv4%2BC3HA3QoV3KRXr5n%2FzP6Pp6cG4e7nN8zGOoKlk8HXciav6Qz4GJlVIZwnE%3D&hmac_signature=t%3D1723816532379%2Cs%3D4e60eed65c566a0a9155aac084da8270c5dc826188d5d16785f0c6f6d5b1782d

Callback/Webhook

Every merchant account is expected to have configured a callback/webhook URL for collections. For all collections that transition to the final state (COMPLETED, FAILED or CANCELLED), a JSON POST request will be made to the callback URL. Sample callback payloads (request bodies) are shared below. Be sure to check out Handling Notifications to see how you should verify the signature(s) in the request headers and how to respond.

{
    "event": "transaction.completed",
    "payload": {
        "id": 20760,
        "merchant_reference": "MCTREFT2WMNWZ23SBN6Y",
        "internal_reference": "QWAAPYSTHVTY7FKSE4Z",
        "transaction_type": "COLLECTION",
        "request_currency": "NGN",
        "transaction_amount": 4000,
        "transaction_currency": "NGN",
        "transaction_charge": 80,
        "transaction_account": "2121562123",
        "charge_customer": false,
        "total_credit": 3920,
        "provider_code": "bank_ng",
        "request_amount": 4000,
        "customer_name": "JOHN DOE",
        "institution_name": "GUARANTY TRUST BANK",
        "transaction_status": "COMPLETED",
        "status_message": "Transaction Completed Successfully"
    }
}

Either of the two (redirect/callback) can be used to confirm the final status of the transaction. We recommend that in either situation, the redirect/callback request is verified (by verifying the signatures)

Last updated