from appservices.common.util import *
from appservices.common.payment_gateways.worldline_payment_gateway import *

web_hooks = Blueprint("web_hooks",__name__)
csrf.exempt(web_hooks)
# @web_hooks.route("/razor_pay_captured",methods=["POST"])
# def razor_pay_captured():



# Replace with your Razorpay webhook secret
# RAZORPAY_WEBHOOK_SECRET = 'your_razorpay_webhook_secret'
# RAZORPAY_WEBHOOK_SECRET = '8BWqVZQ0JBiSdH5RAz6SBXCZ'
RAZORPAY_WEBHOOK_SECRET = 'HFzSIvCXNs4llP2YSS2Jf70Q'


import hmac
import hashlib

def verify_webhook_signature(payload, signature, secret):
    expected_signature = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(signature, expected_signature)

@web_hooks.route('/razor_pay_webhook', methods=['POST','GET'])
def razor_pay_webhook():
    payload = request.get_data()
    signature = request.headers.get('X-Razorpay-Signature')

    print(signature)
    print("(((((((((((((((((((signature)))))))))))))))))))")
    print(payload)
    print("((((((((((((payload))))))))))))")


    try:
        # Verify the webhook signature
        # client.utility.verify_webhook_signature(payload, signature, RAZORPAY_WEBHOOK_SECRET)
        is_signature_valid = verify_webhook_signature(payload, signature, RAZORPAY_WEBHOOK_SECRET)

        wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
        if is_signature_valid:
            if payload.get('event') == 'order.paid':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                transactionId = payload['payload']['payment']['entity']['id']
                transactionData = [payload.get('payload',[])]
                if wallet_queryset.status == 1:
                    pass
                elif wallet_queryset.status == 0:
                    wallet_queryset.update(
                        # amount = wallet_queryset.amount,
                        transactionId = transactionId,
                        transactionData = transactionData,
                        orderId = order_id,
                        status = 1,
                        )
                    #Updating the user wallet balance
                    actuallBalance = user_queryset.walletBalance
                    updateAmount = float(actuallBalance)+wallet_queryset.amount
                    user_queryset.update(walletBalance = updateAmount)
            elif payload.get('event') == 'payment.failed':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                transactionId = payload['payload']['payment']['entity']['id']
                transactionData = [payload.get('payload',[])]
                if wallet_queryset.status == 1:
                    wallet_queryset.update(
                        # amount = wallet_queryset.amount,
                        transactionId = transactionId,
                        transactionData = transactionData,
                        orderId = order_id,
                        status = 0,
                        )
                    #Updating the user wallet balance
                    actuallBalance = user_queryset.walletBalance
                    updateAmount = float(actuallBalance)-wallet_queryset.amount
                    user_queryset.update(walletBalance = updateAmount)

                elif wallet_queryset.status == 0:
                    pass

            elif payload.get('event') == 'refund.create':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                amount = payload['payload']['refund']['entity']['amount']
                amount=float(amount/100)
                initiated_timestamp = payload['payload']['refund']['entity']['created_at']
                initiated_date = datetime.datetime.fromtimestamp(initiated_timestamp)
                refund_data = {
                "amount":amount,
                "initiated_date":initiated_date,
                }
                wallet_queryset.update(
                    refundData = refund_data,
                    status = 3 #For refund initiate
                    )

            elif payload.get('event') == 'refund.processed':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                amount = payload['payload']['refund']['entity']['amount']
                amount=float(amount/100)
                processed_timestamp = payload['payload']['refund']['entity']['created_at']
                processed_date = datetime.datetime.fromtimestamp(processed_timestamp)
                refund_data = wallet_queryset.refundData
                refund_data["processed_date"] = processed_date
                wallet_queryset.update(
                    refundData = refund_data,
                    status = 4 #For refund processed
                    )
                #Updating the user wallet balance
                actuallBalance = user_queryset.walletBalance
                updateAmount = float(actuallBalance)-wallet_queryset.amount
                user_queryset.update(walletBalance = updateAmount)

        else:
            raise ValueError('Invalid signature')

    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)}), 400


    # Handle the webhook event
    event = request.json
    # You can now process the 'event' object according to your requirements

    return jsonify({'status': 'success'})


@web_hooks.route('/moneyart_webhook', methods=['POST','GET'])
def moneyart_webhook(clientTxnRef,refId,Status,operatorRef):
    clientTxnRef = request.args.get('clientTxnRef')
    refId = request.args.get('refId')
    status = request.args.get('Status')
    operatorRef = request.args.get('operatorRef')

    print(clientTxnRef)
    print(refId)
    print(status)
    print(operatorRef)
    print("((((((((((((((((((((((((((((((((((((((((((((((moneyart_webhook))))))))))))))))))))))))))))))))))))))))))))))")

    try:
        transaction_queryset = Transactions.objects(transactionId=clientTxnRef,status__in=[1]).first()
        user_queryset = Users.objects(id=transaction_queryset.userId).first()
        # Success/Pending/Failure/Reversal

        if status == "Success":
            status = 1
            if transaction_queryset.status == 1: #Success
                pass
            elif transaction_queryset.status == 2: #Pending
                transaction_queryset.update(status=status)

            elif transaction_queryset.status == 0: #Failure
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )

                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                serviceName = transaction_queryset.serviceId.serviceName
                mobileNumber = transaction_queryset.mobileNumber
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount =amount,
                    paymentGatewayId = None,
                    creditType = "debit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = serviceName + " " + str(mobileNumber) + " is recharged with the amount of " + str(int(amount)) + ".",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)-float(amount)
                user_queryset.update(walletBalance = updateBalance)
        elif status == "Failure":
            status = 0
            if transaction_queryset.status == status: #wallet tranaction and transaction
                pass
            elif transaction_queryset.status in [1,2]: #Pending
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )

                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                serviceName = transaction_queryset.serviceId.serviceName
                mobileNumber = transaction_queryset.mobileNumber
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount = amount,
                    paymentGatewayId = None,
                    creditType = "credit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = str(int(amount)) + " Refunded successfully",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)+float(amount)
                user_queryset.update(walletBalance = updateBalance)

        elif status == "Pending":
            status = 2
            if transaction_queryset.status == 1:
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )
            elif transaction_queryset.status == 2:
                pass
            elif transaction_queryset.status == 0: #wallet tranaction and transaction
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )

                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                serviceName = transaction_queryset.serviceId.serviceName
                mobileNumber = transaction_queryset.mobileNumber
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount = amount,
                    paymentGatewayId = None,
                    creditType = "debit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = serviceName + " " + str(mobileNumber) + " is recharged with the amount of " + str(int(amount)) + ".",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)-float(amount)
                user_queryset.update(walletBalance = updateBalance)

        elif status == "Reversal":
            status = 3 #For refund
            if transaction_queryset.status == 0:
                pass
            elif transaction_queryset.status == 1 or transaction_queryset.status == 2:
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )
                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount = amount,
                    paymentGatewayId = None,
                    creditType = "credit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = str(int(amount)) + " Refunded successfully",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)+float(amount)
                user_queryset.update(walletBalance = updateBalance)

        return jsonify({'status': 'success'}) 


    except Exception as e:
        app.logger.error(traceback.format_exc())
        return jsonify({'status': 'error', 'message': str(e)}), 400


