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.