It will be good to note here that the reversal request for the place lien will be sent as a debit lien request with an amount of 0.<\/strong><\/p>\n\n\n\nTherefore a transaction request (debit, enquiry and place lien requests) will only be sent once for a particular transaction, if no response is received a reversal request for that particular transaction will be sent afterwards. For a reversal or debit lien request, if no response is received, the reversal or debit lien request will continue to be sent till a valid response is received. This means the fintech need to properly handle several reversals\/debit lien and make sure to only honor one of same reversal\/debit lien request sent severally.<\/p>\n\n\n\n
3.0 Transaction Type<\/h3>\n\n\n\n
The transaction type determines how the transaction should be treated. At the moment, we will only be treating 5 transaction types; DEBIT, ENQUIRY, REVERSALS, PLACE LIEN and DEBIT LIEN.<\/p>\n\n\n\n
The fiintechs are expected to implement and expose endpoints for these transaction types.<\/p>\n\n\n\n
DEBIT<\/strong>: the debit endpoint will be called whenever a debit is to be done on the wallet. This debit can be of any kind, goods & services, withdrawal etc.<\/p>\n\n\n\nENQUIRY<\/strong>: the enquiry endpoint will be called whenever an inquiry is to be done on the account. It can be balance enquiry, name enquiry etc<\/p>\n\n\n\nREVERSAL<\/strong>: the reversal endpoint is called whenever a debit that has occurred on the wallet needs to be undone.<\/p>\n\n\n\nPLACE LIEN: <\/strong>the place lien endpoint will be called for the authorization requests of a dual messaging. It should place a lien on the wallet for a particular amount.<\/p>\n\n\n\nDEBIT LIEN: <\/strong>the debit lien endpoint will be called for the completion of the dual messaging. It should debit the lien that has been place.<\/p>\n\n\n\n4.0 Response Codes<\/h3>\n\n\n\n
The response code is the value that particularly determines the status of the transaction. Since there should always be a response for every request, this response should have a way of telling what the status of the transaction is, this is what the response code does. The response code for this project is limited to the response codes listed below. If any response code is received and is not within the listed response codes, the transaction response is treated as an invalid transaction response regardless of what the status might have been on the fintech. If this happens and the response was for a debit request, a reversal will be sent for that transaction. If the response was for a reversal request, another reversal request will be sent.<\/p>\n\n\n\n
The valid response codes are as follows:<\/p>\n\n\n\n
Status<\/th> | Response Code<\/th><\/tr><\/thead> |
---|
Successful<\/td> | 00<\/td><\/tr> |
Do not honor<\/td> | 05<\/td><\/tr> |
Error<\/td> | 06<\/td><\/tr> |
Invalid transaction<\/td> | 12<\/td><\/tr> |
Invalid amount<\/td> | 13<\/td><\/tr> |
Unable to locate record<\/td> | 25<\/td><\/tr> |
Function not supported<\/td> | 40<\/td><\/tr> |
Lost card, pick-up<\/td> | 41<\/td><\/tr> |
Account closed<\/td> | 45<\/td><\/tr> |
Not sufficient funds<\/td> | 51<\/td><\/tr> |
Exceeds withdrawal limit<\/td> | 61<\/td><\/tr> |
Exceeds withdrawal frequency<\/td> | 65<\/td><\/tr> |
Not reachable\/Issuer or switch inoperative<\/td> | 91<\/td><\/tr> |
Duplicate transaction<\/td> | 94<\/td><\/tr><\/tbody><\/table>\n\n\n\n5.0 Transaction Reference Number<\/h3>\n\n\n\nThe transaction reference is a unique string used to identify every transaction. Every transaction, regardless of the transaction type will have a unique transaction reference. A reversal request will however, have the transaction reference of the original transaction it’s trying to reverse. This original reference number is found only in reversal requests.<\/p>\n\n\n\n The several repeats of the reversal request, will all have a transaction reference which will be same as the first reversal request. This means that when a reversal request for a particular transaction is sent several times, they will all have the same transaction reference.<\/p>\n\n\n\n 6.0 Transaction Amount<\/h3>\n\n\n\nThis is the amount that is sent both in the request and\/or in the response. For the purpose of this project the transaction amount will always be in minor. This means that for every request that will be sent and for every response that will be received, the transaction amount is always expected to be in minor.<\/p>\n\n\n\n e.g 100 naira in minor should be 10000. This also applies to transactionFee sent when present<\/p>\n\n\n\n 7.0 Terminal Type<\/h3>\n\n\n\nThe terminal type is a 2 digit character that defines the terminal the transaction originated from. The below table shows what the different values identify.<\/p>\n\n\n\n Terminal Type<\/th> | Terminal<\/th><\/tr><\/thead> |
---|
00<\/td> | Administrative terminal<\/td><\/tr> | 01<\/td> | POS terminal<\/td><\/tr> | 02<\/td> | ATM<\/td><\/tr> | 03<\/td> | Home terminal<\/td><\/tr> | 04<\/td> | Electronic Cash Register (ECR)<\/td><\/tr> | 05<\/td> | Dial terminal<\/td><\/tr> | 06<\/td> | Travellers check machine<\/td><\/tr> | 07<\/td> | Fuel machine<\/td><\/tr> | 08<\/td> | Scrip machine<\/td><\/tr> | 09<\/td> | Coupon machine<\/td><\/tr> | 10<\/td> | Ticket machine<\/td><\/tr> | 11<\/td> | Point-of-Banking terminal<\/td><\/tr> | 12<\/td> | Teller<\/td><\/tr> | 13<\/td> | Franchise teller<\/td><\/tr> | 14<\/td> | Personal banking<\/td><\/tr> | 15<\/td> | Public utility<\/td><\/tr> | 16<\/td> | Vending<\/td><\/tr> | 17<\/td> | Self-service<\/td><\/tr> | 18<\/td> | Authorization<\/td><\/tr> | 19<\/td> | Payment<\/td><\/tr> | 20<\/td> | VRU<\/td><\/tr> | 21<\/td> | Smart phone<\/td><\/tr> | 22<\/td> | Interactive television<\/td><\/tr> | 23<\/td> | Personal digital assistant<\/td><\/tr> | 24<\/td> | Screen phone<\/td><\/tr> | 25<\/td> | Business banking<\/td><\/tr> | 90<\/td> | E-commerce – No encryption; no authentication<\/td><\/tr> | 91<\/td> | E-commerce – SET\/3D-Secure encryption; cardholder certificate not used (non-authenticated)<\/td><\/tr> | 92<\/td> | E-commerce – SET\/3D-Secure encryption; cardholder certificate used (authenticated)<\/td><\/tr> | 93<\/td> | E-commerce – SET encryption, chip cryptogram used; cardholder certificate not used<\/td><\/tr> | 94<\/td> | E-commerce – SET encryption, chip cryptogram used; cardholder certificate used<\/td><\/tr> | 95<\/td> | E-commerce – Channel encryption (SSL); cardholder certificate not used (non-authenticated)<\/td><\/tr> | 96<\/td> | E-commerce – Channel encryption (SSL); chip cryptogram used, cardholder certificate not used<\/td><\/tr><\/tbody><\/table>\n\n\n\n8.0 AdditionalFields<\/h3>\n\n\n\nGiven the needs of each Fintech varies, we have added a feature that allows a fintech to add any number of fields (from the list of allowed fields) to their payload. The additional fields will be sent in an extra field (additionalFields) as key values pair for any configured field provided the field is present in the request ISO message.<\/p>\n\n\n\n Iso Field<\/th> | json field name<\/th> | <\/th> | Iso Field<\/th> | Json field name<\/th> | <\/th> | Iso Field<\/th> | Json Field name<\/th><\/tr> |
---|
3<\/td> | processingCode<\/td> | 57<\/td> | authLifeCycle<\/td> | 127.7<\/td> | checkData<\/td><\/tr> | 5<\/td> | amountSettle<\/td> | 66<\/td> | settlementCode<\/td> | 127.8<\/td> | retentionData<\/td><\/tr> | 7<\/td> | transmissionDateAndTime<\/td> | 67<\/td> | extendedPaymentCode<\/td> | 127.9<\/td> | additionalNodeData<\/td><\/tr> | 9<\/td> | conversionRate<\/td> | 68<\/td> | receivingInstCountryCode<\/td> | 127.12<\/td> | terminalOwner<\/td><\/tr> | 12<\/td> | timeLocal<\/td> | 69<\/td> | settlementInstCountryCode<\/td> | 127.13<\/td> | posGeographicData<\/td><\/tr> | 13<\/td> | dateLocal<\/td> | 86<\/td> | amountCredit<\/td> | 127.14<\/td> | sponsorBank<\/td><\/tr> | 15<\/td> | dateSettle<\/td> | 87<\/td> | amountCreditReversal<\/td> | 127.15<\/td> | addressVerificationData<\/td><\/tr> | 16<\/td> | dateConverted<\/td> | 88<\/td> | amountDebit<\/td> | 127.16<\/td> | addressVerificationResult<\/td><\/tr> | 17<\/td> | draftCapture<\/td> | 89<\/td> | amountDebitReversal<\/td> | 127.17<\/td> | cardholderInfo<\/td><\/tr> | 18<\/td> | merchantType<\/td> | 90<\/td> | originalDataElements<\/td> | 127.19<\/td> | bankDetails<\/td><\/tr> | 19<\/td> | acquiringCountryCode<\/td> | 91<\/td> | fileUpdateCode<\/td> | 127.20<\/td> | authorizerSettlementDate<\/td><\/tr> | 20<\/td> | panExtendedCountryCode<\/td> | 92<\/td> | fileSecurityCode<\/td> | 127.21<\/td> | recordId<\/td><\/tr> | 21<\/td> | forwardingInstitutionCode<\/td> | 93<\/td> | responseIndicator<\/td> | 127.23<\/td> | payeeNameAndAddress<\/td><\/tr> | 22<\/td> | posEntryMode<\/td> | 94<\/td> | serviceIndicator<\/td> | 127.24<\/td> | payeeReference<\/td><\/tr> | 24<\/td> | networkId<\/td> | 95<\/td> | replacementAmounts<\/td> | 127.26<\/td> | originalNode<\/td><\/tr> | 25<\/td> | posConditionCode<\/td> | 97<\/td> | amountNetSettle<\/td> | 127.27<\/td> | cardVerificationResult<\/td><\/tr> | 26<\/td> | pinCaptureCode<\/td> | 98<\/td> | payee<\/td> | 127.29<\/td> | secure3DData<\/td><\/tr> | 27<\/td> | authIdRespLength<\/td> | 99<\/td> | settleInstIdCode<\/td> | 127.30<\/td> | secure3DResult<\/td><\/tr> | 29<\/td> | settlementFee<\/td> | 100<\/td> | receivingInstIdCode<\/td> | 127.31<\/td> | issuerNetworkId<\/td><\/tr> | 32<\/td> | acquiringInstitutionIdCode<\/td> | 102<\/td> | fromAccount<\/td> | 127.32<\/td> | ucafData<\/td><\/tr> | 33<\/td> | forwardingInstitutionIdCode<\/td> | 103<\/td> | toAccount<\/td> | 127.33<\/td> | extendedTranType<\/td><\/tr> | 34<\/td> | panExtended<\/td> | 104<\/td> | transactionDescription<\/td> | <\/td> | <\/td><\/tr> | 40<\/td> | serviceRestrictionCode<\/td> | 118<\/td> | paymentNumber<\/td> | <\/td> | <\/td><\/tr> | 46<\/td> | additionalDataIso<\/td> | 119<\/td> | paymentNumberReversal<\/td> | <\/td> | <\/td><\/tr> | 47<\/td> | additionalDataNational<\/td> | 123<\/td> | posDataCode<\/td> | <\/td> | <\/td><\/tr> | 48<\/td> | additionalData<\/td> | 127.3<\/td> | routingInfo<\/td> | <\/td> | <\/td><\/tr> | 50<\/td> | currencyCodeSettlement<\/td> | 127.4<\/td> | posData<\/td> | <\/td> | <\/td><\/tr> | 54<\/td> | additionalAmounts<\/td> | 127.5<\/td> | serviceStationData<\/td> | <\/td> | <\/td><\/tr> | 56<\/td> | messageReasonCode<\/td> | 127.6<\/td> | authProfile<\/td> | <\/td> | <\/td><\/tr><\/tbody><\/table>\n\n\n\n9.0 Validating the created endpoints<\/h3>\n\n\n\nIn a bid to make the endpoint validation easier, a postman test collection has been created to permit an automated test and validation of several test cases, you can import this collection from here (https:\/\/www.getpostman.com\/collections\/265e1007c3ad614f060f<\/a>). Run this collection against the host where the app is deployed and be sure the tests in this collection pass.<\/p>\n\n\n\nNote: The variable for this collection is configured within the collection. So be sure the check the variables within this collection to supply the necessary details.<\/strong><\/p>\n\n\n\nFor the test private key, any random key can be used while the development is ongoing, but the test private key will be shared once the development, validated and the created endpoints shared with the support engineer in ISW (be sure to update the app with this new private key).<\/p>\n\n\n\n It will be important to note that the path of the endpoints to be created should exactly match the path as specified below in the api specification section.<\/p>\n","protected":false},"author":4976,"featured_media":0,"parent":0,"menu_order":3,"comment_status":"open","ping_status":"closed","template":"","meta":{"spay_email":""},"doc_tag":[],"_links":{"self":[{"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/docs\/4398"}],"collection":[{"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/users\/4976"}],"replies":[{"embeddable":true,"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/comments?post=4398"}],"version-history":[{"count":2,"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/docs\/4398\/revisions"}],"predecessor-version":[{"id":4402,"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/docs\/4398\/revisions\/4402"}],"next":[{"title":"Virtual Card Management","link":"https:\/\/sandbox.interswitchng.com\/docbase\/docs\/card-management\/","href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/docs\/4074"}],"prev":[{"title":"Fintech Card Processing (Spec Document)","link":"https:\/\/sandbox.interswitchng.com\/docbase\/docs\/fintech-card-processing-spec-document\/","href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/docs\/4157"}],"wp:attachment":[{"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/media?parent=4398"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/sandbox.interswitchng.com\/docbase\/wp-json\/wp\/v2\/doc_tag?post=4398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}} |
|
|