@web_hooks.route("/pay_in_webhook",methods=["POST"])
def pay_in_webhook():
    data_status = {"responseStatus":0,"result":""}
    orderId = request.json.get("orderId","")
    orderStatus = request.json.get("orderStatus","")
    status = request.json.get("status","")
    amount = request.json.get("amount","")
    transID = request.json.get("transID","")
    tdate = request.json.get("tdate","")
    billCurrency = request.json.get("billCurrency","")
    mop = request.json.get("mop","")
    response = request.json.get("response","")

    try:
        data_status["responseStatus"]=1
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        return data_status


# @webhooks.route("/payu_payment_response", methods=["POST"])
# def payu_payment_response():
#     data_status = {"responseStatus": 0, "result": ""}
#     userId=""
#     walletId=""
#     agent=""
#     try:
#         responseDict = request.form.to_dict()
        
#         txn_id = responseDict.get("txnid")
#         productinfo = responseDict.get("productinfo")

#         wallet_txn_query_set = WalletTransactions.objects(pgOrderId=txn_id).first()
#         walletId=str(wallet_txn_query_set.id)
#         if not wallet_txn_query_set:
#             print("wallet_txn_query_set error")
#             redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
#             return redirect(redirect_url)

#         cardmasked = ""
#         customerVpa = ""
#         cardType = str(wallet_txn_query_set.cardType)
#         jsonResponseDict = responseDict
#         agent=str(wallet_txn_query_set.agent)
#         payInPaymentGatewayId = wallet_txn_query_set.paymentGatewayId.id
#         autoSettlement = wallet_txn_query_set.paymentGatewayId.autoSettlement
#         status = wallet_txn_query_set.status
#         userId = str(wallet_txn_query_set.userId.id)

#         if agent=="web":
#             redirect_url = f"{domain}user/#/vendorpayment/{userId}/{walletId}"
#         else:
#             redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)

#         print("wallet_txn_query_set error2")
#         merchant_queryset = Users.objects(id=userId,status=1).first()

#         if jsonResponseDict and status == 3:
#             print("in if and status ==== 3 ")
#             # if wallet_txn_query_set.orderId != jsonResponseDict.get("txnid"):
#             #     data_status["result"]="Invalid Request!!"
#             #     return data_status

#             if jsonResponseDict.get("error")=="E000":
#                 errorMessage = jsonResponseDict.get("field9")
#             else:
#                 errorMessage = jsonResponseDict.get("Field9")
#             bankName=""
#             customerVpa=""
#             statusCheckId=str(jsonResponseDict.get("mihpayid"))
#             bankRefId=str(jsonResponseDict.get("bank_ref_num"))
#             pgOrderId=str(jsonResponseDict.get("txnid")) #doubt
#             paymentMode=str(jsonResponseDict.get("mode"))

#             currency="INR"
#             if jsonResponseDict.get("mode")=="UPI":
#                 customerVpa = jsonResponseDict.get("field1")

#             elif jsonResponseDict.get("mode")=="CC":
#                 paymentMode="CREDIT CARD"
#                 if cardType=="":
#                     cardType=jsonResponseDict.get("card_type")
#                 bankName=jsonResponseDict.get("issuing_bank")
#                 # customerVpa=jsonResponseDict.get("card_type")
#                 cardmasked=jsonResponseDict.get("cardnum")

#             elif jsonResponseDict.get("mode")=="DC":
#                 paymentMode="DEBIT CARD"
#                 if cardType=="":
#                     cardType=jsonResponseDict.get("card_type")
#                 cardmasked=jsonResponseDict.get("cardnum")

#             elif jsonResponseDict.get("mode")=="NB":
#                 paymentMode="NET BANKING"
#                 customerVpa="" ## doubt no vpa in NB 
#             # elif jsonResponseDict.get("mode")=="NEFT":
#             #     cardmasked=""
#             # elif jsonResponseDict.get("mode")=="AEPS":
#             #     cardmasked=""
#             # elif jsonResponseDict.get("mode")=="IMPS":
#             #     cardmasked=""
#             elif jsonResponseDict.get("mode")=="CASH": ### we dont have cash ?
#                 paymentMode="WALLET"
#                 customerVpa=""
#             else:
#                 paymentMode="CREDIT CARD"
#                 customerVpa=""




#         order_id = request.json.get("orderId", "")
#         payment_datetime = request.json.get("date","")
#         currency = request.json.get("currency", "INR")
#         amount = request.json.get("amount", "")
#         attempts = request.json.get("attempts", "")
#         transaction_id = request.json.get("uuid", "")
#         response_code = request.json.get("status", "")

#         transactionsList=request.json.get('transactions')
#         customerDict=request.json.get('customer')
#         name=customerDict.get('name')
#         phone=customerDict.get('phone')
#         email=customerDict.get('email')
#         bank_ref_id=""
#         paymentMode=""
#         cardType=""
#         cardmasked=""
#         issuingBank=""
#         customerVpa=""
#         payeeVpa=""  
#         requestData = [request.json]
#         save_api_webhook_logs_table = save_webhook_logs_data(None, "payin", "call_back", "lyra_payment_callback_url", None, requestData, "api", "")

