Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Owo Sugiana
/
iso8583-web
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 93329a02
authored
Aug 19, 2020
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Bug fixed web service saat ISO8583 offline
1 parent
b67f0bc0
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
171 additions
and
51 deletions
CHANGES.txt
README.rst
iso8583-aggregator.ini
iso8583-bank.ini
iso8583_web/scripts/views/__init__.py
CHANGES.txt
View file @
93329a0
0.3.1 2020-08-19
----------------
- Bug fixed web service saat ISO8583 offline
- README.rst memuat diagram antar daemon
0.3 2020-08-09
0.3 2020-08-09
--------------
--------------
- Di forwarder.py Parser.run() usai job.process() bisa mengirim dokumen ISO8583
- Di forwarder.py Parser.run() usai job.process() bisa mengirim dokumen ISO8583
...
...
README.rst
View file @
93329a0
...
@@ -29,6 +29,12 @@ Selanjutnya kita membutuhkan tiga terminal untuk simulasi:
...
@@ -29,6 +29,12 @@ Selanjutnya kita membutuhkan tiga terminal untuk simulasi:
Sebagai Pemda
Sebagai Pemda
-------------
-------------
Berikut ini diagram komunikasi ISO8583 Pemda dengan BJB::
+----------------+ +-------+
| BJB port 10002 | <-----> | Pemda |
+----------------+ +-------+
Buat file konfigurasi ``test-pemda.ini``::
Buat file konfigurasi ``test-pemda.ini``::
[loggers]
[loggers]
...
@@ -126,10 +132,21 @@ aktif.
...
@@ -126,10 +132,21 @@ aktif.
Sebagai Bank
Sebagai Bank
------------
------------
Buka terminal ke-2, dan buat file ``test-bank.ini``::
Melanjutkan diagram sebelumnya maka kini ada simulasi teller yang menghubungi
kantor pusatnya::
+--------------------+
| BJB | +-------+
+--------+ | ISO8583 port 10002 | <-----> | Pemda |
| Teller | -----> | HTTP port 7000 | +-------+
+------- + +--------------------+
HTTP atau web service merupakan komunikasi satu arah, oleh karena itu hanya
digambarkan satu panah saja. Selanjutnya buka terminal ke-2, dan buat file
``test-bank.ini``::
[loggers]
[loggers]
keys = root, iso8583_web
keys = root, iso8583_web
, jsonrpc
[handlers]
[handlers]
keys = console, file
keys = console, file
...
@@ -146,6 +163,11 @@ Buka terminal ke-2, dan buat file ``test-bank.ini``::
...
@@ -146,6 +163,11 @@ Buka terminal ke-2, dan buat file ``test-bank.ini``::
handlers =
handlers =
qualname = iso8583_web
qualname = iso8583_web
[logger_jsonrpc]
level = DEBUG
handlers = console, file
qualname = pyramid_rpc.jsonrpc
[handler_console]
[handler_console]
class = StreamHandler
class = StreamHandler
args = (sys.stderr,)
args = (sys.stderr,)
...
@@ -161,7 +183,7 @@ Buka terminal ke-2, dan buat file ``test-bank.ini``::
...
@@ -161,7 +183,7 @@ Buka terminal ke-2, dan buat file ``test-bank.ini``::
[formatter_generic]
[formatter_generic]
format = %(asctime)s %(levelname)s %(message)s
format = %(asctime)s %(levelname)s %(message)s
[host_
pemda
]
[host_
kota_bogor
]
ip = 127.0.0.1
ip = 127.0.0.1
port = 10002
port = 10002
listen = true
listen = true
...
@@ -174,7 +196,7 @@ Buka terminal ke-2, dan buat file ``test-bank.ini``::
...
@@ -174,7 +196,7 @@ Buka terminal ke-2, dan buat file ``test-bank.ini``::
[web_teller]
[web_teller]
route_path = /rpc
route_path = /rpc
host =
pemda
host =
kota_bogor
module = iso8583_web.scripts.views.jsonrpc
module = iso8583_web.scripts.views.jsonrpc
allowed_ip =
allowed_ip =
127.0.0.1
127.0.0.1
...
@@ -205,8 +227,8 @@ Selanjutnya section ``web_teller``::
...
@@ -205,8 +227,8 @@ Selanjutnya section ``web_teller``::
[web_teller]
[web_teller]
route_path = /rpc
route_path = /rpc
host =
pemda
host =
kota_bogor
module = iso8583_web.scripts.view.jsonrpc
module = iso8583_web.scripts.view
s
.jsonrpc
allowed_ip =
allowed_ip =
127.0.0.1
127.0.0.1
10.8.20.1
10.8.20.1
...
@@ -216,7 +238,7 @@ Bandingkan dengan section yang berawalan ``host_`` yang berarti konfigurasi
...
@@ -216,7 +238,7 @@ Bandingkan dengan section yang berawalan ``host_`` yang berarti konfigurasi
untuk ISO8583. Berikut penjelasannya:
untuk ISO8583. Berikut penjelasannya:
* ``route_path`` merupakan *URL path*, selalu awali dengan ``/``
* ``route_path`` merupakan *URL path*, selalu awali dengan ``/``
* ``host =
pemda`` berarti harus ada section ``host_pemda
``. Ini merupakan
* ``host =
kota_bogor`` berarti harus ada section ``host_kota_bogor
``. Ini merupakan
*routing*, akan diarahkan ke ISO8583 mana HTTP request ini.
*routing*, akan diarahkan ke ISO8583 mana HTTP request ini.
* ``module`` merupakan *modul Pyramid* yang akan digunakan untuk menanggapi
* ``module`` merupakan *modul Pyramid* yang akan digunakan untuk menanggapi
*HTTP request*
*HTTP request*
...
@@ -236,12 +258,12 @@ Seharusnya ada penampakan seperti ini::
...
@@ -236,12 +258,12 @@ Seharusnya ada penampakan seperti ini::
2020-07-18 22:27:44,373 INFO Web server listen at 0.0.0.0:7000 with 12 workers
2020-07-18 22:27:44,373 INFO Web server listen at 0.0.0.0:7000 with 12 workers
2020-07-18 22:27:44,373 INFO ISO8583 server listen at 0.0.0.0:10002
2020-07-18 22:27:44,373 INFO ISO8583 server listen at 0.0.0.0:10002
2020-07-18 22:27:46,592 INFO 127.0.0.1 allowed
2020-07-18 22:27:46,592 INFO 127.0.0.1 allowed
2020-07-18 22:27:51,595 INFO 127.0.0.1
pemda
140197249940784 Receive [b'00560800822000000000000004000000000000000718222751222236301\x03']
2020-07-18 22:27:51,595 INFO 127.0.0.1
kota_bogor
140197249940784 Receive [b'00560800822000000000000004000000000000000718222751222236301\x03']
2020-07-18 22:27:51,596 INFO 127.0.0.1
pemda
140197249940784 Raw to ISO8583 [b'0800822000000000000004000000000000000718222751222236301']
2020-07-18 22:27:51,596 INFO 127.0.0.1
kota_bogor
140197249940784 Raw to ISO8583 [b'0800822000000000000004000000000000000718222751222236301']
2020-07-18 22:27:51,598 INFO 127.0.0.1
pemda
140197249940784 -> 140197249940688 Decode MTI 0800 Data {7: '0718222751', 11: '222236', 70: '301'}
2020-07-18 22:27:51,598 INFO 127.0.0.1
kota_bogor
140197249940784 -> 140197249940688 Decode MTI 0800 Data {7: '0718222751', 11: '222236', 70: '301'}
2020-07-18 22:27:51,602 INFO 127.0.0.1
pemda
140197249940784 -> 140197249940688 Encode MTI 0810 Data {7: '0718222751', 11: '222236', 39: '00', 70: '301'}
2020-07-18 22:27:51,602 INFO 127.0.0.1
kota_bogor
140197249940784 -> 140197249940688 Encode MTI 0810 Data {7: '0718222751', 11: '222236', 39: '00', 70: '301'}
2020-07-18 22:27:51,602 INFO 127.0.0.1
pemda
140197249940784 ISO8583 to raw [b'081082200000020000000400000000000000071822275122223600301']
2020-07-18 22:27:51,602 INFO 127.0.0.1
kota_bogor
140197249940784 ISO8583 to raw [b'081082200000020000000400000000000000071822275122223600301']
2020-07-18 22:27:51,603 INFO 127.0.0.1
pemda
140197249940784 Send [b'0058081082200000020000000400000000000000071822275122223600301\x03']
2020-07-18 22:27:51,603 INFO 127.0.0.1
kota_bogor
140197249940784 Send [b'0058081082200000020000000400000000000000071822275122223600301\x03']
Berikut penjelasannya:
Berikut penjelasannya:
...
@@ -336,53 +358,140 @@ naikkan angkanya hingga:
...
@@ -336,53 +358,140 @@ naikkan angkanya hingga:
Jika salah satu kondisi di atas tercapai maka turunkan nilai ``threads``.
Jika salah satu kondisi di atas tercapai maka turunkan nilai ``threads``.
JSON-RPC Log File
LinkAja
-----------------
-------
Biasanya tahap awal pembuatan web client terjadi kesalahan yang tampak di
LinkAja merupakan produk PT Telkom yang berkomunikasi dengan Agratek.
client namun tak nampak di log web server. Untuk mengatasi hal ini lakukan
Melanjutkan diagram sebelumnya maka berikut ini alurnya::
penambahan di file konfigurasi ``test-bank.ini`` pada section ``loggers``
sehingga menjadi seperti ini::
+--------------------+
| BJB | +------------------+
+----------------+ | ISO8583 port 10002 | <-----> | Pemda Kota Bogor |
+---------+ | Agratek | <-----> | ISO8583 port 10001 | | +------------------+
| LinkAja | -----> | HTTP port 7001 | | | |
+---------+ +----------------+ | | | +-------------------+
| | +--> | Pemda Kota Bekasi |
+--------+ | | +-------------------+
| Teller | -----> | HTTP port 7000 |
+------- + +--------------------+
Perhatikan kini BJB juga listen di port 10001 untuk berkomunikasi dengan
Agratek menggunakan ISO8583. Sehingga kini daemon bank mendapat julukan
*ISO8583 Forwarder*.
Di terminal ke-2 matikan daemon bank. Tambahkan di file ``test-bank.ini`` baris
berikut ini::
[host_agratek]
ip = 127.0.0.1
port = 10001
listen = true
streamer = bjb
module = opensipkd.iso8583.bjb.pbb.test_aggregator
db_url = postgresql://user:pass@localhost/db
# Routing dari 4 digit awal InvoiceID
host =
3271:kota_bogor
3275:kota_bekasi
Meski ini hanya simulasi namun daemon bank membutuhkan database untuk pemetaan
STAN (bit 11) *payment request* dari Agratek dengan STAN saat ke Pemda. Informasi
ini digunakan saat *reversal request*. Kini buatlah tabelnya::
[loggers]
$ ~/env/bin/iso8583_bjb_pbb_test_aggregator_initdb
keys = root, iso8583_web, jsonrpc
Lalu tambahkan section ``logger_jsonrpc`` berikut ini
::
Hidupkan lagi daemon-nya
::
[logger_jsonrpc]
$ ~/env/bin/iso8583 test-bank.ini
level = DEBUG
handlers = console, file
qualname = pyramid_rpc.jsonrpc
Kemudian jalankan lagi daemon-nya. Misalkan client memanggil method ``eco``
Selanjutnya kita siapkan daemon Agratek.
yang seharusnya ``echo`` maka di log akan tampil seperti ini::
2019-02-21 14:00:47,135 DEBUG handling id:0 method:eco
Aggregator
2019-02-21 14:00:47,135 DEBUG json-rpc method not found rpc_id:0 "eco"
----------
Dari sisi bank Agratek ini dikategorikan sebagai aggregator. Bila simulasi
aplikasi teller sebelumnya menggunakan format JSON-RPC maka kali ini akan
menggunakan format yang sudah ditentukan LinkAja. Siapkan terminal ke-3.
Modul ``linkaja`` membutuhkan database untuk pencatatan transaksi. Buatlah
database-nya terlebih dahulu. Lalu buatlah file ``test-agratek.ini``::
LinkAja
[loggers]
-------
keys = root, iso8583_web
Simulasi aplikasi teller sebelumnya menggunakan format JSON-RPC. Kali ini akan
kita coba dengan format yang sudah ditentukan LinkAja (produk PT Telkom). Modul
[handlers]
``linkaja`` membutuhkan database untuk pencatatan transaksi. Buatlah
keys = console, file
database-nya terlebih dahulu. Lalu tambahkan baris berikut ini di file
``test-bank.ini``::
[formatters]
keys = generic
[logger_root]
level = DEBUG
handlers = console, file
[logger_iso8583_web]
level = DEBUG
handlers =
qualname = iso8583_web
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = DEBUG
formatter = generic
[handler_file]
class = FileHandler
args = ('/home/sugiana/log/agratek.log', 'a')
level = DEBUG
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)s %(message)s
[web]
port = 7001
threads = 12
[web_linkaja]
[web_linkaja]
route_path = /linkaja
route_path = /linkaja
host = pemda
module = iso8583_web.scripts.views.linkaja
module = iso8583_web.scripts.views.linkaja
host = bjb
timeout = 30
db_url = postgresql://user:pass@localhost/db
db_url = postgresql://user:pass@localhost/db
allowed_ip =
allowed_ip =
127.0.0.1
127.0.0.1
10.8.30.1
10.8.30.1
[host_bjb]
ip = 127.0.0.1
port = 10001
listen = false
timeout = 15
streamer = bjb
module = opensipkd.iso8583.bjb.pbb.agratek
request_bits =
2:622011888888888888
18:6025
22:010
32:015
35:622011888888888888=9912?
37:000000000000
41:AGRATEK
42:LINKAJA
43:AGRATEK-LINKAJA
49:360
59:PAY
60:123
63:214
Buat tabelnya::
Buat tabelnya::
$ ~/env/bin/init_db_linkaja test-bank.ini
$ ~/env/bin/init_db_linkaja test-agratek.ini
Jalankan daemon-nya::
$ ~/env/bin/iso8583 test-agratek.ini
Restart daemon-nya
, lalu di terminal ke-3
coba inquiry::
Restart daemon-nya
. Buka terminal ke-4 dan
coba inquiry::
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:700
0
/linkaja --invoice-id=3271010001007002701995
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:700
1
/linkaja --invoice-id=3271010001007002701995
Hasilnya::
Hasilnya::
...
@@ -402,9 +511,6 @@ Hasilnya::
...
@@ -402,9 +511,6 @@ Hasilnya::
2020-07-19 06:21:00.333 Request: {'merchant': 'ldm***1', 'terminal': 'Terminal Name', 'pwd': 'ldm***ss', 'msisdn': '628111234567', 'acc_no': '3271010001007002701995', 'trx_date': '20200719062100', 'trx_type': '022', 'amount': 19536, 'bill_ref': '16', 'trx_id': '0719062100'}
2020-07-19 06:21:00.333 Request: {'merchant': 'ldm***1', 'terminal': 'Terminal Name', 'pwd': 'ldm***ss', 'msisdn': '628111234567', 'acc_no': '3271010001007002701995', 'trx_date': '20200719062100', 'trx_type': '022', 'amount': 19536, 'bill_ref': '16', 'trx_id': '0719062100'}
2020-07-19 06:21:01.056 Response 200: ['00:010123882462:16:'] -> {'Response Code': '00', 'Transaction ID': '010123882462', 'Bill Ref': '16', 'Notification Message': ''}
2020-07-19 06:21:01.056 Response 200: ['00:010123882462:16:'] -> {'Response Code': '00', 'Transaction ID': '010123882462', 'Bill Ref': '16', 'Notification Message': ''}
2020-07-19 06:21:01.061 thread 1 0.717498779296875 detik 00:010123882462:16:
2020-07-19 06:21:01.061 thread 1 0.717498779296875 detik 00:010123882462:16:
2020-07-19 06:21:01.061 Tercepat 00:010123882462:16:
2020-07-19 06:21:01.061 Terlama 00:010123882462:16:
2020-07-19 06:21:01.061 Rerata 0.717498779296875 detik / request
2020-07-19 06:21:01.061 Tidak ada yang gagal
2020-07-19 06:21:01.061 Tidak ada yang gagal
Lagi, pastikan ``Response Code`` bernilai ``00`` yang berarti pembayaran
Lagi, pastikan ``Response Code`` bernilai ``00`` yang berarti pembayaran
...
@@ -418,12 +524,9 @@ Hasilnya::
...
@@ -418,12 +524,9 @@ Hasilnya::
2020-07-19 06:25:13.546 Request: {'merchant': 'ldm***1', 'terminal': 'Terminal Name', 'pwd': 'ldm***ss', 'msisdn': '628111234567', 'acc_no': '3271010001007002701995', 'trx_date': '20200719062513', 'trx_type': '023', 'amount': 19536, 'bill_ref': '16', 'trx_id': '0719062100'}
2020-07-19 06:25:13.546 Request: {'merchant': 'ldm***1', 'terminal': 'Terminal Name', 'pwd': 'ldm***ss', 'msisdn': '628111234567', 'acc_no': '3271010001007002701995', 'trx_date': '20200719062513', 'trx_type': '023', 'amount': 19536, 'bill_ref': '16', 'trx_id': '0719062100'}
2020-07-19 06:25:14.121 Response 200: ['00::16:'] -> {'Response Code': '00', 'Transaction ID': '', 'Bill Ref': '16', 'Notification Message': ''}
2020-07-19 06:25:14.121 Response 200: ['00::16:'] -> {'Response Code': '00', 'Transaction ID': '', 'Bill Ref': '16', 'Notification Message': ''}
2020-07-19 06:25:14.126 thread 1 0.5694727897644043 detik 00::16:
2020-07-19 06:25:14.126 thread 1 0.5694727897644043 detik 00::16:
2020-07-19 06:25:14.127 Tercepat 00::16:
2020-07-19 06:25:14.127 Terlama 00::16:
2020-07-19 06:25:14.127 Rerata 0.5694727897644043 detik / request
2020-07-19 06:25:14.127 Tidak ada yang gagal
2020-07-19 06:25:14.127 Tidak ada yang gagal
Pastikan ``Response Code`` bernilai ``00`` yang bermakna pembatalan pembayaran
Pastikan ``Response Code`` bernilai ``00`` yang bermakna pembatalan pembayaran
berhasil.
berhasil.
Script ini juga menerima opsi ``--count`` untuk *stress test*.
Selamat mencoba.
Selamat mencoba.
iso8583-aggregator.ini
View file @
93329a0
...
@@ -42,7 +42,7 @@ formatter = generic
...
@@ -42,7 +42,7 @@ formatter = generic
format
=
%(asctime)s %(levelname)s %(message)s
format
=
%(asctime)s %(levelname)s %(message)s
[web]
[web]
port
=
700
0
port
=
700
1
threads
=
12
threads
=
12
[web_linkaja]
[web_linkaja]
...
...
iso8583-bank.ini
View file @
93329a0
...
@@ -41,6 +41,18 @@ formatter = generic
...
@@ -41,6 +41,18 @@ formatter = generic
[formatter_generic]
[formatter_generic]
format
=
%(asctime)s %(levelname)s %(message)s
format
=
%(asctime)s %(levelname)s %(message)s
[web]
port
=
7000
threads
=
12
[web_teller]
route_path
=
/rpc
host
=
kota_bogor
module
=
iso8583_web.scripts.view.jsonrpc
allowed_ip
=
127.0.0.1
10.8.20.1
[host_agratek]
[host_agratek]
ip
=
127.0.0.1
ip
=
127.0.0.1
port
=
10001
port
=
10001
...
...
iso8583_web/scripts/views/__init__.py
View file @
93329a0
...
@@ -117,9 +117,9 @@ class View:
...
@@ -117,9 +117,9 @@ class View:
continue
continue
found_conn
=
conn
found_conn
=
conn
if
not
found_conn
:
if
not
found_conn
:
raise
Exception
(
self
.
not_found_error
(
name
)
)
raise
self
.
not_found_error
(
name
)
if
not
found_conn
.
running
:
if
not
found_conn
.
running
:
raise
Exception
(
self
.
not_running_error
(
name
)
)
raise
self
.
not_running_error
(
name
)
return
found_conn
return
found_conn
def
get_web_conf
(
self
):
def
get_web_conf
(
self
):
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment