A simple library to manage Satispay payments following the Web-button flow.
cryptography
>= 3.4httpx
>= 0.16
You can install this package with pip: pip install satispaython
.
Type hints are available for all public functions.
First of all you need a RSA private key. You may generate the key by yourself or you may use the provided utility functions:
from satispaython.utils.utils import generate_key, write_key
# Generate a key
rsa_key = generate_key()
# Write the key into a file
write_key(rsa_key, 'path/to/file.pem')
# You can also generate a key and save it directly to a provided path
rsa_key = generate_key('path/to/file.pem')
In order to load the key from a PEM encoded file you may use the utility function:
from satispaython.utils.utils import load_key
rsa_key = load_key('path/to/file.pem')
ℹ️ The function
write_key
stores the key in the PEM format. If you generate the key with any other method and you would like to use theload_key
function, please make sure the key is stored within a file in the PEM format.
ℹ️ Satispaython key management is based on
cryptography
so all the functions which require an RSA key parameter expect an object of the classRSAPrivateKey
. If you don't use theload_key
function then make sure your key is an instance ofRSAPrivateKey
.
You may protect your key with a password simply adding the password
parameter:
write_key(rsa_key, 'path/to/file.pem', 'mypassword')
rsa_key = load_key('path/to/file.pem', 'mypassword')
rsa_key = generate_key('path/to/file.pem', 'mypassword')
These functions accept PathLike
objects:
from pathlib import Path
path = Path('path/to/file.pem')
rsa_key = generate_key(path, 'mypassword')
write_key(rsa_key, path, 'mypassword')
rsa_key = load_key(path, 'mypassword')
Satispaython web requests are based on httpx
so the following functions return an instance of Response
. On success, the Satispay API responds with a JSON encoded body, so you can simply check for the response.status_code
and eventually get the content with response.json()
.
ℹ️ If you need to use the Sandbox endpoints be sure to read the proper section.
In order to use the Satispay API simply import satispaython:
import satispaython
Then you can:
response = satispaython.obtain_key_id(token, rsa_key)
ℹ️ The token is the activation code that can be generated from the Satispay Dashboard (or provided manually for Sandbox account).
⚠️ Tokens are disposable! The key-id should be saved right after its creation.
response = satispaython.test_authentication(key_id, rsa_key)
ℹ️ Authentication tests work on Sandbox endpoints only.
response = satispaython.create_payment(key_id, rsa_key, amount_unit, currency, body_params=None, headers=None)
You may use the utility function format_datetime
to get a correctly formatted expiration_date
to supply to the request:
from datetime import datetime, timezone, timedelta
from satispaython.utils.utils import format_datetime
expiration_date = datetime.now(timezone.utc) + timedelta(hours=1)
expiration_date = format_datetime(expiration_date)
response = satispaython.get_payment_details(key_id, rsa_key, payment_id, headers=None)
By default satispaython points to the production Satispay API. If you need to use the Sandbox endpoints, simply set the staging
parameter to True
:
response = satispaython.obtain_key_id(rsa_key, token, staging=True)
response = satispaython.create_payment(key_id, rsa_key, amount_unit, currency, body_params=None, headers=None, staging=True)
response = satispaython.get_payment_details(key_id, rsa_key, payment_id, headers=None, staging=True)
Satispaython offers specialized versions of httpx
's Client
, AsyncClient
and Auth
classes:
from satispaython import SatispayClient
with SatispayClient(key_id, rsa_key, staging=True) as client:
response = client.create_payment(amount_unit, currency, body_params=None, headers=None)
response = client.get_payment_details(payment_id, headers=None)
from satispaython import AsyncSatispayClient
async with AsyncSatispayClient(key_id, rsa_key, staging=True) as client:
response = await client.create_payment(amount_unit, currency, body_params=None, headers=None)
response = await client.get_payment_details(payment_id, headers=None)
import httpx
from satispaython import SatispayAuth
auth = SatispayAuth(key_id, rsa_key)
url = 'https://staging.authservices.satispay.com/wally-services/protocol/tests/signature'
response = httpx.post(url, auth=auth)