#         errorMessage = ""
#         if response_code == "PAID":
#             transactionstatus = 1
#             errorMessage = "Success"
#             for each_transaction in transactionsList:
#                 if each_transaction.get('status')=="ACCEPTED":
#                     if each_transaction.get('family')=="CARD":
#                         if each_transaction.get('cardType')=="CREDIT":
#                             paymentMode="CREDIT CARD"
#                         else:
#                             paymentMode="DEBIT CARD"    
#                         bank_ref_id=each_transaction.get('externalId')
#                         cardmasked=each_transaction.get('cardLast4')
#                         issuingBank=each_transaction.get('issuingBank')
#                         if each_transaction.get('scheme')=="MASTERCARD":
#                             cardType="MAST"
#                         elif each_transaction.get('scheme')=="RUPAY":
#                             cardType="RUPAY"
#                         elif each_transaction.get('scheme')=="VISA":
#                             cardType="VISA"
#                         else:
#                             cardType=each_transaction.get('scheme')
#                     elif each_transaction.get('family')=="NET_BANKING":
#                         paymentMode="NET BANKING"
#                         bank_ref_id=each_transaction.get('externalId')
#                     elif each_transaction.get('family')=="UPI":
#                         paymentMode="UPI"
#                         bank_ref_id=each_transaction.get('rrn')
#                         customerVpa=each_transaction.get('payerVpa')
#                         payeeVpa=each_transaction.get('payeeVpa')
#                     else:
#                         bank_ref_id=each_transaction.get('externalId')
#         elif response_code == "DROPPED":
#             transactionstatus = 0
#             transactionCount=len(transactionsList)-1
#             errorMessage = transactionsList[transactionCount]['error']
#             payment_option=""
#             if 'payment_option' in transactionsList[transactionCount]:
#                 payment_option=transactionsList[transactionCount]['payment_option']
#             else:
#                 payment_option=transactionsList[transactionCount]['family']
#             if payment_option=="NET_BANKING":
#                 paymentMode="NET BANKING"
#                 bank_ref_id=transactionsList[transactionCount]['externalId']
#             elif payment_option=="UPI":
#                 paymentMode="UPI"
#                 bank_ref_id=transactionsList[transactionCount]['rrn']
#                 customerVpa=transactionsList[transactionCount]['payerVpa']
#                 payeeVpa=transactionsList[transactionCount]['payeeVpa']
#             elif payment_option=="CARD":
#                 if transactionsList[transactionCount]['cardType']=="CREDIT":
#                     paymentMode="CREDIT CARD"
#                 else:
#                     paymentMode="DEBIT CARD"
#                 cardmasked=transactionsList[transactionCount]['cardLast4']
#                 issuingBank=transactionsList[transactionCount]['issuingBank']
#                 bank_ref_id=""
#                 if transactionsList[transactionCount]['scheme']=="MASTERCARD":
#                     cardType="MAST"
#                 elif transactionsList[transactionCount]['scheme']=="RUPAY":
#                     cardType="RUPAY"
#                 elif transactionsList[transactionCount]['scheme']=="VISA":
#                     cardType="VISA"
#                 else:
#                     cardType=transactionsList[transactionCount]['scheme']
#         else:
#             transactionstatus = 3
#             errorMessage = "Pending"

#         lyra_callback_request_data = {
#         "transaction_id":transaction_id,
#         "payment_method":paymentMode,
#         "payment_datetime":payment_datetime,
#         "response_code":response_code,
#         "response_message":errorMessage,
#         "pgOrderId":order_id,
#         "client_order_id":order_id,
#         "amount":round(float(amount)/100,2),
#         "OrderAmount":round(float(amount)/100,2),
#         "currency":currency,
#         "description":"",
#         "name":name,
#         "email":email,
#         "phone":phone,
#         "address_line_1":"",
#         "address_line_2":"",
#         "city":"",
#         "state":"",
#         "country":"",
#         "zip_code":"",
#         "udf1":"",
#         "udf2":"",
#         "udf3":"",
#         "udf4":"",
#         "udf5":"",
#         "customer_vpa":customerVpa,
#         "cardType":cardType,
#         "cardmasked":cardmasked,
#         "issuingBank":issuingBank,
#         "payeeVpa":payeeVpa,
#         "apiMerchantId":"",
#         "transactionstatus":transactionstatus,
#         "errorMessage":errorMessage,
#         "hash":"",
#         "paymentChannel":"Lyra",
#         "bank_ref_id":bank_ref_id
#         }

#         print("(((((__________Lyra_pay_in_data_)))))",lyra_callback_request_data)
#         try:
#             callbackResponseData = payin_webhook_call_back_update(lyra_callback_request_data, save_api_webhook_logs_table)
#             data_status["responseStatus"] = callbackResponseData.get("responseStatus")
#             data_status["result"] = callbackResponseData.get("result")
#             return jsonify(data_status)
#         except Exception as e:
#             app.logger.error(traceback.format_exc())  # Keep the current log
#             app.logger.error(f"Error in processing Lyra callback: {e}")  # Add this line
#             data_status["result"] = f"Unable to process Lyra payment callback! Error: {str(e)}"
#             return jsonify(data_status)
#     except Exception as e:
#         app.logger.error(traceback.format_exc())  # Keep the current log
#         app.logger.error(f"Error in processing Lyra callback: {e}")  # Add this line
#         data_status["result"] = f"Unable to process Lyra payment callback! Error: {str(e)}"
#         return jsonify(data_status)





# @web_hooks.route("/payu_payment_response",methods=["POST"])
# def payu_payment_response():
#     data_status = {"responseStatus":0,"result":""}
#     userId=""
#     walletId=""
#     agent=""
#     try:
#         # responseDict = ""
#         responseDict = request.form.to_dict()
#         # responseDict = request.json
        
#         print("responseDict responseDictresponseDictresponseDict",responseDict)

#         txn_id = responseDict.get("txnid")
#         productinfo = responseDict.get("productinfo")

