Flask Integration¶
Complete example of integrating aiorobokassa with Flask.
Basic Setup¶
from flask import Flask, request, jsonify, redirect
from decimal import Decimal
from aiorobokassa import RoboKassaClient, SignatureError
app = Flask(__name__)
@app.route("/payment/create", methods=["POST"])
async def create_payment():
"""Create payment URL."""
data = request.json
order_id = data["order_id"]
amount = Decimal(data["amount"])
client = RoboKassaClient(
merchant_login="your_merchant_login",
password1="password1",
password2="password2",
)
try:
payment_url = client.create_payment_url(
out_sum=amount,
description=f"Payment for order #{order_id}",
inv_id=order_id,
)
return jsonify({"payment_url": payment_url})
finally:
await client.close()
@app.route("/payment/result", methods=["POST", "GET"])
async def handle_result_url():
"""Handle ResultURL notification."""
params = request.args.to_dict() if request.method == "GET" else request.form.to_dict()
client = RoboKassaClient(
merchant_login="your_merchant_login",
password1="password1",
password2="password2",
)
try:
parsed = client.parse_result_url_params(params)
client.verify_result_url(
out_sum=parsed["out_sum"],
inv_id=parsed["inv_id"],
signature_value=parsed["signature_value"],
shp_params=parsed.get("shp_params"),
)
# Update order status
return f"OK{parsed['inv_id']}"
except SignatureError:
return "ERROR"
finally:
await client.close()