SNAP di Pyramid
Ini adalah landasan untuk penerapan SNAP di web framework Pyramid.
Kita bisa memasangnya langsung dengan cara:
$ ~/env/bin/pip install git+https://git.opensipkd.com/sugiana/pyramid-snap
Jika Anda ingin mengembangkannya maka unduh terlebih dahulu:
$ git clone https://git.opensipkd.com/sugiana/pyramid-snap $ cd pyramid-snap $ ~/env/bin/pip install -e .[dev]
Lakukan uji coba:
$ cd tests $ ~/env/bin/pytest
Pastikan tidak ada yang gagal.
Server
Merujuk pada dokumentasi Standar Keamanan SNAP maka client harus membuat private key dan public key. Private key digunakan client untuk meng-encrypt signature:
$ openssl genrsa -out private.pem 2048
Public key digunakan server untuk memvalidasi signature:
$ openssl rsa -in private.pem -pubout -out public.pem
Di paket ini kedua file tersebut sudah disediakan. Pasang aplikasi server:
$ ~/env/bin/pip install -e pyramid-snap/example/server/
Jalankan:
$ cd pyramid-snap/example/server $ ~/env/bin/pserve development.ini
Nanti dia listen di port 6543.
Client
Selanjutnya buka terminal lain untuk menjalankan client:
$ cd pyramid-snap/example/client $ ~/env/bin/python create_va.py --private-file=private.pem
Hasilnya seperti ini:
Request
URL: http://localhost:6543/v1.0/transfer-va/create-va
Headers: {
'X-TIMESTAMP': '2025-03-20T15:40:48+07:00',
'X-SIGNATURE': 'tFxzN0h1a...Tmf+iD5w==',
'X-PARTNER-ID': '1234'}
Body: {
'virtualAccountTrxType': 'C',
'customerNo': '081234567890',
'virtualAccountName': 'Jokul Doe',
'trxId': '154048',
'totalAmount': {'value': 10000, 'currency': 'IDR'},
'expiredDate': '2025-03-21T15:40:48+07:00',
'additionalInfo': {'channel': 'BRI'}}
Response
HTTP Status: 200
Headers: {
'Content-Length': '345',
'Content-Type': 'application/json',
'Date': 'Thu, 20 Mar 2025 08:40:48 GMT',
'Server': 'waitress',
'X-Timestamp': '2025-03-20T15:40:48+07:00'}
Body: {
'virtualAccountData': {
'virtualAccountTrxType': 'C',
'customerNo': '081234567890',
'virtualAccountName': 'Jokul Doe',
'trxId': '154048',
'totalAmount': {'value': 10000, 'currency': 'IDR'},
'expiredDate': '2025-03-21T15:40:48+07:00',
'additionalInfo': {'channel': 'BRI'},
'virtualAccountNo': '088993332660147'},
'responseCode': '2002700',
'responseMessage': 'Berhasil'}
Web server tadi adalah simulator Winpay server. Jadi kita juga bisa mengujinya dengan Winpay Client:
$ ~/env/bin/winpay_create_va --private-file=private.pem \ --partner-id=1234 --customer-no=08123456789 --va-name="Iwan Gunawan" \ --amount=10000 --channel=MANDIRI \ --url=http://localhost:6543/v1.0/transfer-va/create-va
Semoga dipahami.