Metadata-Version: 2.1
Name: snapapi
Version: 0.1.6
Summary: Framework/tookit berbasis pydantic dan FastAPI untuk implementasi SNAP (Standar Nasional Open API Pembayaran) Indonesia
Keywords: snap,pg,payment gateway,bank,api
Author-Email: S Deta Harvianto <sdetta@gmail.com>
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python
Classifier: Topic :: Internet
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development
Classifier: Typing :: Typed
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: FastAPI
Classifier: Framework :: Pydantic
Classifier: Framework :: Pydantic :: 2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Internet :: WWW/HTTP
Project-URL: Homepage, https://github.com/sdettahar/snapapi
Project-URL: Repository, https://github.com/sdettahar/snapapi
Project-URL: Issues, https://github.com/sdettahar/snapapi/issues
Requires-Python: >=3.8
Requires-Dist: starlette<0.47.0,>=0.40.0
Requires-Dist: pydantic<3.0.0,>=2.10.6
Requires-Dist: typing-extensions>=4.12.2
Requires-Dist: fastapi>=0.115.10
Requires-Dist: PyJWT>=2.9.0
Requires-Dist: pycryptodome>=3.21.0
Requires-Dist: ulid-py>=1.1.0
Description-Content-Type: text/markdown

# SNAP-API
Framework/tookit berbasis pydantic dan FastAPI untuk implementasi SNAP (Standar Nasional Open API Pembayaran) Indonesia


## Transaksi
Virtual Account:
1.  Inquiry, Service Code '24'
2.  Payment, Service Code '25'

Iya, masih banyak Transaksi yang harus dibuat Modelnya :)


## Python
`snapapi` dibuat dengan menggunakan Python versi 3.8.20, semoga bisa digunakan dibanyak OS yang mungkin masih belum support python terbaru.

`snapapi` menggunakan type hints yang diverifikasi dengan `mypy`.


### Dependency
SNAP-API membutuhkan module sbb:
1.  `pydantic` https://pydantic.dev  
    Dasar dari validasi model agar sesuai dengan spesifikasi yang telah ditetapkan oleh Bank Indonesia dan ASPI (Asosiasi Sistem Pembayaran Indonesia)

2.  `pycryptodome` https://www.pycryptodome.org  
    Digunakan untuk membuat dan meverifikasi Asymmetric Signature dengan algorithma SHA256withRSA

3.  `PyJWT` https://pyjwt.readthedocs.io/en/latest  
    Dibutuhkan untuk membuat dan meverifikasi Access Token berbasis JWT

4.  `fastapi` https://fastapi.tiangolo.com  
    Lighweight and fast framework API berdasarkan OpenAPI

5.  `asyncer` https://asyncer.tiangolo.com  
    Thin layer module di atas `anyio` agar membuat sync method (spt `class Crypto`) menjadi async


### Optional
1.  `uvicorn` https://www.uvicorn.org  
    ASGI web server

2.  `aiocache` https://aiocache.aio-libs.org/en/latest  
    Digunakan untuk cache key X-External-Id pada API Transaksi. Backend untuk store keys bisa dipilih antara `memcached`, `redis` atau `memory`

3.  `orjson` https://github.com/ijl/orjson  
    Pengganti yang lebih baik daripada standar `json`


## Cara Pakai
Install package dengan pip.

```shell

$ pip install snapapi

```

Import `class SNAP-API` kemudian instantiate sama seperti `class FastAPI`, karena `class IDSAP` merupakan subclass dari `class FastAPI`.

```python

app = SNAP-API(
        title='SNAP-API Demo',
        version="0.1.1",
        description="""
### Standar Nasional Open API Pembayaran Versi 1.0.2
> Flow Inbound (Direct): Bank -> API
""")

```

Silakan lihat direktori `app/demo` untuk contoh implementasi. 
Untuk menjalankan aplikasi Demo, silakan baca `app/README.md` dan ikuti petunjuknya.


## Future Development
Module SNAP-API dibuat berdasarkan kebutuhan project profesional developer untuk implementasi SNAP dengan flow Inbound atau Direct; Bank -> API

> Bank yang melakukan initiate query (`inquiry` dan `payment`) untuk Virtual Account
> dimana Bill, Virtual Account dan Customer management dilakukan oleh Backend terlepas dari API ini.

Jadi module ini cukup jika digunakan untuk skenario di atas. Agar compliance dengan SNAP, masih banyak skenario yang harus diimplementasi.

Fokus pengembangan module ini adalah:
1.  Mengikuti perkembangan SNAP supaya compliance setiap kali ada versi terbaru.
2.  Implementasi Model lain agar sesuai dengan dokumentasi SNAP, terutama melengkapi fitur Virtual Account.
3.  Refactoring fitur yang sudah ada supaya lebih ringan, tidak terlalu banyak dependency, dan mudah digunakan.
4.  Tambah fitur seperti Logger (agar compliance dengan SNAP), API untuk Backend, dll.