P

pyramid-snap

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.