Commit f6b47668 by Owo Sugiana

Perbaikan dokumentasi

1 parent 60c55b7f
Daemon ISO8583
==============
Daemon ISO8583 ini bisa sebagai client maupun server. Berikut ini cara
pemasangannya. Nama paketnya mengandung web karena ia bisa dihubungi melalui
web service JSON-RPC untuk inquiry, payment, dan reversal.
Pemasangan
----------
Buat Python virtual environment::
$ python3 -m venv ~/env
$ python3.6 -m venv ~/env
$ ~/env/bin/pip install --upgrade pip
$ ~/env/bin/pip install wheel
Awali dengan memasang paket `ebcdic <https://pypi.org/project/ebcdic/>`_
yang dibutuhkan `ISO8583 <https://pypi.org/project/ISO8583/>`_::
......@@ -23,19 +27,37 @@ Selanjutnya kita membutuhkan tiga terminal untuk simulasi:
1. ISO8583 daemon sebagai pemda. Ini akan mengakses bank ke port 10002.
2. ISO8583 daemon sebagai bank. Ini akan listen di port 10002, dan pada
saat yang sama dia listen di port 7000 sebagai web server.
saat yang sama dia listen di port 8080 sebagai web server.
3. Web client sebagai simulasi aplikasi teller yang akan mengakses web
server tadi.
Sebagai Pemda
-------------
Berikut ini diagram komunikasi ISO8583 Pemda dengan BJB::
+----------------+ +-------+
| BJB port 10002 | <-----> | Pemda |
+----------------+ +-------+
Buat file konfigurasi ``h2h-pemda.ini``::
Langsung saja, pasang paket ISO8583 BJB yang akan digunakan daemon ISO8583 Web
tadi::
$ ~/env/bin/pip install git+https://git.opensipkd.com/sugiana/opensipkd-iso8583-bjb.git
Modul ini memerlukan tabel tambahan untuk mencatat transaksi melalui ISO8583.
Terlebih dahulu buat file konfigurasi ``test-bogor-kota-initdb.ini``::
[main]
module = opensipkd.iso8583.bjb.pbb.bogor_kota
db_url = postgresql://user:pass@localhost/pbb_bogor_kota
Buat tabelnya::
$ ~/env/bin/iso8583_bjb_pbb_initdb test-bogor-kota-initdb.ini
Selanjutnya buat file konfigurasi ``test-bogor-kota-h2h.ini`` untuk daemon::
[loggers]
keys = root, iso8583_web
......@@ -63,7 +85,7 @@ Buat file konfigurasi ``h2h-pemda.ini``::
[handler_file]
class = FileHandler
args = ('/home/sugiana/log/pemda.log', 'a')
args = ('/home/sugiana/log/bogor-kota.log', 'a')
level = DEBUG
formatter = generic
......@@ -71,7 +93,10 @@ Buat file konfigurasi ``h2h-pemda.ini``::
format = %(asctime)s %(levelname)s %(message)s
[module_opensipkd.iso8583.bjb.pbb.bogor_kota]
db_url = postgresql://user:pass@localhost/db_bogor_kota
db_url = postgresql://user:pass@localhost/pbb_bogor_kota
db_pool_pre_ping = true
db_pool_size = 50
db_max_overflow = 100
persen_denda = 2
nip_pencatat = 999999999
kd_kanwil = 01
......@@ -100,27 +125,9 @@ Buat file konfigurasi ``h2h-pemda.ini``::
module = opensipkd.iso8583.bjb.pbb.bogor_kota
Kita bisa menambahkan host lainnya dengan menambahkan awalan ``host_`` pada
section, misalnya ``host_mitracomm``.
Modul ``opensipkd.iso8583.bjb.pbb.bogor_kota`` tidak ada di paket ini sehingga
kita perlu memasangnya::
section, misalnya ``host_mitracomm``. Kini jalankan daemon-nya::
$ ~/env/bin/pip install git+https://git.opensipkd.com/sugiana/opensipkd-iso8583-bjb.git
Modul ini memerlukan tabel untuk mencatat transaksi. Terlebih dahulu buat file
konfigurasi ``iso8583-pbb.ini`` yang merupakan *non daemon*::
[main]
module = opensipkd.iso8583.bjb.pbb.bogor_kota
db_url = postgresql://user:pass@localhost/db_bogor_kota
Buat tabelnya::
$ ~/env/bin/iso8583_bjb_pbb_initdb iso8583-pbb.ini
Pastikan tidak ada kesalahan. Lalu jalankan daemon-nya::
$ ~/env/bin/iso8583 h2h-pemda.ini
$ ~/env/bin/iso8583 test-bogor-kota-h2h.ini
Anda akan mendapat pesan seperti ini::
......@@ -130,20 +137,34 @@ Anda akan mendapat pesan seperti ini::
Abaikan dulu *refused* itu karena daemon bank memang belum ada. Biarkan ini
aktif.
Sebagai Bank
------------
Melanjutkan diagram sebelumnya maka kini ada simulasi teller yang menghubungi
kantor pusatnya::
+--------------------+
| BJB | +-------+
+--------+ | ISO8583 port 10002 | <-----> | Pemda |
| Teller | -----> | HTTP port 7000 | +-------+
| Teller | -----> | HTTP port 8080 | +-------+
+------- + +--------------------+
HTTP atau web service merupakan komunikasi satu arah, oleh karena itu hanya
digambarkan satu panah saja. Selanjutnya buka terminal ke-2, dan buat file
``h2h-bank.ini``::
digambarkan satu panah saja. Selanjutnya buka terminal ke-2.
Buatlah database bernama ``bjb``. Sama seperti sebelumnya, siapkan file
konfigurasi ``test-bjb-initdb.ini`` sekedar untuk membuat tabel terkait ISO8583::
[main]
module = opensipkd.iso8583.bjb.pbb.test_aggregator
db_url = postgresql://user:pass@localhost/bjb
Lalu buat tabelnya::
$ ~/env/bin/iso8583_bjb_pbb_test_initdb test-bjb-initdb.ini
Kini buat file ``test-bjb-h2h.ini`` untuk daemon::
[app:main]
use = egg:iso8583_web
......@@ -176,7 +197,7 @@ digambarkan satu panah saja. Selanjutnya buka terminal ke-2, dan buat file
[server:main]
use = egg:waitress#main
listen = localhost:7000
listen = localhost:8080
threads = 12
[loggers]
......@@ -210,7 +231,7 @@ digambarkan satu panah saja. Selanjutnya buka terminal ke-2, dan buat file
[handler_file]
class = FileHandler
args = ('/home/sugiana/log/bank.log', 'a')
args = ('/home/sugiana/log/bjb.log', 'a')
level = DEBUG
formatter = generic
......@@ -223,26 +244,20 @@ digambarkan satu panah saja. Selanjutnya buka terminal ke-2, dan buat file
listen = true
streamer = bjb_with_suffix
module = opensipkd.iso8583.bjb.pbb.test
db_url = postgresql://user:pass@localhost/db_bank
db_url = postgresql://user:pass@localhost/bjb
Buat dulu tabel terkait Pyramid::
Buat tabel terkait web service::
$ ~/env/bin/initialize_iso8583_web_db h2h-bank.ini
Siapkan file konfigurasi ``iso8583-bank.ini`` sekedar untuk membuat tabel
terkait ISO8583::
[main]
module = opensipkd.iso8583.bjb.pbb.test
db_url = postgresql://user:pass@localhost/db_bank
$ ~/env/bin/initialize_iso8583_web_db test-bjb-h2h.ini
Lalu buat tabelnya::
Untuk mengarahkan web service path ``/rpc`` ke section ``[host_kota_bogor]``
maka::
$ ~/env/bin/iso8583_bjb_pbb_test_initdb iso8583-bank.ini
$ ~/env/bin/iso8583_set_conf test-bjb-h2h.ini --nama="rpc to iso8583" --value="kota_bogor"
Sekarang jalankan::
Sekarang jalankan daemon::
$ ~/env/bin/pserve test-bank.ini
$ ~/env/bin/pserve test-bjb-h2h.ini
Seharusnya ada penampakan seperti ini::
......@@ -286,7 +301,7 @@ menandakan tidak ada masalah network sehingga siap transaksi.
Setelah *echo established* dengan daemon pemda selanjutnya lakukan *inquiry*
(cek tagihan) dengan cara::
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:7000/rpc --invoice-id=3271010001007002701995
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:8080/rpc --invoice-id=3271010001007002701995
Hasilnya::
......@@ -298,7 +313,7 @@ Hasilnya::
Pastikan bit 39 bernilai ``00`` yang berarti siap dibayar. Lanjutkan dengan ``--payment`` dimana opsi ``--amount`` juga harus disertakan,
nilainya diperoleh dari *inquiry response* bit 4::
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:7000/rpc --invoice-id=3271010001007002701995 --payment --amount=19536
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:8080/rpc --invoice-id=3271010001007002701995 --payment --amount=19536
Hasilnya::
......@@ -313,7 +328,7 @@ Selain ``--amount`` kita juga membutuhkan opsi ``--stan`` dan ``--ntb`` yang
diperoleh saat *payment request* yaitu bit 11 dan bit 48 pada baris *Response*
di atas::
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:7000/rpc --invoice-id=3271010001007002701995 --reversal --amount=19536 --ntb=0719054951 --stan=054237
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:8080/rpc --invoice-id=3271010001007002701995 --reversal --amount=19536 --ntb=0719054951 --stan=054237
Hasilnya::
......@@ -324,12 +339,14 @@ Hasilnya::
Pastikan bit 39 bernilai ``00`` yang menandakan pembatalan berhasil.
Stress Test
-----------
Ini adalah tentang mendapatkan jumlah maksimal transaksi yang berhasil pada
saat bersamaan. Gunakan opsi ``--count=12`` yang berarti 12 transaksi pada saat yang sama::
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:7000/rpc --invoice-id=3271010001007002701995 --count=12
$ ~/env/bin/iso8583_web_client --url=http://127.0.0.1:8080/rpc --invoice-id=3271010001007002701995 --count=12
Hasil akhirnya akan tampak statistik::
......@@ -339,7 +356,7 @@ Hasil akhirnya akan tampak statistik::
2020-07-18 23:56:09.246 Tidak ada yang gagal
Pastikan kita mendapat pesan ``Tidak ada yang gagal``. Angka 12 dipilih sesuai
dengan jumlah ``threads`` pada file konfigurasi ``test-bank.ini``. Silakan
dengan jumlah ``threads`` pada file konfigurasi ``test-bjb-h2h.ini``. Silakan
naikkan angkanya hingga:
1. Ada yang gagal, biasanya karena timeout.
......@@ -348,35 +365,37 @@ naikkan angkanya hingga:
Jika salah satu kondisi di atas tercapai maka turunkan nilai ``threads``.
LinkAja
-------
LinkAja merupakan produk PT Telkom yang berkomunikasi dengan Agratek.
Melanjutkan diagram sebelumnya maka berikut ini alurnya::
+--------------------+
| BJB | +------------------+
+----------------+ | ISO8583 port 10002 | <-----> | Pemda Kota Bogor |
+---------+ | Agratek | <-----> | ISO8583 port 10001 | | +------------------+
+---------+ | Agratek | <-----> | ISO8583 port 10504 | | +------------------+
| LinkAja | -----> | HTTP port 7001 | | | |
+---------+ +----------------+ | | | +-------------------+
| | +--> | Pemda Kota Bekasi |
+--------+ | | +-------------------+
| Teller | -----> | HTTP port 7000 |
| Teller | -----> | HTTP port 8080 |
+------- + +--------------------+
Perhatikan kini BJB juga listen di port 10001 untuk berkomunikasi dengan
Perhatikan kini BJB juga listen di port 10504 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
Di terminal ke-2 matikan daemon bank. Tambahkan di file ``test-bjb-h2h.ini`` baris
berikut ini::
[host_agratek]
ip = 127.0.0.1
port = 10001
port = 10504
listen = true
streamer = bjb
module = opensipkd.iso8583.bjb.pbb.test_aggregator
db_url = postgresql://user:pass@localhost/db
db_url = postgresql://user:pass@localhost/bjb
# Routing dari 4 digit awal InvoiceID
host =
3271:kota_bogor
......@@ -384,41 +403,61 @@ berikut ini::
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*. Buatlah file konfigurasi
``initdb-test-aggregator.ini``` sekedar untuk proses init database::
[main]
module = opensipkd.iso8583.bjb.pbb.test_aggregator
db_url = postgresql://user:pass@localhost/db
Lalu buatlah tabelnya::
$ ~/env/bin/iso8583_bjb_pbb_test_aggregator_initdb initdb-test-aggregator.ini
ini digunakan saat *reversal request*.
Hidupkan lagi daemon-nya::
$ ~/env/bin/iso8583 test-bank.ini
$ ~/env/bin/iso8583 test-bjb-h2h.ini
Selanjutnya kita siapkan daemon Agratek.
Aggregator
----------
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 ``initdb-agratek.ini``::
Buatlah database-nya terlebih dahulu. Lalu buatlah file
``test-agratek-initdb.ini``::
[main]
module = opensipkd.iso8583.bjb.pbb.agratek
db_url = postgresql://user:pass@localhost/db
db_url = postgresql://user:pass@localhost/agratek
Buat tabel terkait pencatatan transaksi::
$ ~/env/bin/iso8583_bjb_pbb_agratek_initdb test-agratek-initdb.ini
Jalankan::
Lalu jalankan ini terkait transaksi Samsat yang melalui BJB web service::
$ ~/env/bin/iso8583_bjb_pbb_agratek initdb-agratek.ini
$ ~/env/bin/pip install git+https://git.opensipkd.com/sugiana/bjb-web-service.git
Lalu buatlah file ``test-agratek-h2h.ini``::
Lalu buatlah file ``test-agratek.ini``::
[app:main]
use = egg:iso8583_web
pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = id
pyramid.includes =
opensipkd.views.bjb.linkaja
pyramid_linkaja
sqlalchemy.url = postgresql://user:pass@localhost/agratek
sqlalchemy.pool_pre_ping = true
sqlalchemy.pool_size = 50
sqlalchemy.max_overflow = 100
timezone = Asia/Jakarta
localization = id_ID.UTF-8
[server:main]
use = egg:waitress#main
listen = 0.0.0.0:7001
threads = 12
[loggers]
keys = root, iso8583_web
......@@ -453,30 +492,11 @@ Lalu buatlah file ``test-agratek.ini``::
[formatter_generic]
format = %(asctime)s %(levelname)s %(message)s
[web]
port = 7001
threads = 12
[web_linkaja]
route_path = /linkaja
module = iso8583_web.scripts.views.linkaja
host = bjb
timeout = 30
db_url = postgresql://user:pass@localhost/db
allowed_ip =
127.0.0.1
10.8.30.1
# Notification Message sesuai prefix Invoice ID
notification_message =
3271:PBB Kota Bogor
3676:PBB Kota Tangerang Selatan
3275:PBB Kota Bekasi
[host_bjb]
ip = 127.0.0.1
port = 10001
port = 10504
listen = false
timeout = 15
timeout = 240
streamer = bjb
module = opensipkd.iso8583.bjb.pbb.agratek
request_bits =
......@@ -484,6 +504,7 @@ Lalu buatlah file ``test-agratek.ini``::
18:6025
22:010
32:015
33:00110
35:622011888888888888=9912?
41:AGRATEK
42:LINKAJA
......@@ -494,46 +515,48 @@ Lalu buatlah file ``test-agratek.ini``::
# Bit 60 diisi sesuai prefix bit 61 (Invoice ID)
bit_60 =
3271:123
3676:142
3275:120
3278:133
3619:145
3675:122
Buat tabelnya::
Buat tabel terkait web service::
$ ~/env/bin/init_db_linkaja test-agratek.ini
$ ~/env/bin/initialize_iso8583_web_db test-agratek-h2h.ini
Jalankan daemon-nya::
$ ~/env/bin/iso8583 test-agratek.ini
$ ~/env/bin/pserve test-agratek-h2h.ini
Restart daemon-nya. Buka terminal ke-4 dan coba inquiry::
Buka terminal ke-4 dan coba inquiry::
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:7001/linkaja --invoice-id=3271010001007002701995
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:7001/linkaja/pbb --invoice-id=3271010001007002701995
Hasilnya::
2020-07-19 06:17:17.944 Request: {'merchant': 'ldm***1', 'terminal': 'Terminal Name', 'pwd': 'ldm***ss', 'msisdn': '628111234567', 'acc_no': '3271010001007002701995', 'trx_date': '20200719061717', 'trx_type': '021'}
2020-07-19 06:17:18.604 Response 200: ['00:UW** *****SNA:19536:16:'] -> {'Response Code': '00', 'Biller Name': 'UW** *****SNA', 'Bill Amount': '19536', 'Bill Ref': '16', 'Notification Message': ''}
2020-07-19 06:17:18.609 thread 1 0.654482364654541 detik 00:UW** *****SNA:19536:16:
2020-07-19 06:17:18.604 Response 200: ['00:NOP 327101000100700270 Tahun 1995, MIT*** SEM***, PT, Luas Tanah 135, Luas Bangunan 45, Pok 178320, Den 85594, Disk 85594, BALUMBANG JAYA, BOGOR BARAT, SUBANG LARANG II,B/VIII/5,RT 000/00:178320:16:PBB Kota Bogor'] -> {'Response Code': '00', 'Biller Name': 'NOP 3271***', 'Bill Amount': '178320', 'Bill Ref': '16', 'Notification Message': 'PBB Kota Bogor'}
2020-07-19 06:17:18.609 thread 1 0.654482364654541 detik 00:NOP 3271***:178320:16:
2020-07-19 06:17:18.609 Tidak ada yang gagal
Pastikan ``Response Code`` bernilai ``00`` yang menandakan tagihan siap
dibayar. Lanjut ``--payment``, kali ini sertakan ``--bill-ref`` dan
``--amount`` yang diperoleh dari *inquiry response*::
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:7000/linkaja --invoice-id=3271010001007002701995 --payment --bill-ref=16 --amount=19536
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:7001/linkaja --invoice-id=3271010001007002701995 --payment --bill-ref=16 --amount=19536
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: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:00.333 Request: {'merchant': 'ldm***1', 'terminal': 'Terminal Name', 'pwd': 'ldm***ss', 'msisdn': '628111234567', 'acc_no': '3271010001007002701995', 'trx_date': '20200719062100', 'trx_type': '022', 'amount': 178320, 'bill_ref': '16', 'trx_id': '0719062100'}
2020-07-19 06:21:01.056 Response 200: ['00:010123882462:16:NOP 327101000100700270 Tahun 1995, MIT*** SEM***, PT, Luas Tanah 135, Luas Bangunan 45, Pok 178320, Den 85594, Disk 85594, BALUMBANG JAYA, BOGOR BARAT, SUBANG LARANG II,B/VIII/5,RT 000/00'] -> {'Response Code': '00', 'Transaction ID': '010123882462', 'Bill Ref': '16', 'Notification Message': 'NOP 327101000100700270 Tahun 1995, MIT*** SEM***, PT, Luas Tanah 135, Luas Bangunan 45, Pok 178320, Den 85594, Disk 85594, BALUMBANG JAYA, BOGOR BARAT, SUBANG LARANG II,B/VIII/5,RT 000/00'}
2020-07-19 06:21:01.061 thread 1 0.717498779296875 detik 00:010123882462:16:NOP 327101000100700270 Tahun 1995, MIT*** SEM***, PT, Luas Tanah 135, Luas Bangunan 45, Pok 178320, Den 85594, Disk 85594, BALUMBANG JAYA, BOGOR BARAT, SUBANG LARANG II,B/VIII/5,RT 000/00
2020-07-19 06:21:01.061 Tidak ada yang gagal
Lagi, pastikan ``Response Code`` bernilai ``00`` yang berarti pembayaran
berhasil. Lanjut coba reversal, kali ini sertakan ``--trx-id`` yang diperoleh dari
*payment request*::
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:7000/linkaja --invoice-id=3271010001007002701995 --reversal --bill-ref=16 --amount=19536 --trx-id=0719062100
$ ~/env/bin/iso8583_web_client_linkaja --url=http://127.0.0.1:7001/linkaja --invoice-id=3271010001007002701995 --reversal --bill-ref=16 --amount=19536 --trx-id=0719062100
Hasilnya::
......
......@@ -16,6 +16,8 @@ pyramid.includes =
sqlalchemy.url = postgresql://user:pass@localhost/db
sqlalchemy.pool_pre_ping = true
sqlalchemy.pool_size = 50
sqlalchemy.max_overflow = 100
timezone = Asia/Jakarta
localization = id_ID.UTF-8
......@@ -53,7 +55,7 @@ threads = 12
[host_bjb]
ip = 127.0.0.1
port = 10001
port = 10504
listen = false
timeout = 15
streamer = bjb
......@@ -74,8 +76,10 @@ request_bits =
# Bit 60 diisi sesuai prefix bit 61 (Invoice ID)
bit_60 =
3271:123
3676:142
3275:120
3278:133
3619:145
3675:122
###
# Log
......
nama,nilai,keterangan
linkaja allowed ip,127.0.0.1 10.8.50.22 10.14.0.203 10.11.0.118 10.11.0.35 202.43.164.162,list lebih dari satu pisahkan dengan spasi. 0.0.0.0 berarti boleh semua.
linkaja pbb prefix id 3271,PBB Kota Bogor
linkaja pbb prefix id 3676,PBB Kota Tangerang
linkaja pbb prefix id 3275,PBB Kota Bekasi
linkaja pbb prefix id 3278,PBB Kota Depok
linkaja pbb prefix id 3619,PBB Kabupaten Tangerang
linkaja pbb prefix id 3675,PBB Kota Tangerang
linkaja pbb to iso8583,bjb,Route ke section [host_bjb] di file konfigurasi
linkaja sambat aggregator code,W0227
linkaja sambat bank base url,http://localhost:8080/sam-core-app2/rest/SAMWebService
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!