#         wallet_txn_query_set = WalletTransactions.objects(pgOrderId=txn_id).first()
#         walletId=str(wallet_txn_query_set.id)
#         if not wallet_txn_query_set:
#             print("wallet_txn_query_set error")
#             redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
#             return redirect(redirect_url)
#         cardmasked = ""
#         customerVpa = ""
#         cardType = str(wallet_txn_query_set.cardType)
#         jsonResponseDict = responseDict
#         agent=str(wallet_txn_query_set.agent)
#         payInPaymentGatewayId = wallet_txn_query_set.paymentGatewayId.id
#         autoSettlement = wallet_txn_query_set.paymentGatewayId.autoSettlement
#         status = wallet_txn_query_set.status
#         userId = str(wallet_txn_query_set.userId.id)

#         if agent=="web":
#             redirect_url = f"{domain}user/#/vendorpayment/{userId}/{walletId}"
#         else:
#             redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)

#         print("wallet_txn_query_set error2")
#         merchant_queryset = Users.objects(id=userId,status=1).first()

#         if jsonResponseDict and status == 3:
#             print("in if and status ==== 3 ")
#             # if wallet_txn_query_set.orderId != jsonResponseDict.get("txnid"):
#             #     data_status["result"]="Invalid Request!!"
#             #     return data_status

#             if jsonResponseDict.get("error")=="E000":
#                 errorMessage = jsonResponseDict.get("field9")
#             else:
#                 errorMessage = jsonResponseDict.get("Field9")
#             bankName=""
#             customerVpa=""
#             statusCheckId=str(jsonResponseDict.get("mihpayid"))
#             bankRefId=str(jsonResponseDict.get("bank_ref_num"))
#             pgOrderId=str(jsonResponseDict.get("txnid")) #doubt
#             paymentMode=str(jsonResponseDict.get("mode"))

#             currency="INR"
#             if jsonResponseDict.get("mode")=="UPI":
#                 customerVpa = jsonResponseDict.get("field1")

#             elif jsonResponseDict.get("mode")=="CC":
#                 paymentMode="CREDIT CARD"
#                 if cardType=="":
#                     cardType=jsonResponseDict.get("card_type")
#                 bankName=jsonResponseDict.get("issuing_bank")
#                 # customerVpa=jsonResponseDict.get("card_type")
#                 cardmasked=jsonResponseDict.get("cardnum")

#             elif jsonResponseDict.get("mode")=="DC":
#                 paymentMode="DEBIT CARD"
#                 if cardType=="":
#                     cardType=jsonResponseDict.get("card_type")
#                 cardmasked=jsonResponseDict.get("cardnum")

#             elif jsonResponseDict.get("mode")=="NB":
#                 paymentMode="NET BANKING"
#                 customerVpa="" ## doubt no vpa in NB 
#             # elif jsonResponseDict.get("mode")=="NEFT":
#             #     cardmasked=""
#             # elif jsonResponseDict.get("mode")=="AEPS":
#             #     cardmasked=""
#             # elif jsonResponseDict.get("mode")=="IMPS":
#             #     cardmasked=""
#             elif jsonResponseDict.get("mode")=="CASH": ### we dont have cash ?
#                 paymentMode="WALLET"
#                 customerVpa=""
#             else:
#                 paymentMode="CREDIT CARD"
#                 customerVpa=""

            
#             print(paymentMode,"((((((((((((((((paymentMode????????????))))))))))))))))")

#             ################################################### Slab Calculation for Payin #########################################################################
#             payment_mode_queryset = PaymentMode.objects(paymentMode=str(paymentMode)).first()
#             paymentModeId=""
#             subPaymentModeId=""
#             if payment_mode_queryset:
#                 paymentModeId = str(payment_mode_queryset.id)
#                 if cardType!="":
#                     subPaymentMode=cardType
#                     sub_payment_mode_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,subPaymentModeType=str(subPaymentMode)).first()
#                     if sub_payment_mode_queryset:
#                         subPaymentModeId = str(sub_payment_mode_queryset.id)
#                 else:
#                     subPaymentMode=paymentMode
#                     sub_payment_mode_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,subPaymentModeType=str(subPaymentMode)).first()
#                     if sub_payment_mode_queryset:
#                         subPaymentModeId = str(sub_payment_mode_queryset.id)

#                 if subPaymentModeId=="":
#                     subPaymentMode=paymentMode
#                     sub_payment_mode_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,subPaymentModeType=str(subPaymentMode)).first()
#                     if sub_payment_mode_queryset:
#                         subPaymentModeId = str(sub_payment_mode_queryset.id)
                

#             patternId = str(merchant_queryset.patternId.id)
#             # patternId = ""

#             amount = jsonResponseDict.get("amount")
           
#             if amount is None:
#                 amount = 0
#             else:
#                 amount = float(amount)

#             if amount < 0:
#                 return redirect(redirect_url)

#             slabId = None
#             transactionAmount = amount
#             commissionCharges={}
#             if paymentModeId!="" and subPaymentModeId!="" and payInPaymentGatewayId!="" and patternId!="":

#                 print(amount,"amount For Payu response API")
#                 print(paymentModeId,"paymentModeId For Payu response API")
#                 print(subPaymentModeId,"subPaymentModeId For Payu response API")
#                 print(patternId,"patternId For Payu response API")
#                 commissionCharges = slab_calculation_for_payin_merchant(amount,paymentModeId,subPaymentModeId,patternId)

#                 if commissionCharges.get("slabId") == None:
#                     slabId = None
#                     transactionAmount = amount
#                 else:
#                     slabId = commissionCharges.get("slabId")
#                     transactionAmount = float(commissionCharges.get("transactionAmount"))
#             print(slabId,"slabId For Payu response API")
#             #######################################################################################################################################################
#             print(commissionCharges,"((((((commissionCharges1))))))")
#             transactionData = [jsonResponseDict]
#             if jsonResponseDict.get("status") == "success":
#                 if float(wallet_txn_query_set.amount)==float(amount):
#                     status=1
#                 else:
#                     status = 6
#                     errorMessage = "Insufficient amount credited!!"
#                 lorder_queryset = WalletTransactions.objects(id=str(walletId),status__nin=[5]).first()
               
