Skip to content

Using with Python

This page covers typical server-side flows using the SDK.

Setup

from univapay import UnivapayConfig, UnivapayClient

cfg = UnivapayConfig().validate()
client = UnivapayClient(cfg, retries=1, backoff_factor=0.5)

Charges

from univapay.resources import ChargesAPI
from univapay.utils import make_idempotency_key

charges = ChargesAPI(client)

# One-time
ch = charges.create_one_time(
    token_id="token_from_widget",
    amount=12000,
    currency="jpy",
    capture=True,
    idempotency_key=make_idempotency_key("one_time"),
)

# Recurring (token_type=recurring)
ch2 = charges.create_recurring(
    token_id="recurring_token",
    amount=30000,
    currency="jpy",
)

# Read / wait
fetched = charges.get(ch.id)
final = charges.wait_until_terminal(ch.id, server_polling=True)

# Refund
refund = charges.refund(ch.id, amount=6000)

Subscriptions

from univapay.resources import SubscriptionsAPI

subs = SubscriptionsAPI(client)

# Create
s = subs.create(
    token_id="subscription_token",
    amount=59400,
    period="semiannually",
    currency="jpy",
)

# Read / wait
now = subs.get(s.id)
steady = subs.wait_until_terminal(s.id, server_polling=False, timeout_s=120)

# Cancel (with fallback termination_mode if /cancel is not available)
s2 = subs.cancel(s.id, termination_mode="immediate")

Tokens

from univapay.resources import TokensAPI

tokens = TokensAPI(client)
t = tokens.get("transaction_token_id")
print(t.id, t.token_type, t.status)

Webhooks

See Quickstart for a minimal Flask example. The SDK supports:

  • Signature verification (timestamped, sha256, raw hex)
  • Permissive event model that keeps unknown fields

Widgets

from univapay.widgets import (
    build_one_time_widget_config,
    build_subscription_widget_config,
    build_recurring_widget_config,
)

payload = build_subscription_widget_config(
    amount=59400,
    period="semiannually",
    form_id="form-sub",
    button_id="btn-sub",
    description="6 Month Plan",
    payment_methods={"card": True},
)

Next steps: