
Research
Security News
The Growing Risk of Malicious Browser Extensions
Socket researchers uncover how browser extensions in trusted stores are used to hijack sessions, redirect traffic, and manipulate user behavior.
A simple library to manage Satispay payments following the Web-button flow.
cryptography
>= 3.3httpx
>= 0.16You 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')
:information_source: 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.
:information_source: 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')
Both 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()
.
:information_source: 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)
:information_source: The token is the activation code that can be generated from the Satispay Dashboard (or provided manually for Sandbox account).
:warning: Tokens are disposable! The key-id should be saved right after its creation.
response = satispaython.test_authentication(key_id, rsa_key)
:information_source: 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 = satispaythonsatispaython.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)
FAQs
A simple library to manage Satispay payments following the Web-button flow.
We found that satispaython demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover how browser extensions in trusted stores are used to hijack sessions, redirect traffic, and manipulate user behavior.
Research
Security News
An in-depth analysis of credential stealers, crypto drainers, cryptojackers, and clipboard hijackers abusing open source package registries to compromise Web3 development environments.
Security News
pnpm 10.12.1 introduces a global virtual store for faster installs and new options for managing dependencies with version catalogs.