SDK oficial de Python para PlaceToPay Web Checkout.
Esta libreria te permite integrar pagos rapidamente: crear la sesion, redirigir al comprador y confirmar el resultado del pago desde tu servicio.
Terminología estándar del proyecto: ver ../docs/GLOSARIO.md.
Si vienes del SDK anterior de la comunidad, revisa
MIGRATION.mdpara una migracion guiada.
pip install placetopay-checkoutRequiere Python 3.13+.
| Versión SDK | Python | Estado | Parches de seguridad hasta |
|---|---|---|---|
1.x |
3.13, 3.14 | Actual | Hasta el siguiente major |
0.x |
- | Pre-release | End-of-life |
Política
- Soportamos la versión actual y la versión anterior de Python.
- Cambios breaking solo en major.
- Ruta de migración documentada en
MIGRATION.md.
En pocos pasos puedes crear una sesion y obtener el process_url para enviar
al comprador al checkout.
from placetopay.checkout import Checkout, Settings, Environment, Country
client = Checkout(Settings(
login="YOUR_LOGIN",
secret_key="YOUR_SECRET_KEY",
environment=Environment.SANDBOX,
country=Country.COLOMBIA,
))
response = client.create_session({
"ipAddress": "127.0.0.1",
"userAgent": "MyApp/1.0",
"returnUrl": "https://example.com/return",
"payment": {
"reference": "ORDER-0001",
"description": "Demo purchase",
"amount": {"currency": "COP", "total": 50_000},
},
})
print(response.process_url)
print(response.request_id)Después del pago:
info = client.query_session(response.request_id)
if info.status.status == "APPROVED":
# completar orden
...| Endpoint | Método | Notas |
|---|---|---|
POST /api/session |
create_session |
Soporta autopay, type, metadata, dispersion |
POST /api/session/{id} |
query_session |
|
POST /api/session/{id}/cancel |
cancel_session |
Nuevo vs SDK de referencia |
POST /api/collect |
collect |
Cobro con instrumento tokenizado |
POST /api/reverse |
reverse |
Por internalReference |
POST /api/instrument/invalidate |
invalidate_token |
Revoca token |
| Verificación webhook SHA-256 | verify_notification |
Recomendado |
| Verificación webhook SHA-1 | verify_notification_legacy |
Solo compatibilidad legacy |
Flujo de sesion (checkout web):
create_sessionpara iniciar el checkout y obtenerrequest_id+process_url.query_sessionpara confirmar estado despues del retorno del pagador.cancel_sessionpara invalidar una sesion pendiente cuando aplica.
Flujo de tokenizacion y post-pago:
collectpara cobrar con instrumento tokenizado.reversepara reversar porinternalReference.invalidate_tokenpara revocar el token.
- Soporte de
auth.additionalviaSettings.auth_additional. - Soporte de
CollectRequest.providerpara override opcional de procesador. - Helpers de estado en
StatusyTransaction(is_approved,is_rejected,is_error,is_successful). - Helpers de sesion en
SessionInformation(last_transaction,last_approved_transaction,last_authorization). - Compatibilidad con valores heterogeneos en
processorFields[].value.
- Checkout estandar en web con redireccion (
create_session+query_session). - Cobro con token guardado (
collect) para compras recurrentes. - Reversion de pagos (
reverse) y revocacion de token (invalidate_token).
- Ecuador: la funcionalidad
autopayno esta habilitada en WebCheckout para este pais. Si se envia encreate_session, puede ser rechazada por el gateway. - Ecuador: la recurrencia en pago unico no esta disponible actualmente.
- En respuestas de
query_session/collect,payment[].processorFields[].valuepuede llegar comostr,int,float,boolo objeto JSON. - El SDK acepta ese valor heterogeneo para evitar
ValidationErrorcuando el gateway envia metadatos no-string.
Campos de Settings:
| Campo | Tipo | Default | Uso |
|---|---|---|---|
login |
str |
requerido | Login de comercio |
secret_key |
str o SecretStr |
requerido | Secret de comercio |
environment |
Environment |
SANDBOX |
Sandbox/Producción |
country |
Country |
None |
Defaults de locale/currency/base URL |
base_url |
str |
- | Override explícito (solo HTTPS) |
timeout_connect |
float |
10 |
Timeout conexión |
timeout_read |
float |
30 |
Timeout lectura |
retry_max_attempts |
int |
3 |
Retries máximos |
retry_initial_delay_ms |
int |
200 |
Backoff inicial |
retry_max_delay_ms |
int |
5000 |
Tope de backoff |
user_agent_suffix |
str |
None |
Sufijo de user-agent |
additional_headers |
dict[str, str] |
{} |
Headers extra |
logger |
logging.Logger |
None |
DEBUG con payload redactado |
Todas las excepciones heredan de PlaceToPayError:
AuthenticationErrorValidationErrorNotFoundErrorRateLimitErrorNetworkErrorServerError
from placetopay.checkout import verify_notification
@app.post("/placetopay/webhook")
def webhook(payload: dict):
if not verify_notification(payload, secret_key=SECRET):
return ("invalid signature", 403)
# Safe to act on payloadLas notificaciones webhook de PlaceToPay están confirmadas sobre SHA-256.
La carpeta examples/ incluye una app FastAPI para probar los flujos end-to-end. Ver examples/README.md.
cd examples
pip install -r requirements.txt
cp .env.example .env
uvicorn app:app --reload
open http://localhost:8000- Firma: SHA-256.
- Nonce: 16 bytes criptográficos via
secrets.token_bytes(). - TLS: HTTPS obligatorio.
- Logging: redacción automática de PAN, CVV,
tranKey,nonce, token, PIN y password. - Disclosure: ver SECURITY.md.
git clone https://github.com/placetopay/checkout-python.git
cd checkout-python
pip install -e '.[dev]'
pytestVer CONTRIBUTING.md.
MIT, ver LICENSE.