Name Last Update
example Loading commit data...
pyramid_snap Loading commit data...
tests Loading commit data...
.gitignore Loading commit data...
README.rst Loading commit data...
pyproject.toml Loading commit data...

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.