52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
from flask import Flask, request
|
|
import requests
|
|
import os
|
|
from datetime import datetime
|
|
|
|
app = Flask(__name__)
|
|
LOGFILE = "/home/doc/alerts/ipn.log"
|
|
|
|
TELEGRAM_BOT_TOKEN = "8178867489:AAH0VjN7VnZSCIWasSz_y97iBLLjPJA751k"
|
|
TELEGRAM_CHAT_ID = "1559582356"
|
|
|
|
def send_telegram_alert(message):
|
|
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
|
|
data = {"chat_id": TELEGRAM_CHAT_ID, "text": message}
|
|
try:
|
|
requests.post(url, data=data)
|
|
except Exception as e:
|
|
print(f"Telegram error: {e}")
|
|
|
|
@app.route("/ipn", methods=["POST"])
|
|
def handle_ipn():
|
|
ipn_data = request.form.to_dict()
|
|
now = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC")
|
|
|
|
payer_email = ipn_data.get("payer_email", "unknown")
|
|
item_name = ipn_data.get("item_name", "unspecified")
|
|
payment_status = ipn_data.get("payment_status", "unknown")
|
|
amount = ipn_data.get("mc_gross", "n/a")
|
|
txn_id = ipn_data.get("txn_id", "n/a")
|
|
|
|
summary = f"""
|
|
PayPal IPN Alert
|
|
Item: {item_name}
|
|
Email: {payer_email}
|
|
Amount: ${amount}
|
|
Status: {payment_status}
|
|
Txn ID: {txn_id}
|
|
Time: {now}
|
|
""".strip()
|
|
|
|
with open(LOGFILE, "a") as log:
|
|
log.write(summary + "\n")
|
|
|
|
if payment_status.lower() == "completed":
|
|
send_telegram_alert(summary)
|
|
|
|
return "OK", 200
|
|
|
|
if __name__ == "__main__":
|
|
os.makedirs(os.path.dirname(LOGFILE), exist_ok=True)
|
|
app.run(host="0.0.0.0", port=8090)
|