#                 if lorder_queryset.status!=1 and status==1:
#                     print(commissionCharges,"((((((commissionCharges2))))))")
#                     print("((((((in lorder_queryset check ))))))",str(merchant_queryset.id),"((((float(transactionAmount)))))",float(transactionAmount),"(((((str(payInPaymentGatewayId))))))",str(payInPaymentGatewayId))
#                     balanceResult=user_payin_balance_update(str(merchant_queryset.id),float(transactionAmount),"Credit",str(payInPaymentGatewayId))
#                     if balanceResult.get('responseStatus')==0:
#                         return redirect(redirect_url)
#                     print("((((((before PayinBalanceLogs check ))))))")
#                     payinbalancelogs_queryset=PayinBalanceLogs(
#                         transactionAPIId=str(payInPaymentGatewayId),
#                         userId=userId,
#                         previousBalance=round_last_digits(float(balanceResult.get('transactionPreviousBalance'))),
#                         currentBalance=round_last_digits(float(balanceResult.get('transactionCurrentBalance'))),
#                         orderId=str(wallet_txn_query_set.orderId),
#                         amount=round_last_digits(float(amount)),
#                         grandTotal=round_last_digits(float(transactionAmount)),
#                         transferType="Credit",
#                         userType="user",
#                         transactionId=str(wallet_txn_query_set.transactionId),
#                         createdOn=datetime.datetime.now(),
#                         status=1
#                         ).save()
#                     print("((((((before loader_queryset update check ))))))")
                    
#                     lorder_queryset.update(status=status,payInResponseCallBackData=transactionData,responseCallBackTime=datetime.datetime.now(),pgOrderId=pgOrderId,bankRefId=str(bankRefId),customerVpa=customerVpa,currency=currency,errorMessage=errorMessage,grandTotal=round_last_digits(float(transactionAmount)),walletLog="Wallet Balance is added with the amount of " + str(amount) + ".",previousBalance=round_last_digits(float(balanceResult.get('userPreviousBalance'))),cardmasked=cardmasked,subPaymentModeId=ObjectId(subPaymentModeId),paymentModeId=ObjectId(paymentModeId),paymentType=paymentMode,bankName=bankName,productName=productinfo,currentBalance=round_last_digits(float(balanceResult.get('userCurrentBalance'))),commissionCharges=commissionCharges,statusCheckId=statusCheckId)
#                     if autoSettlement==True:
#                         try:
#                             settlement_response=merchant_payin_auto_settlement(str(userId),str(walletId),str(payInPaymentGatewayId))
#                             print(settlement_response,"settlement_response")
#                             pass
#                         except Exception as e:
#                             pass
#                     try:
#                         merchantName = str(merchant_queryset.fullName)
#                         trnsactionDate = datetime.datetime.now().astimezone(ist_timezone).strftime("%d-%m-%Y %I:%M %p")
#                         mail_subject = "Load Funds for Graam Pay from Merchant " + merchantName + "."
#                         sender_mail_query = SenderMails.objects(status=1,mailType="Payin Transactions Mail").first()
#                         mail_data = {
#                         "merchantName":merchantName,
#                         "amount":formatINR("{:.2f}".format(float(amount))),
#                         "transactionId":str(wallet_txn_query_set.transactionId),
#                         "paymentMode":jsonResponseDict.get("mode"),
#                         "cardNumber":cardmasked,
#                         "orderId":str(wallet_txn_query_set.orderId),
#                         "bankRefId":str(bankRefId),
#                         "transactionDate":trnsactionDate,
#                         }
#                         if sender_mail_query:
#                             sendermailsList = sender_mail_query.mailsList
#                             recipients_list = sendermailsList
#                             template_name = "emails/loadfunds.html"
                            
#                             mailoutputData = send_asynchronous_email(mail_subject, recipients_list, template_name, mail_data)
                            
#                             merchant_mail_subject = "Payment Transaction Alert From Graam Pay"
#                             merchant_recipients_list = [merchant_queryset.email]

#                             mailoutputData = send_asynchronous_email(merchant_mail_subject, merchant_recipients_list, template_name, mail_data)

#                     except Exception as e:
#                         app.logger.error(traceback.format_exc())
#                         pass
#                     try:
#                         print(commissionCharges,"((((((commissionCharges3))))))")
#                         if merchant_queryset.parentId and commissionCharges.get("slabId") != None:
#                             print(commissionCharges,"((((((commissionCharges4))))))")
#                             user_parent_payin_commission_details(str(merchant_queryset.parentId.id),amount,payInPaymentGatewayId,jsonResponseDict.get("txnid"),paymentModeId,subPaymentModeId,commissionCharges.get("chargeAmount"),commissionCharges.get("chargeValue"),commissionCharges.get("chargeType"),str(merchant_queryset.id),float(commissionCharges.get("gstAmount")),float(commissionCharges.get("tdsAmount")))
#                     except Exception as e:
#                         app.logger.error(traceback.format_exc())
#                         pass
#                 else:
#                     print(commissionCharges,"((((((commissionCharges5))))))")
#                     lorder_queryset.update(status=status,payInResponseCallBackData=transactionData,responseCallBackTime=datetime.datetime.now(),pgOrderId=pgOrderId,bankRefId=bankRefId,customerVpa=customerVpa,currency=currency,errorMessage=errorMessage,cardmasked=cardmasked,subPaymentModeId=ObjectId(subPaymentModeId),paymentModeId=ObjectId(paymentModeId),paymentType=paymentMode,bankName=bankName,productName=productinfo,grandTotal=round_last_digits(float(transactionAmount)),walletLog="Wallet Balance is added with the amount of " + str(amount) + ".",commissionCharges=commissionCharges,statusCheckId=statusCheckId)
#             else:
#                 print(commissionCharges,"((((((commissionCharges6))))))")
#                 wallet_txn_query_set.update(status=0,payInResponseCallBackData=transactionData,responseCallBackTime=datetime.datetime.now(),pgOrderId=pgOrderId,bankRefId=bankRefId,customerVpa=customerVpa,currency=currency,errorMessage=errorMessage,cardmasked=cardmasked,subPaymentModeId=ObjectId(subPaymentModeId),paymentModeId=ObjectId(paymentModeId),paymentType=paymentMode,bankName=bankName,productName=productinfo,grandTotal=round_last_digits(float(transactionAmount)),walletLog="Wallet Balance is added with the amount of " + str(amount) + ".",commissionCharges=commissionCharges,statusCheckId=statusCheckId)
        
