Continue the series about FinTech, guys !!
In the previous article, I have introduced an overview of the systems that banks have. In this post, I will explain to you a term that surely you will have to work with or at least have heard of it when working in the field of fin, it is ISO8583.
First, ISO8583 is the international standard for the communication and interaction of banking systems with each other (transactions, financial messages). ISO 8583 provides a message format and communication stream so that different systems can exchange transactions.
- Although ISO 8583 provides a general standard, it is not used directly for a system or a network. Instead each network will customize these standards to suit its intended use.
- Different versions of ISO 8583 have different ways of placing fields. In which ISO 8583: 2003 is widely recognized.
For example: When you want to make a deposit transaction into an electronic wallet. From the e-wallet provider (e.g. Momo, Moca …) will receive the input information as Amount (amount to be deposited into the wallet), the number of tokens (when you link a bank card to a wallet, you will granted some tokens to make transactions) ….
- B1: Organizations and suppliers of e-wallets will make a request to the issuing bank (the bank that issues the card is linked to the wallet) with the necessary information such as token number, amount … .. Can make requests via API or through socket.
- B2: Card issuer, checking the input information (input information) when all information has passed the valid step, performing build message according to ISO8583 standard according to POS channel to deduct customers’ money and adding to the account intermediary of e-wallet provider on the bank side.
- B3: Chimpanzee, money appeared on the wallet.
It is a basic process logic, to realize, I will use Java to build ISO8583 message.
B1. You create yourself a Java project and import the JPOS library as follows:
<!-- https://mvnrepository.com/artifact/org.jpos/jpos -->
B2: Build message ISO:
ISOMsg isoMsgReq = new ISOMsg();
IsoClient isoClient = IsoClient.builder().endpointHost("IP host", PORT).build();
- MTI: 0200 is to define this as a financial mesage (Finalncial Message) in the example that is making a deduction of money on MTI as 0200.
- Field 2: The card number of the transaction (9704xxxxxxxxxxxxxxx).
- Field 4: The amount of transactions.
- Field 7: The time of making a transaction.
- Field 11: The number of trace numbers (is the number of performing the counter)
- Field 49: The format of transaction amount (Example: VND ..)
- IP and port here are: IP and port of NS or TS server (POS Channel) (refer to previous article)
You can refer to the MTI:
- x0xx Reserved by ISO
- x1xx Authorization message Determine if funds are available, get an approval but do not post to account for reconciliation. Dual message system (DMS), awaits file exchange for posting to the account.
- x2xx Financial messages Determine if funds are available, get an approval and post directly to the account. Single message system (SMS), no file exchange after this.
- x3xx File actions message Used for hot-card, TMS and other exchanges
- x4xx Reversal and chargeback messages Reversal (x4x0 or x4x1): Reverses the action of a previous authorization.
- Chargeback (x4x2 or x4x3): Charges back a previously cleared financial message.
- x5xx Reconciliation message Transmits settlement information message.
- x6xx Administrative message Transmits administrative advice. Often used for failure messages (eg, message reject or failure to apply).
- x7xx Fee collection messages
- x8xx Network management message Used for secure key exchange, logon, echo test and other network functions.
- x9xx Reserved by ISO **
Read more https://en.wikipedia.org/wiki/ISO_8583
And after the run we get a response: Hehe you try it first!
After receiving the successful response. (Field 39 = 0), the transaction has been successful!
Above I have introduced the message ISO8583, if you have any questions or questions, please comment below! I will answer you guys!