# Nigeria payment API documentation
# 1. How to get API Key
The user logs in to the cash register -> Developer Center -> API Key -> Create API key. API Key has a separate configuration page and is bound to a fixed IP address ("0.0.0.0" means no IP interception filtering, any IP can be accessed), and different API Keys can be configured to meet different needs. Please do not disclose your Access Key and Secret Key to avoid asset loss. After the Secret Key is generated, it cannot be viewed again. Please save it in time. If you forget the Secret Key, please recycle the key pair in the backstage of the merchant and apply for a new key pair.
# 1.1 How to create API KEY
• Click Developer Center-API Key
• 1Choose whether to enable the debug mode (After debugging mode is enabled, you will have a standard prompt message and log view address for any errors)
• 2Select API Key permission
• 3Enter the whitelist address (0.0.0.0 means any IP address can be accessed)
Note: (When entering the whitelist domain name, you should pay attention to using "," to isolate multiple IPs.)
• 4 click create to generate API KEY
(After the API KEY is generated, you can copy, view, edit, and delete it in the My API KEY list below. Note that the Secret key only appears once when it is generated. Please save it properly. If you forget the Secret Key, Please recycle the key pair and apply for a new one.)
• Click Edit to close or open [Start Debugging] and modify the API Key permission and whitelist address. After the modification is complete, click Save
Note: Please wait patiently for 90 seconds for the API Key to take effect after creating or editing the API Key
# 2. How to use API Key
The current API Key is to add a parameter list in the header of the request
Parameter name | Parameter description | Type | Required |
---|---|---|---|
access_key | Api Key access key (eg: TPhoa7ZQ) | String | Yes |
timestamp | Millisecond-level timestamp (13 digits, such as: 1679669488472) | String | Yes |
nonce | UUID (36 bits such as: 02f7a04f-53cc-47d4-bb3f-fae69dab49ac) The five parts are 8 characters, 4 characters, 4 characters, 4 characters, and 12 characters, with "-" in the middle interval | String | yes |
sign | Parameter signature (eg: GXx2wYUD6UVr+zcmeCSFFPzcBLA=) | String | Yes |
# 3. Technology side parameter access process
# 4. How to sign the interface
# Signature Description
API requests are very likely to be tampered with during transmission over the internet. In order to ensure that the request has not been changed, all private interfaces except public interfaces (basic information, market data, etc.) must use your API Key is used for signature verification to verify whether parameters or parameter values have changed during transmission.
A legitimate request consists of the following parts:
- access_key: API access key;
- secret_key: The key used for signature encryption (only visible once when applying for an API Key in the background, please copy and save it in a safe place, and do not disclose it);
- timestamp: The time (UTC time) when you made the request. Such as: 1632811287325 (13 digits). Including this value in a query request helps prevent third parties from intercepting your request;
- nonce: random UUID string. Such as: 053a1b81-48a0-4bb1-96b2-60f6e509d911 (36 bits);
- sign: The value calculated by the signature, which is used to ensure that the signature is valid and has not been tampered with;
- All interfaces need to pass the above public parameters except secret_key in the http request header (header). The public parameters include (access_key, timestamp, nonce, sign) and other signature parameters are described in the API interface as allow.
# Signature steps
1. Define a Map dictionary type object, and put the parameters in the request into it in the form of key-value
2. Put access_key, timestamp, and nonce into the Map defined in the first step
3. Sort the attributes in the Map in ascending order (lexicographic order) according to the ASCII code and convert the Map to a string in the form of "key1=value1&key2=value2"
4. Encrypt the character string converted in the previous step with secret_key by HMAC_SHA1 and perform Base64 transcoding to obtain the value of the sign parameter. secret_key is the information in the apikey created on the cashier platform
5. Add the sign value and other required parameters to the request header, and send the request to the target interface
# Signature debugging tools
SignUtil: User login to cash register -> Developer Center -> API Documentation -> Signature Tool The Signature tool page is displayed (The access_key in the tool, please use a valid access_key and please set the IP whitelist that allows this access_key access to 0.0.0.0, we strongly recommend the used Access_key is discarded after debugging)
# 5. Interface list
# 5.1 Test interface connectivity
request method
Get
Request URL
/ping
response data
{"version":"1.0.1","timestamp":1688116827306}
Response parameter description
Param | Type | Desc |
---|---|---|
version | String | If this parameter is returned, all interfaces in this document can be requested normally |
timestamp | int64 | Unix timestamp |
# 5.2 Create a new collection order
request method
post
Request URL
/api/v3/ng/createCollectingOrder
Request type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
request header
Param | Desc | Sample |
---|---|---|
access_key | Acquisition from merchant background | pFqV75X3 |
timestamp | Unix timestamp 13 digits milliseconds | 1679724896223 |
nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e |
sign | Calculated signature | kAXyh+eerqrefyaF8dyFB0M4FVo= |
request parameters
{
"amount": "40.20",
"channelType": "BANK",
"externalOrderId": "354997490558818072",
"notifyUrl": "http://192.168.1.135:30001/",
"remark": "123",
"returnUrl": "http://192.168.1.135:30001"
}
Description of request parameters
Param | Desc | Sample | Require |
---|---|---|---|
amount | Receipt amount, the decimal point cannot exceed 2 digits and the amount cannot be less than 40 (String) | 40.20 | required |
channelType | payment type (String) oneof=BANK | BANK | required |
externalOrderId | Merchant order number max=64 (String) | 354997490558818072 | required |
notifyUrl | notification URL (String, URL) | http://192.168.1.135:30001 | optional |
remark | remark max=255 (String) | 123 | optional |
returnUrl | return URL (String, URL) | http://192.168.1.135:30001 | optional |
response type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
response data
{
"code": "200",
"success": true,
"msg": "成功",
"msgEn": "SUCCESS",
"data": {
"cashierUrl": "http://192.168.1.200:1084/OCURRPAID202310260755491698306949076DEV001OO0000000200000728?data=eyJjYXNoaWVyQ3VycmVuY3lBbW91bnQiOjEwMC4wMCwiY2FzaGllckV4cGlyZVRpbWUiOjE2OTgz\nMDg3NDkwOTIsImNhc2hpZXJJZCI6Ik9DVVJSUEFJRDIwMjMxMDI2MDc1NTQ5MTY5ODMwNjk0OTA3\nNkRFVjAwMU9PMDAwMDAwMDIwMDAwMDcyOCIsImNhc2hpZXJVcmwiOiJodHRwOi8vMTkyLjE2OC4x\nLjIwMDoxMDg0L09DVVJSUEFJRDIwMjMxMDI2MDc1NTQ5MTY5ODMwNjk0OTA3NkRFVjAwMU9PMDAw\nMDAwMDIwMDAwMDcyOCIsImN1cnJlbmN5IjoiTkdOIiwiY3VycmVuY3lPcmRlclZvIjp7ImFtb3Vu\ndCI6MTAwLjAwLCJjdXJyZW5jeSI6Ik5HTiIsImV4dGVybmFsT3JkZXJJZCI6IjU2NTY1NjUzMzY1\nNjIyMjMzMzU2NSIsIm1lcmNoYW50TmFtZSI6ImNsYXJrX2FnZW50X2hhbWJpdCIsIm9yZGVySWQi\nOiJPQ1VSUlBBSUQyMDIzMTAyNjA3NTU0OTE2OTgzMDY5NDkxMDhERVYwMDFPTzAwMDAwMDA0MDAw\nMDA3MjkiLCJvcmRlclN0YXR1cyI6IkF3YWl0aW5nIFBheW1lbnQiLCJvcmRlclN0YXR1c0NvZGUi\nOjEsIm9yZGVyVGltZSI6MTY5ODMwNjk0OTExMCwicGF5UGFyYW0iOiJodHRwczovL3BheWg1Lm90\ncGF5LnRvcC8jLz9tZXJjaGFudElkPTk5OSZtZXJjaGFudE9yZGVySWQ9MTY5ODMwNjk0OTExNXB5\nODJsbXA5cmRtNDFpa2V0cGImYW1vdW50PTEwMCZzaWduPWFhMDFkNjg0MjFmNDcyY2JiMzg2YTZm\nZDhkZmJjYjA0IiwicGF5VHlwZSI6MTAyLCJwYXlUeXBlTmFtZSI6IkJBTksiLCJwYXlVcmwiOiJo\ndHRwczovL3BheWg1Lm90cGF5LnRvcC8jLz9tZXJjaGFudElkPTk5OSZtZXJjaGFudE9yZGVySWQ9\nMTY5ODMwNjk0OTExNXB5ODJsbXA5cmRtNDFpa2V0cGImYW1vdW50PTEwMCZzaWduPWFhMDFkNjg0\nMjFmNDcyY2JiMzg2YTZmZDhkZmJjYjA0IiwidHJhZGVOb3RlIjoiYWRrYXNkIn0sImlzQ3JlYXRl\nT3JkZXIiOnRydWUsIm1lcmNoYW50SWQiOjE3MDcyODU4NDAzMjYxMjc2MTcsInBheVR5cGUiOjEw\nMiwicmV0dXJuVXJsIjoiaHR0cDovLzE5Mi4xNjguMS4xMzU6MzAwMDEiLCJ2ZXJzaW9uIjoidjEi\nfQ==&pm=W3siY3VycmVuY3lUeXBlIjoiTVhOIiwicGF5VHlwZXMiOlt7ImNvZGUiOjEwMiwidmFsdWUiOiJC\nQU5LIn1dfSx7ImN1cnJlbmN5VHlwZSI6Ik5HTiIsInBheVR5cGVzIjpbeyJjb2RlIjoxMDIsInZh\nbHVlIjoiQkFOSyJ9XX0seyJjdXJyZW5jeVR5cGUiOiJJRFIiLCJwYXlUeXBlcyI6W3siY29kZSI6\nMTAyLCJ2YWx1ZSI6IkJBTksifV19LHsiY3VycmVuY3lUeXBlIjoiSU5SIiwicGF5VHlwZXMiOlt7\nImNvZGUiOjEwMiwidmFsdWUiOiJCQU5LIn1dfSx7ImN1cnJlbmN5VHlwZSI6IkJSTCIsInBheVR5\ncGVzIjpbeyJjb2RlIjoxMDEsInZhbHVlIjoiUElYIn0seyJjb2RlIjoxMDMsInZhbHVlIjoiUElY\nX0RZTkFNSUMifV19XQ==",
"cashierExpireTime": 1698308749092,
"currency": "NGN",
"cashierCurrencyAmount": "100",
"returnUrl": "http://192.168.1.135:30001",
"currencyOrderVo": {
"externalOrderId": "565656533656222333565",
"tradeNote": "adkasd",
"orderId": "OCURRPAID202310260755491698306949108DEV001OO0000000400000729"
}
}
}
Response parameter description
Param | Type | Desc |
---|---|---|
cashierUrl | String | cashier link |
cashierExpireTime | Int64 | Cashier Expiration Time |
currency | String | currency code |
cashierCurrencyAmount | String | Receipt amount |
externalOrderId | String | Merchant order ID |
orderId | String | System order ID |
tradeNote | String | Note |
returnUrl | String | return Url |
# 5.3 Create a new transfer order
request method
post
Request URL
/api/v3/ng/createTransferOrder
Request type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
request header
Param | Desc | Sample |
---|---|---|
access_key | Acquisition from merchant background | pFqV75X3 |
timestamp | Unix timestamp 13 digits milliseconds | 1679724896223 |
nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e |
sign | Calculated signature | kAXyh+eerqrefyaF8dyFB0M4FVo= |
request parameters
{
"currencyAmount":"10",
"channelType":"BANK",
"externalOrderId":"777888887444233333",
"accountId":"12345566",
"accountName":"wsxtes",
"bankName":"FIDELITY BANK",
"accountType":"NGN",
"notifyUrl":"http://192.168.1.135:30001"
}
Description of request parameters
Param | Desc | Sample | Require |
---|---|---|---|
currencyAmount | Payment amount The decimal cannot be greater than 2 and the amount cannot be less than 40 (String) | 10.20 | required |
channelType | payment type (String) | BANK | required |
externalOrderId | Merchant order number max=64 (String) | 687279463984441035 | required |
accountType | bank account type oneof=NGN | NGN | required |
accountName | bank account name (String) | bob | required |
accountId | bank account number (String) | 13178968584 | required |
bankName | bank name (String) | FIDELITY BANK Fill in according to the actual situation | required |
notifyUrl | notification URL (String) | http://192.168.1.135:30001 | optional |
response type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
response data
{
"code": "200",
"success": true,
"msg": "成功",
"msgEn": "SUCCESS",
"data": {
"orderId": "OCURRDRAW202310260758441698307124373DEV001OO0000000200000735",
"orderStatus": "Accepted",
"externalOrderId": "777888887444233333",
"currencyType": "NGN"
}
}
Response parameter description
Param | Type | Desc |
---|---|---|
currencyType | String | Fiat currency type |
externalOrderId | String | merchant order id |
orderId | String | System order ID |
orderStatus | String | order status |
# 5.4 Query Collection Orders
request method
post
Request URL
/api/v3/ng/query/collectingOrder
Request type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
request header
Param | Desc | Sample |
---|---|---|
access_key | Acquisition from merchant background | pFqV75X3 |
timestamp | Unix timestamp 13 digits milliseconds | 1679724896223 |
nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e |
sign | Calculated signature | kAXyh+eerqrefyaF8dyFB0M4FVo= |
request parameters
{
"externalOrderId": "65545164612312332222222",
"orderId":"OCURRPAID202310260311051698289865983DEV001OO0000000400000663"
}
Description of request parameters
Param | Desc | Require |
---|---|---|
externalOrderId | Merchant order number max=64 (String) | required |
orderId | system order number (String) | required |
response type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
response data
{
"code": "200",
"success": true,
"msg": "成功",
"msgEn": "SUCCESS",
"data": [
{
"orderId": "OCURRPAID202310260311051698289865983DEV001OO0000000400000663",
"cashierId": "OCURRPAID202310260311051698289865927DEV001OO0000000200000662",
"orderType": 1,
"orderResourceType": 2,
"userId": "1707285840326127617",
"orderStatus": 1,
"orderTime": 1698289866000,
"channelOrderId": "5850696559035393",
"externalOrderId": "65545164612312332222222",
"orderAmount": "100",
"orderActualAmount": null,
"orderFee": null,
"orderPayTime": null,
"orderCompleteTime": null,
"currencyType": "NGN",
"payType": 102,
"tradeNote": "adkasd",
"notifyUrl": "https://platform.hambit.co/#/home/dashboard",
"markStatus": 0,
"errorMsg": null,
"errorMsgEn": null,
"accountType": "",
"accountName": "",
"accountNo": "",
"orderTypeCode": "Pay",
"orderResourceTypeCode": "Currency",
"orderStatusCode": "Wait pay",
"payTypeCode": "BANK"
}
]
}
Response parameter description
Param | Type | Desc |
---|---|---|
orderId | String | order ID |
cashierId | String | Cashier ID |
orderType | int64 | order type |
orderResourceType | int64 | The business type of the order |
userId | String | user ID |
orderStatus | int64 | order status 1- pending payment 2- payment successful |
orderTime | int64 | order initiation time |
channelOrderId | String | The order ID of the channel associated with the order |
externalOrderId | String | Merchant order ID |
orderAmount | String | order amount |
orderActualAmount | String | actual order amount |
orderFee | int64 | order fee |
orderPayTime | int64 | order payment time |
currencyType | String | currency type |
payType | int64 | payment type 102:BANK 202:BANK |
tradeNote | String | Note |
notifyUrl | String | callback URL |
markStatus | int64 | mark status |
errorMsg | String | error message |
errorMsgEn | String | error message en |
accountType | String | account type |
accountName | String | account name |
accountNo | String | account number |
orderTypeCode | String | order type code |
orderResourceTypeCode | String | The business type code of the order |
orderStatusCode | String | orderStatusc Description |
payTypaCode | String | payment type code reference payType |
# 5.5 Query transfer orders
request method
post
Request URL
/api/v3/ng/query/transferOrder
Request type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
request header
Param | Desc | Sample |
---|---|---|
access_key | Acquisition from merchant background | pFqV75X3 |
timestamp | Unix timestamp 13 digits milliseconds | 1679724896223 |
nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e |
sign | Calculated signature | kAXyh+eerqrefyaF8dyFB0M4FVo= |
request parameters
{
"orderId": "OCURRDRAW202310260335441698291344637DEV001OO0000000200000673",
"externalOrderId": "77788888744423333"
}
Description of request parameters
Param | Desc | Require |
---|---|---|
externalOrderId | Merchant order number max=64 (String) | required |
orderId | system order number (String) | required |
response type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
response data
{
"code": "200",
"success": true,
"msg": "成功",
"msgEn": "SUCCESS",
"data": [
{
"orderId": "OCURRDRAW202310260335441698291344637DEV001OO0000000200000673",
"cashierId": "",
"orderType": 2,
"orderResourceType": 2,
"userId": "1707285840326127617",
"orderStatus": 8,
"orderTime": 1698291345000,
"channelOrderId": "1698291345714bk7sjmjwg7gloqtzpg9",
"externalOrderId": "77788888744423333",
"orderAmount": "10",
"orderActualAmount": "11",
"orderFee": "1",
"orderPayTime": 1698291347000,
"currencyType": "NGN",
"payType": 202,
"tradeNote": "",
"notifyUrl": "https://platform.hambit.co/#/home/dashboard",
"markStatus": 0,
"errorMsg": null,
"errorMsgEn": null,
"accountType": "",
"accountName": "FIDELITY BANK",
"accountNo": "12345566",
"orderTypeCode": "Transfer",
"orderResourceTypeCode": "Currency",
"orderStatusCode": "Success",
"payTypeCode": "BANK"
}
]
}
Response parameter description
Param | Type | Desc |
---|---|---|
orderId | String | order ID |
cashierId | String | Cashier ID |
orderType | int64 | order type |
orderResourceType | int64 | The business type of the order |
userId | String | user ID |
orderStatus | int64 | order status 1-accepted 2-bank processing 4-Failed(bank not accepted) 8-success 16-Failed |
orderTime | int64 | order initiation time |
channelOrderId | String | The order ID of the channel associated with the order |
externalOrderId | String | Merchant order ID |
orderAmount | String | order amount |
orderActualAmount | String | actual order amount |
orderFee | int64 | order fee |
orderPayTime | int64 | order payment time |
currencyType | String | currency type |
payType | int64 | payment type 102:BANK 202:BANK |
tradeNote | String | Note |
notifyUrl | String | callback URL |
markStatus | int64 | mark status |
errorMsg | String | error message |
errorMsgEn | String | error message en |
accountType | String | account type |
accountName | String | account name |
accountNo | String | account number |
orderTypeCode | String | order type code |
orderResourceTypeCode | String | The business type code of the order |
orderStatusCode | String | orderStatus description |
payTypeCode | String | payment type code reference payType |
# 5.6 Query balance
request method
Get
Request URL
/api/v3/ng/query/balance
request type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
request header
Param | Desc | Sample |
---|---|---|
access_key | Merchant background acquisition | pFqV75X3 |
timestamp | Unix timestamp 13 digit milliseconds | 1679724896223 |
nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e |
sign | computed signature | kAXyh+eerqrefyaF8dyFB0M4FVo= |
response type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
response data
{
"code": "200",
"success": true,
"msg": "成功",
"msgEn": "SUCCESS",
"data": [
{
"accountBalance": "10149",
"accountFreezeAmount": "0",
"accountStatusId": 4,
"accountWaitSettledAmount": "0",
"currencyType": "NGN",
"accountStatus": "InAndOut"
}
]
}
Response parameter description
Param | type | Desc |
---|---|---|
accountBalance | String | Account Available Balance |
accountFreezeAmount | String | Account frozen amount |
accountStatusId | int64 | account status id |
accountWaitSettledAmount | String | Amount to be transferred from the account |
currencyType | String | Fiat currency type |
accountStatus | String | Account Status |
# 5.7 Query Bank
request method
POST
Request URL
/api/v3/ng/query/bank
Request type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
request header
Param | Desc | Sample |
---|---|---|
access_key | Acquisition from merchant background | pFqV75X3 |
timestamp | Unix timestamp 13 digits milliseconds | 1679724896223 |
nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e |
sign | Calculated signature | kAXyh+eerqrefyaF8dyFB0M4FVo= |
request parameters
{"bankName": "FIDELITY BANK"}
If you need to query all bank values, pass an empty string, as follows:
{"bankName": ""}
Description of request parameters
Param | Desc | Require |
---|---|---|
bankName | bank name (String) | required |
response type
Header: { 'Content-Type': 'application/json;charset=utf-8'}
response data
{
"code": "200",
"success": true,
"msg": "成功",
"msgEn": "SUCCESS",
"data": [{
"bankName": "FIDELITY BANK",
"bankCode": "000007",
"currencyType": "NGN"
}]
}
Response parameter description
Param | Type | Desc |
---|---|---|
bankName | String | bank name |
bankCode | String | bank code |
currencyType | String | currency type |
# 5.8 Bank List (Bank List for reference only, please refer to the query bank interface to return the data bill of lading)
BankName | BankName |
---|---|
FIDELITY BANK | U & C MICROFINANCE BANK |
STANBICIBTC BANK | PATRICKGOLD MICROFINANCE BANK |
First bank | MAYFAIR MICROFINANCE BANK |
Citibank Nigeria | REPHIDIM MICROFINANCE BANK |
Heritage bank | IKENNE MICROFINANCE BANK |
Union bank | BALOGUN GAMBARI MICROFINANCE BANK |
United Bank For Africa Plc | TRUST MICROFINANCE BANK |
Wema bank | NEPTUNE MICROFINANCE BANK |
Access bank | UNAAB MICROFINANCE BANK |
Ecobank Nigeria Plc | EVERGREEN MICROFINANCE BANK |
Zenith bank | OCHE MICROFINANCE BANK |
GTBank | BIPC MICROFINANCE BANK |
Diamond bank | CASHCONNECT MICROFINANCE BANK |
Standard Chartered Bank Nigeria Ltd. | MOLUSI MICROFINANCE BANK |
Fidelity bank | HEADWAY MICROFINANCE BANK |
GATEWAY MORTGAGE BANK | NUTURE MICROFINANCE BANK |
ABBEY MORTGAGE BANK | CORESTEP MICROFINANCE BANK |
REFUGE MORTGAGE BANK | FIRMUS MICROFINANCE BANK |
LAGOS BUILDING AND INVESTMENT COMPANY | SEEDVEST MICROFINANCE BANK |
PLATINUM MORTGAGE BANK | ILISAN MICROFINANCE BANK |
FIRST GENERATION MORTGAGE BANK | LEGEND MICROFINANCE BANK |
BRENT MORTGAGE BANK | THINK FINANCE MICROFINANCE BANK |
INFINITY TRUST MORTGAGE BANK | COASTLINE MICROFINANCE BANK |
HAGGAI MORTGAGE BANK LIMITED | ISALEOYO MICROFINANCE BANK |
MAYFRESH MORTGAGE BANK | NEW GOLDEN PASTURES MICROFINANCE BANK |
Polaris Bank | CONPRO MICROFINANCE BANK |
Keystone bank | MANNY MICROFINANCE BANK |
ENTERPRISE BANK | GTI MICROFINANCE BANK |
EKONDO MICROFINANCE BANK | INTERLAND MICROFINANCE BANK |
FINATRUST MICROFINANCE BANK | EK-RELIABLE MICROFINANCE BANK |
MICROVIS MICROFINANCE BANK | DAVODANI MICROFINANCE BANK |
OHAFIA MICROFINANCE BANK | MOZFIN MICROFINANCE BANK |
GOWANS MICROFINANCE BANK | NWANNEGADI MICROFINANCE BANK |
TRUSTBANC J6 MICROFINANCE BANK LIMITED | FINCA MICROFINANCE BANK |
XSLNCE MICROFINANCE BANK | Rehoboth Microfinance bank |
FIDFUND MICROFINANCE Bank | Suntrust Bank Nigeria Limited |
BC KASH MICROFINANCE BANK | PAGA - 100002 |
NDIORAH MICROFINANCE BANK | AG MORTGAGE BANK |
CONSUMER MICROFINANCE BANK | INNOVECTIVES KESH |
ALLWORKERS MICROFINANCE BANK | FCMB |
RICHWAY MICROFINANCE BANK | CONTEC GLOBAL INFOTECH LIMITED(NOWNOW) |
AL-BARAKAH MICROFINANCE BANK | PALMPAY |
ACCION MICROFINANCE BANK | ACCESS YELLO & BETA |
PERSONAL TRUST MICROFINANCE BANK | Providus Bank |
MICROCRED MICROFINANCE BANK | Titan Bank |
PECANTRUST MICROFINANCE BANK | Globus Bank |
ROYAL EXCHANGE MICROFINANCE BANK | FLUTTERWAVE TECHNOLOGY SOLUTIONS LIMITED |
VISA MICROFINANCE BANK | PAYSTACK PAYMENTS LIMITED |
CHIKUM MICROFINANCE BANK | VENTURE GARDEN NIGERIA LIMITED |
YES MICROFINANCE BANK | 9 PAYMENT SOLUTIONS BANK |
APEKS MICROFINANCE BANK | Moneymaster PSB |
CIT MICROFINANCE BANK | Rubies Micro-finance Bank |
FULLRANGE MICROFINANCE BANK | First City Monument Bank Plc |
TRIDENT MICROFINANCE BANK | Unity Bank Plc |
IRL MICROFINANCE BANK | Letshego MFB |
VIRTUE MICROFINANCE BANK | Stanbic IBTC Bank Ltd. |
MUTUAL TRUST MICROFINANCE BANK | Sterling bank |
FFS MICROFINANCE BANK | JAIZ BANK |
E-BARCS MICROFINANCE BANK | Taj Bank |
FUTO MICROFINANCE BANK | PAYCOM (OPAY) |
CREDIT AFRIQUE MICROFINANCE BANK | ECOMOBILE |
ADDOSSER MICROFINANCE BANK | PAGA |
OKPOGA MICROFINANCE BANK | FSDH |
ESO-E MICROFINANCE BANK | Eyowo |
DAYLIGHT MICROFINANCE BANK | RAND MERCHANT BANK |
ALPHA KAPITAL MICROFINANCE BANK | Kuda Microfinance Bank |
MAINSTREET MICROFINANCE BANK | Hasal Microfinance Bank |
ASTRAPOLARIS MICROFINANCE BANK | Infinity MFB |
RUBIES MICROFINANCE BANK | Moniepoint Microfinance Bank |
BOSAK MICROFINANCE BANK | Petra Mircofinance Bank Plc |
LAPO MICROFINANCE BANK | CEMCS Microfinance Bank |
GREENBANK MICROFINANCE BANK | Unical Microfinance Bank |
FAST MICROFINANCE BANK | Bowen Microfinance Bank |
BAINES CREDIT MICROFINANCE BANK | TCF MFB |
NIRSAL NATIONAL MICROFINANCE BANK | Ibile Microfinance Bank |
GROOMING MICROFINANCE BANK | Hackman Microfinance Bank |
PENNYWISE MICROFINANCE BANK | Sparkle Microfinance Bank |
ABU MICROFINANCE BANK | VFD microfinance bank |
RENMONEY MICROFINANCE BANK | SEED CAPITAL MICROFINANCE BANK |
NEW DAWN MICROFINANCE BANK | NOVA MERCHANT BANK |
UNIVERSITY OF NIGERIA, NSUKKA MICROFINANCE BANK | Lagos Building Investment Company Plc. |
YOBE MICROFINANCE BANK | ASO SAVINGS |
IMO STATE MICROFINANCE BANK | JUBILEE LIFE |
ALEKUN MICROFINANCE BANK | PARALLEX |
ABOVE ONLY MICROFINANCE BANK | SAFETRUST |
QUICKFUND MICROFINANCE BANK | FIRST TRUST MORTGAGE BANK PLC |
STELLAS MICROFINANCE BANK | FBNQUEST MERCHANT BANK |
NIGERIAN NAVY MICROFINANCE BANK | EMPIRE TRUST MICROFINANCE BANK |
AUCHI MICROFINANCE BANK | AMML MICROFINANCE BANK |
Kuda MFB | FETS |
ADEYEMI COLLEGE STAFF MICROFINANCE BANK | PARKWAY-READYCASH |
AB MICROFINANCE BANK | CELLULANT |
LAVENDER MICROFINANCE BANK | eTRANZACT |
OLABISI ONABANJO UNIVERSITY MICROFINANCE | STANBIC IBTC @Ease WALLET |
EMERALD MICROFINANCE BANK | ECOBANK XPRESS ACCOUNT |
PRESTIGE MICROFINANCE BANK | GT MOBILE |
IKIRE MICROFINANCE BANK1 | TEASY MOBILE |
TRUSTFUND MICROFINANCE BANK | VT NETWORKS |
GLORY MICROFINANCE BANK | ACCESS MONEY |
IKIRE MICROFINANCE BANK2 | FIRSTMONIE WALLET |
MEGAPRAISE MICROFINANCE BANK | CHAMS MOBILE |
MINT-FINEX MFB | FORTIS MOBILE |
ARISE MICROFINANCE BANK | HEDONMARK |
NNEW WOMEN MICROFINANCE BANK | ZENITH MOBILE |
FIRST OPTION MICROFINANCE BANK | FIDELITY MOBILE |
SAFE HAVEN MICROFINANCE BANK | MONEY BOX |
ASSETMATRIX MICROFINANCE BANK | EARTHOLEUM |
PILLAR MICROFINANCE BANK | STERLING MOBILE |
FCT MICROFINANCE BANK | TAGPAY |
AFEKHAFE MICROFINANCE BANK | IMPERIAL HOMES MORTGAGE BANK |
EAGLE FLIGHT MICROFINANCE BANK | ZINTERNET - KONGAPAY |
OMIYE MICROFINANCE BANK | ONE FINANCE |
POLYUNWANA MICROFINANCE BANK | INTELLFIN |
ALERT MICROFINANCE BANK | PAYATTITUDE ONLINE |
FEDPOLY NASARAWA MICROFINANCE BANK | Coronation Bank |
KONTAGORA MICROFINANCE BANK | NPF MICROFINANCE BANK |
PURPLEMONEY MICROFINANCE BANK | FORTIS MICROFINANCE BANK |
EVANGEL MICROFINANCE BANK | COVENANT MFB |
SULSPAP MICROFINANCE BANK | OMOLUABI |
BRIGHTWAY MICROFINANCE BANK | PAGE MFBank |
BOCTRUST MICROFINANCE BANK LIMITED | WETLAND MICROFINANCE BANK |
REGENT MICROFINANCE BANK | MONEY TRUST MICROFINANCE BANK |
SAGAMU MICROFINANCE BANK |
# 6. Callback information
# 6.1 How to call back the interface for signature verification
# Signature Verification Instructions
API requests are likely to be tampered with during transmission over the internet. In order to ensure that the callback has not been changed, you can set the callback parameter signature authentication. The setting method is: log in to the cashier -> developer center -> callback address -> add.
# Signature Verification Steps
The overall process is roughly the same as the signature, but the data used for signature verification is different. The signature is to construct the data by itself, and the signature is to obtain the data (header, json)
Take out the sign value in the header;
Define a Map dictionary type object, put the json parameters in the request in the form of key-value
Take out the access_key, timestamp, and nonce in the header and put them into the Map defined in the previous step
Sort the keys in the Map according to the ASCII code from small to large (lexicographic order) and convert the Map into a string in the form of "key1=value1&key2=value2";
Use the secret_key to encrypt the character string converted in the previous step with HMAC_SHA1 and perform Base64 transcoding to obtain the signed signature value and the sign extracted from the header in the first step for string verification. If they match, the signature verification will pass, otherwise, the signature verification will fail. . The secret_key here needs to match the access_key when placing an order.
# 6.2 Payment callback
callback data
{
"currencyType":"NGN",
"orderActualAmount":"84",
"orderId":"OCURRPAID202310260749501698306590241DEV001OO0000000400000719",
"orderFee":"3.36",
"orderStatus":"Payment Successful",
"payParam":"https://payh5.otpay.top/#/?merchantId=999&merchantOrderId=1698306590247m3ab52g8yzsm09peh2b&amount=84&sign=2f68139e0a1a0d39590f3eb639080842",
"externalOrderId":"64895570",
"tradeNote":"wsxtest",
"payTypeName":"BANK",
"orderAmount":"84",
"orderTime":1698306590000,
"payType":102,
"orderStatusCode":2,
"markStatus":0,
"orderPayTime":1698306730000
}
Callback data description
Param | Type | Desc |
---|---|---|
currencyType | String | Fiat currency type |
errorMsg | String | error message |
errorMsgEn | String | error message en |
externalOrderId | String | Merchant order ID |
markStatus | String | mark status |
orderActualAmount | float64 | The actual payment amount of the order |
orderAmount | float64 | order creation amount |
orderFee | float64 | handling fee |
orderId | String | order ID |
orderPayTime | int64 | order payment time |
orderStatus | String | orderStatusCode description |
orderStatusCode | int64 | order status code 1- pending payment 2- payment successful |
orderTime | int64 | order creation time |
payParam | String | payment type |
payType | int64 | payment type |
payTypeName | String | payment type name |
tradeNote | String | Note |
Merchants can log in to the backstage of the merchant at any time to manually trigger callbacks (manual callbacks are not recommended for non-final orders), and the order status and other related information in the callback information is the real actual status (please pay attention to the order status for manual callbacks, If the status of the manual callback order is not final, the platform will still initiate a notification when the order becomes final, please pay attention to the redundant processing at the business level)
# 6.3 transfer callback
callback data
{
"currencyType":"NGN",
"accountCode":"000007",
"accountName":"FIDELITY BANK",
"orderId":"OCURRDRAW202310260758441698307124373DEV001OO0000000200000735",
"orderFee":"1",
"orderStatus":"Completed",
"externalOrderId":"777888887444233333",
"payTypeName":"BANK",
"orderAmount":"10",
"orderTime":1698307124000,
"payType":202,
"userInfoName":"wsxtes",
"accountNo":"12345566",
"orderStatusCode":8,
"markStatus":0,
"orderPayTime":1698307127000
}
Callback data description
Param | Type | Desc |
---|---|---|
currencyType | String | currency type |
accountCode | String | account code |
accountName | String | account name |
orderId | String | order ID |
accountType | String | account type |
orderFee | String | Order Fee |
orderStatus | String | orderStatusCode description |
externalOrderId | int64 | Merchant order ID |
payTypeName | float64 | payment type name |
orderAmount | float64 | order creation amount |
orderPayTime | int64 | Order payment time |
orderTime | int64 | order creation time |
payType | int64 | Payment type |
userInfoName | String | username |
accountNo | String | account number |
orderStatusCode | String | Order Status Code 1-accepted 2-bank processing 4-Failed(bank not accepted) 8-success 16-Failed |
markStatus | String | User credential type |
Merchants can log in to the backend of the merchant at any time to manually trigger a callback (it is not recommended to initiate a manual callback if the order is not in the final state). The status of the callback order is not final, and the platform will still initiate a notification when the order becomes final, please pay attention to the redundant processing at the business level)
# 6.4 Callback response
Remarks: All callbacks include signature information. It is recommended that merchants do a callback signature verification. After receiving the callback information, the merchant will confirm the final status of the order. Please respond to the website
Regarding the following information (content-type: application/json), if there is no normal response from the server, it will be within 30 minutes, with a total of 2 every three minutes
Notice
{"code":200,"success":true}
# 6.5 Callback Notification URL
*** Log in to the backstage of the merchant to configure the unified callback address (manually specify the callback UR address in the order, which has a higher priority than the uniformly configured callback address. For example, if the notifyUrl parameter is specified in the order, it will be used regardless of whether there is a unified configuration of the callback notification address. notifyUrl address in the order)***
Note that the http response status_code has the highest priority, as long as the response status_code=200 is received, the response data will be ignored
# 7. Public response code
filed | Type | Default value and comment |
---|---|---|
code | String | Success "200" For others, please refer to failure code |
success | Bool | success true, failure false, and code to keep the meaning of synchronization |
msg | String | The textual description returned by the first-level code |
data | Object | Reference interface list chapter |
# 8. Failure code
Code | Desc |
---|---|
200 | Normal |
300 | Parameter exception |
301 | IP Unauthorized |
307 | Signature error |
500 | System Error |