#         # return redirect(url_for('web_hooks.paymentresponsedata',walletId=str(walletId)))
#         print("wallet_txn_query_set error3")
#         return redirect(redirect_url)
#         # return data_status
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         print("wallet_txn_query_set error4")
#         redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
#         return redirect(redirect_url)

@web_hooks.route("/paymentresponsedata/<walletId>",methods=["POST","GET"])
def paymentresponsedata(walletId):
    try:
        return render_template("frontend/paymentresponse.html",walletId=walletId)
    except Exception as e:
        app.logger.error(traceback.format_exc())
        return render_template("frontend/paymentresponse.html",walletId="")


@web_hooks.route("/paymentreturnsuccessurl/<transactionId>", methods=["POST","GET"])
def paymentreturnsuccessurl(transactionId):
    print("(((((((lyra return page)))))))")
    return render_template("frontend/lyrareturnpage.html")


@web_hooks.route("/paymentreturnurl/<walletTransactionId>", methods=["POST","GET"])
def paymentreturnurl(walletTransactionId):
    print(walletTransactionId,"((((((((((((((walletTransactionId))))))))))))))")
    walletTransactionId = walletTransactionId

    walletTransactionDict = {}
    wallet_txn_queryset = WalletTransactions.objects(id=walletTransactionId).first()
    if wallet_txn_queryset:
        userId = str(wallet_txn_queryset.userId.id)
        callBackUrl = ""
        returnUrl = ""
        api_security_queryset = ApiSecurities.objects(userId=userId,apiType="payment_gateway").first()
        if api_security_queryset:
            returnUrl = api_security_queryset.returnUrl
        walletTransactionDict = {
        "orderId":wallet_txn_queryset.orderId,
        "amount":wallet_txn_queryset.amount,
        "returnUrl":returnUrl
        }
    return render_template("frontend/paymentreturnurl.html",walletTransactionDict=walletTransactionDict)

@web_hooks.route("/testingreturnurl", methods=["POST","GET"])
def testingreturnurl():
    return request.form

@web_hooks.route("/lyrareturnurl", methods=["POST"])
def lyrareturnurl():
    transactionId=""
    try:
        print(request.form,"lyrareturnurl request.form")
        resultdata = {"responseStatus":0,"result":"Pending"}
        pgOrderId=request.form.get('vads_order_id')
        charge_status=request.form.get('vads_charge_status')
        userId=""
        
        order_queryset = WalletTransactions.objects(pgOrderId=pgOrderId,status__nin=[5]).first()
        if order_queryset:
            transactionId=str(order_queryset.id)
            userId=str(order_queryset.userId.id)
            agent=str(order_queryset.agent)
            siteTitle=str(order_queryset.siteTitle)
            redirectbaseurl=domain
            if siteTitle!="":
                sitecode_qry=MultipleAppSites.objects(siteCode=siteTitle).first()
                redirectbaseurl=str(sitecode_qry.siteUrl)
            if agent=="web":
                redirect_url = f"{redirectbaseurl}user/#/vendorpayment/{userId}/{transactionId}"
            elif agent=="pipo_web":
                redirect_url = f"{redirectbaseurl}user/#/vendorpayment/{userId}/{transactionId}"
            else:
                redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
            return redirect(redirect_url)
        else:
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
            return redirect(redirect_url)
    except Exception as e:
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
        return redirect(redirect_url)

@web_hooks.route("/campuslinkpro_returnurl", methods=["GET","POST"])
def campuslinkpro_returnurl():
    transactionId=""
    try:
        print("campuslinkpro_returnurl request.form")
        resultdata = {"responseStatus":0,"result":"Pending"}
        userId=""
        pgOrderId = request.args.get("pgOrderId")
        
        order_queryset = WalletTransactions.objects(pgOrderId=pgOrderId,status__nin=[5]).first()
        print("campuslinkpro_returnurl pgOrderId",pgOrderId)
        if order_queryset:
            transactionId=str(order_queryset.id)
            userId=str(order_queryset.userId.id)
            agent=str(order_queryset.agent)
            transaction_id=str(order_queryset.transactionId)
            bank_ref_id=str(order_queryset.bankRefId)
            user_order_id=str(order_queryset.orderId)
            print("campuslinkpro_returnurl transactionId",transactionId)
            if agent=="web":
                redirect_url = f"{domain}user/#/vendorpayment/{userId}/{transactionId}"
                return redirect(redirect_url)
            elif agent=="mobile":
                redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
                return redirect(redirect_url)
            else:
                print("((((((((((userOrderId))))))))))",user_order_id)
                api_request_queryset = ApiRequestData.objects(userOrderId=user_order_id).first()
                if api_request_queryset:
                    requestData=api_request_queryset.requestData[0]
                    requestData['status']=""
                    requestData['transaction_id']=transaction_id
                    requestData['bank_reference_number']=bank_ref_id
                    webhook_queryset = WebHooks.objects(webhookType="payment_gateway",userId=userId,status=1).first()
                    if webhook_queryset:
                        webhookURL = webhook_queryset.webhookLink
                        if webhookURL:
                            headers = {'Content-Type': 'application/json'}
                            #payload = "responseStatus=1"+"&result="+errorMessage+"&responseBody="+requestData
                            payload = {
                            "responseStatus":1,
                            "result":"",
                            "responseBody":requestData
                            }
                            print(webhookURL,"*****webhookURL****")
                            print(payload,"*****payload****")
                            respnseData = requests.post(webhookURL, json=payload, headers=headers)
                            print("*****webhook payin success response****")
                            redirect_url = webhookURL
                    ##### where to redirect or what to return after post call for agent == api
                    
                    return redirect(redirect_url)
        else:
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
            return redirect(redirect_url)
    except Exception as e:
        app.logger.error(traceback.format_exc())
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
        return redirect(redirect_url)
    


