From d594b3373f7db142d2d4b416cd5a10980ce28b5f Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Sat, 19 Oct 2024 01:45:56 +0500 Subject: [PATCH] fetching data works --- api.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 api.py diff --git a/api.py b/api.py new file mode 100644 index 0000000..78d658c --- /dev/null +++ b/api.py @@ -0,0 +1,70 @@ +from flask import Flask, request, jsonify +import subprocess +import json +from datetime import datetime, timedelta + +app = Flask(__name__) + +@app.route('/verify-payment', methods=['POST']) +def verify_payment(): + # Get data from request + data = request.json + benef_name = data.get('benefName') + abs_amount = data.get('absAmount') + time_str = data.get('time') + + # Validate input + if not all([benef_name, abs_amount, time_str]): + return jsonify({"success": False, "message": "Missing required parameters"}), 400 + + try: + # Parse the input time + request_time = datetime.strptime(time_str, "%Y-%m-%d %H:%M") + except ValueError: + return jsonify({"success": False, "message": "Invalid time format"}), 400 + + # Execute tx.sh and get the output + try: + result = subprocess.run(['./tx.sh'], capture_output=True, text=True, check=True) + tx_response = json.loads(result.stdout) + + # Debug: Print the entire tx_response + app.logger.debug(f"tx_response: {json.dumps(tx_response, indent=2)}") + + if not tx_response.get('success'): + return jsonify({"success": False, "message": f"Error from tx.sh: {tx_response.get('reasonText', 'Unknown error')}"}), 500 + + tx_data_list = tx_response.get('data', []) + if not tx_data_list: + return jsonify({"success": False, "message": "No transaction data found"}), 404 + + except subprocess.CalledProcessError as e: + return jsonify({"success": False, "message": f"Error executing tx.sh: {str(e)}", "stderr": e.stderr}), 500 + except json.JSONDecodeError as e: + return jsonify({"success": False, "message": f"Error parsing tx.sh output: {str(e)}", "output": result.stdout}), 500 + + # Check transactions + for tx_data in tx_data_list: + # Check if the required keys exist in tx_data + required_keys = ['trxDate', 'benefName', 'absAmount'] + missing_keys = [key for key in required_keys if key not in tx_data] + if missing_keys: + continue # Skip this transaction if it's missing required keys + + try: + tx_time = datetime.strptime(tx_data['trxDate'], "%Y-%m-%d %H:%M:%S") + time_diff = tx_time - request_time + + if (tx_data['benefName'] == benef_name and + str(tx_data['absAmount']) == str(abs_amount) and + timedelta(0) <= time_diff <= timedelta(minutes=30)): + return jsonify({"success": True, "message": "Payment verified"}) + except ValueError as e: + app.logger.error(f"Error processing transaction: {str(e)}") + continue # Skip this transaction if there's an error processing it + + # If we've checked all transactions and found no match + return jsonify({"success": False, "message": "Transaction not found, contact support"}) + +if __name__ == '__main__': + app.run(debug=True)