Download app/api/billing.py from Himankpro/Sub: direct link, hf CLI and curl.
- Browser
- Download file 3.51 kB
-
https://huggingface.co/spaces/Himankpro/Sub/resolve/main/app/api/billing.py
- Command line
-
hf download hf://spaces/Himankpro/Sub/app/api/billing.py
-
curl -L -o billing.py https://huggingface.co/spaces/Himankpro/Sub/resolve/main/app/api/billing.py
3.51 kB
| """Razorpay + coupon unlock for /api/pipeline/start.""" | |
| from flask import request, jsonify | |
| from . import billing_bp | |
| from ..config import Config | |
| from ..services import billing_service | |
| from ..utils.logger import get_logger | |
| logger = get_logger("mirofish.api.billing") | |
| def billing_status(): | |
| if not Config.billing_enabled(): | |
| return jsonify( | |
| { | |
| "success": True, | |
| "data": { | |
| "enabled": False, | |
| "key_id": None, | |
| "amount": None, | |
| "currency": None, | |
| }, | |
| } | |
| ) | |
| data = { | |
| "enabled": True, | |
| "key_id": Config.RAZORPAY_KEY_ID or None, | |
| "amount": Config.RAZORPAY_AMOUNT_PAISE if Config.RAZORPAY_KEY_SECRET else None, | |
| "currency": Config.RAZORPAY_CURRENCY if Config.RAZORPAY_KEY_SECRET else None, | |
| "coupons_enabled": bool(Config.payment_coupon_set()), | |
| } | |
| return jsonify({"success": True, "data": data}) | |
| def billing_create_order(): | |
| try: | |
| if not (Config.RAZORPAY_KEY_ID and Config.RAZORPAY_KEY_SECRET): | |
| return jsonify({"success": False, "error": "Razorpay is not configured"}), 503 | |
| order = billing_service.create_razorpay_order() | |
| return jsonify({"success": True, "data": order}) | |
| except Exception as e: | |
| logger.error("create-order: %s", e) | |
| return jsonify({"success": False, "error": str(e)}), 500 | |
| def billing_verify_payment(): | |
| try: | |
| if not (Config.RAZORPAY_KEY_ID and Config.RAZORPAY_KEY_SECRET): | |
| return jsonify({"success": False, "error": "Razorpay is not configured"}), 503 | |
| body = request.get_json(silent=True) or {} | |
| oid = (body.get("razorpay_order_id") or "").strip() | |
| pid = (body.get("razorpay_payment_id") or "").strip() | |
| sig = (body.get("razorpay_signature") or "").strip() | |
| if not oid or not pid or not sig: | |
| return jsonify({"success": False, "error": "Missing payment fields"}), 400 | |
| if not billing_service.verify_razorpay_payment_signature(oid, pid, sig): | |
| return jsonify({"success": False, "error": "Invalid payment signature"}), 400 | |
| token = billing_service.issue_simulation_payment_token(via="razorpay") | |
| return jsonify({"success": True, "data": {"simulation_payment_token": token}}) | |
| except Exception as e: | |
| logger.error("verify-payment: %s", e) | |
| return jsonify({"success": False, "error": str(e)}), 500 | |
| def billing_apply_coupon(): | |
| try: | |
| if not Config.payment_coupon_set(): | |
| return jsonify({"success": False, "error": "Coupons are not configured"}), 503 | |
| body = request.get_json(silent=True) or {} | |
| code = body.get("code") or body.get("coupon") or "" | |
| if not billing_service.coupon_valid(str(code)): | |
| return jsonify({"success": False, "error": "Invalid coupon code"}), 400 | |
| token = billing_service.issue_simulation_payment_token(via="coupon") | |
| return jsonify({"success": True, "data": {"simulation_payment_token": token}}) | |
| except Exception as e: | |
| logger.error("apply-coupon: %s", e) | |
| return jsonify({"success": False, "error": str(e)}), 500 | |