# Latest Common Payin Payment Response Code
@web_hooks.route("/payu_payment_response",methods=["POST"])
def payu_payment_response():
    data_status = {"responseStatus":0,"result":""}
    userId=""
    walletId=""
    agent=""
    try:
        responseDict = request.form.to_dict()

        txn_id = responseDict.get("txnid")
        productinfo = responseDict.get("productinfo")
        save_api_webhook_logs_table = save_webhook_logs_data(None, "payin", "return_url", "payureturnurl", None, [responseDict], "api", "")
        wallet_txn_query_set = WalletTransactions.objects(pgOrderId=txn_id).first()
        walletId=str(wallet_txn_query_set.id)
        if not wallet_txn_query_set:
            print("wallet_txn_query_set error")
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
            return redirect(redirect_url)

        cardmasked = ""
        customerVpa = ""
        cardType = str(wallet_txn_query_set.cardType)
        agent=str(wallet_txn_query_set.agent)
        payInPaymentGatewayId = str(wallet_txn_query_set.paymentGatewayId.id)
        autoSettlement = wallet_txn_query_set.paymentGatewayId.autoSettlement
        status = wallet_txn_query_set.status
        userId = str(wallet_txn_query_set.userId.id)

        jsonResponseDict = responseDict
        siteTitle=str(wallet_txn_query_set.siteTitle)
        redirectbaseurl=domain
        if siteTitle!="":
            sitecode_qry=MultipleAppSites.objects(siteCode=siteTitle).first()
            redirectbaseurl=str(sitecode_qry.siteUrl)
        if agent=="web":
            redirect_url = f"{redirectbaseurl}user/#/vendorpayment/{userId}/{walletId}"
        elif agent=="pipo_web":
            redirect_url = f"{redirectbaseurl}user/#/vendorpayment/{userId}/{walletId}"

        elif agent == "api":
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
        else:
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)

        print("wallet_txn_query_set error2")
        merchant_queryset = Users.objects(id=userId,status=1).first()
        if jsonResponseDict and status == 3:
            print("in if and status ==== 3 ")
            # if wallet_txn_query_set.orderId != jsonResponseDict.get("txnid"):
            #     data_status["result"]="Invalid Request!!"
            #     return data_status

            bankName=""
            customerVpa=""
            statusCheckId=str(jsonResponseDict.get("mihpayid"))
            bankRefId=str(jsonResponseDict.get("bank_ref_num"))
            pgOrderId=str(jsonResponseDict.get("txnid")) #doubt
            paymentMode=str(jsonResponseDict.get("mode"))
            payment_datetime=str(jsonResponseDict.get("addedon"))

            currency="INR"
            if jsonResponseDict.get("mode")=="UPI":
                customerVpa = jsonResponseDict.get("field1")

            elif jsonResponseDict.get("mode")=="CC":
                paymentMode="CREDIT CARD"
                if cardType=="":
                    cardType=jsonResponseDict.get("card_type")
                bankName=jsonResponseDict.get("issuing_bank")
                # customerVpa=jsonResponseDict.get("card_type")
                cardmasked=jsonResponseDict.get("cardnum")

            elif jsonResponseDict.get("mode")=="DC":
                paymentMode="DEBIT CARD"
                if cardType=="":
                    cardType=jsonResponseDict.get("card_type")
                cardmasked=jsonResponseDict.get("cardnum")

            elif jsonResponseDict.get("mode")=="NB":
                paymentMode="NET BANKING"
                customerVpa="" ## doubt no vpa in NB 
            # elif jsonResponseDict.get("mode")=="NEFT":
            #     cardmasked=""
            # elif jsonResponseDict.get("mode")=="AEPS":
            #     cardmasked=""
            # elif jsonResponseDict.get("mode")=="IMPS":
            #     cardmasked=""
            elif jsonResponseDict.get("mode")=="CASH": ### we dont have cash ?
                paymentMode="WALLET"
                customerVpa=""
            else:
                paymentMode="CREDIT CARD"
                customerVpa=""

            print(paymentMode,"((((((((((((((((paymentMode????????????))))))))))))))))")

            amount = jsonResponseDict.get("amount")

            errorMessage=""
            if jsonResponseDict.get("error")=="E000":
                errorMessage = jsonResponseDict.get("field9")
            else:
                errorMessage = jsonResponseDict.get("Field9")


            if jsonResponseDict.get("status") == "success":
                transactionstatus=1
                response_code = "Success"
                errorMessage = "Success"
            else:
                transactionstatus=0
                response_code="Failed"
                errorMessage="Failed"
            payin_callback_request_data={
            "transaction_id":statusCheckId,
            "payment_method":paymentMode,
            "payment_datetime":payment_datetime,
            "response_code":response_code,
            "response_message":errorMessage,
            "pgOrderId":pgOrderId,
            "client_order_id":pgOrderId,
            "statusCheckId":statusCheckId,
            "amount":round(float(amount),2),
            "OrderAmount":round(float(amount),2),
            "currency":currency,
            "description":"",
            "name":"",
            "email":"",
            "phone":"",
            "address_line_1":"",
            "address_line_2":"",
            "city":"",
            "state":"",
            "country":"",
            "zip_code":"",
            "udf1":"",
            "udf2":"",
            "udf3":"",
            "udf4":"",
            "udf5":"",
            "customer_vpa":"",
            "cardType":cardType,
            "cardmasked":cardmasked,
            "transactionstatus":transactionstatus,
            "errorMessage":errorMessage,
            "hash":"",
            "paymentChannel":"payu",
            "bank_ref_id":bankRefId
            }

            try:
                callbackResponseData = payin_webhook_call_back_update(payin_callback_request_data,save_api_webhook_logs_table)

                data_status["responseStatus"] = callbackResponseData.get("responseStatus")
                data_status["result"] = callbackResponseData.get("result")

                return redirect(redirect_url)
            except Exception as e:
                app.logger.error(traceback.format_exc())
                data_status["result"] = "Unable to get pay in call back url!!"
                return redirect(redirect_url)

    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Unable to get pay in call back url!!"
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=None)
        return redirect(redirect_url)  

