Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, Request,HTTPException | |
| from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials | |
| from fastapi.requests import Request | |
| import yaml | |
| from typing import Dict | |
| from fastapi.responses import RedirectResponse | |
| from service import CallBackService | |
| import json | |
| from fastapi.responses import JSONResponse | |
| from models.Database_Entity import PaymentCallbackLog | |
| with open("config.yaml", "r") as f: | |
| config = yaml.safe_load(f) | |
| base_backend_java = config["callback_urls"] | |
| base_frontend = config["frontend"] | |
| router = APIRouter() | |
| class JWTBearer(HTTPBearer): | |
| def __init__(self, auto_error: bool = True): | |
| super(JWTBearer, self).__init__(auto_error=auto_error) | |
| async def __call__(self, request: Request): | |
| credentials: HTTPAuthorizationCredentials = await super(JWTBearer, self).__call__(request) | |
| if credentials: | |
| if credentials.scheme != "Bearer": | |
| raise HTTPException(status_code=401, detail="Invalid authentication scheme.") | |
| return credentials.credentials | |
| else: | |
| raise HTTPException(status_code=401, detail="Invalid authorization code.") | |
| jwt_bearer = JWTBearer() | |
| async def zalo_callback_post(request: Request): | |
| try: | |
| json_data = await request.json() | |
| data_str =json_data.get("data") | |
| if data_str: | |
| data_dict = json.loads(data_str) | |
| app_trans_id = data_dict.get("app_trans_id") | |
| PaymentCallbackLog( | |
| type="zalopay", | |
| app_trans_id=data_dict.get("app_trans_id"), | |
| raw_data=data_dict, | |
| status="success" if data_dict.get("status") == "1" else "fail", | |
| is_refund = False | |
| ).save() | |
| print(app_trans_id) | |
| data = await CallBackService.zalo_callback(str(app_trans_id)) | |
| return data | |
| except Exception as e: | |
| print("Lỗi khi gọi callback web zalo:", e) | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) | |
| async def zalo_callback_post(request: Request): | |
| try: | |
| json_data = await request.json() | |
| data_str =json_data.get("data") | |
| if data_str: | |
| data_dict = json.loads(data_str) | |
| app_trans_id = data_dict.get("app_trans_id") | |
| PaymentCallbackLog( | |
| type="zalopay", | |
| app_trans_id=data_dict.get("app_trans_id"), | |
| raw_data=data_dict, | |
| status="success" if data_dict.get("status") == "1" else "fail", | |
| is_refund = False | |
| ).save() | |
| print(app_trans_id) | |
| data = await CallBackService.zalo_group_callback(str(app_trans_id)) | |
| return data | |
| except Exception as e: | |
| print("Lỗi khi gọi callback group ảndroid zalo:", e) | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) | |
| async def return_url_handler(code: str = None, id: str = None, cancel: bool = None, status: str = None, orderCode: str = None): | |
| try: | |
| return await CallBackService.android_payos_callback(status,orderCode) | |
| except Exception as e: | |
| print("Lỗi khi gọi callback android payos:", e) | |
| # Trả về lỗi 500 - Internal Server Error | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) | |
| async def return_url_handler1(code: str = None, id: str = None, cancel: bool = None, status: str = None, orderCode: str = None): | |
| try: | |
| return await CallBackService.android_group_payOs_callback(status,orderCode) | |
| except Exception as e: | |
| print("Lỗi khi gọi callback group payos:", e) | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) | |
| async def return_url_handler(code: str = None, id: str = None, cancel: bool = None, status: str = None, orderCode: str = None): | |
| try: | |
| return await CallBackService.web_payos_callback(code, id, cancel, status, orderCode) | |
| except Exception as e: | |
| print("Lỗi khi gọi callback web payos:", e) | |
| # Trả về lỗi 500 - Internal Server Error | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) | |
| async def return_url_handler(request: Request): | |
| json_data = await request.json() | |
| print(json_data) | |
| data_str =json_data.get("data") | |
| order_id_original = json_data.get("orderId") | |
| order_id = "" | |
| if order_id_original.startswith("MOMO-"): | |
| order_id = order_id_original[len("MOMO-"):] | |
| result_code = json_data.get("resultCode") | |
| PaymentCallbackLog( | |
| type="momo", | |
| order_id=order_id, | |
| raw_data=json_data, | |
| status="success" if result_code == 0 else "fail", | |
| is_refund = False | |
| ).save() | |
| print(data_str) | |
| try: | |
| result = await CallBackService.momo_callback(order_id_original,result_code) | |
| print(result) | |
| except Exception as e: | |
| print("Lỗi khi gọi call back android momo:", e) | |
| if 0 != int(result_code): | |
| return RedirectResponse(url=f"{base_frontend['android_redirect_base']}?status=-49") | |
| else : | |
| return RedirectResponse(url=f"{base_frontend['android_redirect_base']}?status=1") | |
| async def return_url_handler(request: Request): | |
| json_data = await request.json() | |
| print(json_data) | |
| data_str =json_data.get("data") | |
| order_id = json_data.get("orderId") | |
| if order_id.startswith("MOMO-"): | |
| order_id = order_id[len("MOMO-"):] | |
| result_code = json_data.get("resultCode") | |
| print(data_str) | |
| PaymentCallbackLog( | |
| type="momo", | |
| order_id=order_id, | |
| raw_data=json_data, | |
| status="success" if result_code == 0 else "fail", | |
| is_refund = False | |
| ).save() | |
| try: | |
| result = await CallBackService.momo_group_callback(order_id,result_code) | |
| print(result) | |
| except Exception as e: | |
| print("Lỗi khi gọi callback android group momo:", e) | |
| if 0 != int(result_code): | |
| return RedirectResponse(url=f"""{base_frontend["android_group_redirect_base"]}?status=-49""") | |
| else : | |
| return RedirectResponse(url=f"""{base_frontend["android_group_redirect_base"]}?status=1""") | |
| async def vnpay_ipn(request: Request): | |
| params: Dict[str, str] = dict(request.query_params) | |
| # Lưu callback vnpay | |
| PaymentCallbackLog( | |
| type="vnpay", | |
| txn_ref=params.get("vnp_TxnRef"), | |
| raw_data=params, | |
| status="success" if params.get("vnp_ResponseCode") == "00" else "fail", | |
| is_refund = False | |
| ).save() | |
| try: | |
| return await CallBackService.vnpay_callbackk(params) | |
| except Exception as e: | |
| print("Lỗi khi gọi callback vnpay:", e) | |
| # Trả về lỗi 500 - Internal Server Error | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) | |
| async def vnpay_ipn(request: Request): | |
| params: Dict[str, str] = dict(request.query_params) | |
| # Lưu callback vnpay | |
| PaymentCallbackLog( | |
| type="vnpay", | |
| txn_ref=params.get("vnp_TxnRef"), | |
| raw_data=params, | |
| status="success" if params.get("vnp_ResponseCode") == "00" else "fail", | |
| is_refund = False | |
| ).save() | |
| try: | |
| return await CallBackService.vnpay_group_callback(params) | |
| except Exception as e: | |
| print("Lỗi khi gọi callback group vnpay ipn:", e) | |
| # Trả về lỗi 500 - Internal Server Error | |
| return JSONResponse(content={"error": "Internal server error"}, status_code=500) |