@web_hooks.route("/worldlinereturnurl", methods=["POST"])
def worldlinereturnurl():
    secretKey="aecbbe276b1411d057f08d752241aa3c"
    data_status = {"responseStatus": 0, "result": ""}
    key = "3515826811BKMIBW"
    iv = "6278923392NIMBKV"

    creditType=""
    card_type=""

    encrypted_data = request.form.get("msg")
    print(encrypted_data,"(((((((((((((((((encrypted_data)))))))))))))))))")
    print("(((((((((((((((((Worldline Call Back Response Data)))))))))))))))))")
    # return data_status
    decrypted_data = decrypt_worldline(encrypted_data, key, iv)
    transaction_data = json.loads(decrypted_data)
    print(transaction_data,"(((((transaction_data)))))")
    # print(type(jsonDecrptCallbackResponse),"(((((jsonDecrptCallbackResponse TYPE)))))")
    # transaction_data = jsonDecrptCallbackResponse.get("transactionData")

    pgOrderId = transaction_data.get("merchantTransactionIdentifier","")
    print(pgOrderId,"PG ORDERID")
    payment_datetime = transaction_data.get("paymentMethod",{}).get("paymentTransaction",{}).get("dateTime","")
    bank_ref_id = transaction_data.get("paymentMethod",{}).get("paymentTransaction",{}).get("bankReferenceIdentifier")
    amount = transaction_data.get("paymentMethod",{}).get("paymentTransaction",{}).get("amount")
    OrderAmount = transaction_data.get("paymentMethod",{}).get("paymentTransaction",{}).get("amount")
    customer_vpa = ""
    payment_method = transaction_data.get("paymentMethod",{}).get("paymentMode","")
    response_code = transaction_data.get("paymentMethod",{}).get("paymentTransaction",{}).get("statusCode","")
    currency = ""
    transaction_id = transaction_data.get("merchantTransactionIdentifier","")
    order_id = transaction_data.get("merchantTransactionIdentifier","")

    
    requestData = [transaction_data]

    save_api_webhook_logs_table = save_webhook_logs_data(None,"payin","call_back","campusprolinkcallbackurl",None,requestData,"api","")

    wallet_txn_query_set = WalletTransactions.objects(pgOrderId=pgOrderId).first()
    walletId=str(wallet_txn_query_set.id)
    if not wallet_txn_query_set:
        print("wallet_txn_query_set error")
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
        return redirect(redirect_url)

    cardmasked = ""
    customerVpa = ""
    cardType = str(wallet_txn_query_set.cardType)
    agent=str(wallet_txn_query_set.agent)
    payInPaymentGatewayId = str(wallet_txn_query_set.paymentGatewayId.id)
    autoSettlement = wallet_txn_query_set.paymentGatewayId.autoSettlement
    status = wallet_txn_query_set.status
    userId = str(wallet_txn_query_set.userId.id)
    cardmasked = str(wallet_txn_query_set.cardmasked)

    siteTitle=str(wallet_txn_query_set.siteTitle)
    redirectbaseurl=domain
    if siteTitle!="":
        sitecode_qry=MultipleAppSites.objects(siteCode=siteTitle).first()
        redirectbaseurl=str(sitecode_qry.siteUrl)
    if agent=="web":
        redirect_url = f"{redirectbaseurl}user/#/vendorpayment/{userId}/{walletId}"
    elif agent=="pipo_web":
        redirect_url = f"{redirectbaseurl}user/#/vendorpayment/{userId}/{walletId}"
    else:
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)

    errorMessage=""
    # campusproStatus="pending"
    if response_code == "0300":
        transactionstatus=1
        errorMessage = "Success"
        # campusproStatus="completed"
    else:
        transactionstatus=3
        errorMessage="Pending"
        if response_code == "0399":
            transactionstatus=0
            errorMessage="Failed"
            # campusproStatus="failed"
        else:
            transactionstatus=3
            errorMessage="Pending"
            # campusproStatus="pending"

    paymentMode="CREDIT CARD"
    if payment_method=="Credit card" or payment_method == "Debit card":
        if payment_method=="Credit card":
            paymentMode="CREDIT CARD"
        elif payment_method == "Dedit card":
            paymentMode="DEBIT CARD"
        # if card_type=="MASTERCARD":
        #     cardType="MAST"
        # elif card_type=="RUPAY":
        #     cardType="RUPAY"
        # elif card_type=="VISA":
        #     cardType="VISA"
        

    elif payment_method=="Netbanking":
        paymentMode="NET BANKING"
    elif payment_method=="Upi":
        paymentMode="UPI"



    ####using orderId received in campuspro_fetch_order_by_orderId to update status
    # campuspro_change_order_status_response = campuspro_change_order_status("","",campusproStatus,campuslinkpro_orderId)
    # print(campuspro_change_order_status_response,"(((((((((((campuspro_change_order_status_response)))))))))))")
    print(transactionstatus,"TXN STATUS")
    print(response_code,"response_code")
    worldline_payin_callback_request_data={
    "transaction_id":transaction_id,
    "payment_method":paymentMode,
    "payment_datetime":payment_datetime,
    "response_code":response_code,
    "response_message":errorMessage,
    "pgOrderId":pgOrderId,
    "client_order_id":order_id,
    "amount":round(float(amount),2),
    "OrderAmount":round(float(OrderAmount),2),
    "currency":currency,
    "description":"",
    "name":"",
    "email":"",
    "phone":"",
    "address_line_1":"",
    "address_line_2":"",
    "city":"",
    "state":"",
    "country":"",
    "zip_code":"",
    "udf1":"",
    "udf2":"",
    "udf3":"",
    "udf4":"",
    "udf5":"",
    "cardType":cardType,
    "cardmasked":cardmasked,
    "customer_vpa":customer_vpa,
    "transactionstatus":transactionstatus,
    "errorMessage":errorMessage,
    "hash":"",
    "paymentChannel":"Worldline",
    "bank_ref_id":bank_ref_id
    }

    try:
        callbackResponseData = payin_webhook_call_back_update(campusprolink_payin_callback_request_data,save_api_webhook_logs_table)

        data_status["responseStatus"] = callbackResponseData.get("responseStatus")
        data_status["result"] = callbackResponseData.get("result")
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=None)
        return redirect(redirect_url)
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Unable to get pay in call back url!!"
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=None)
        return redirect(redirect_url)
    