Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session
from core.model.UserModel import UserModel
from core.model.PayumoneyModel import PayumoneyModel
from core.library.email import EMAIL
from random import randint
import datetime
from datetime import timedelta,date,datetime
import requests,json
# from .. import Cryptography
from flask import session, app
import razorpay
from random import randint
import datetime
from datetime import timedelta,date,datetime,time
import hashlib
from .. import config
import flask
import base64
import pytz
app = Flask(__name__,static_folder = "static", static_url_path='')
app = Blueprint('payumoney', __name__)
@app.route('/payment/<gateway_id>', methods = ["GET", "POST"])
def payment(gateway_id):
base64_bytes = gateway_id.encode("ascii")
# gateway id decode
sample_bytes = base64.b64decode(base64_bytes)
gateway_id_str = sample_bytes.decode("ascii")
gateway_id_int = int(gateway_id_str)
gateway_data = PayumoneyModel().get_gateway(gateway_id_int)
# now = datetime.now()
# dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
UTC = pytz.utc
IST = pytz.timezone('Asia/Kolkata')
datetime_ist = datetime.now(IST)
dt_string = datetime_ist.strftime('%Y-%m-%d %H:%M:%S')
name = request.args.get('name')
email = request.args.get('email')
mobile = request.args.get('mobile')
amount = request.args.get('amount')
res_url = request.args.get('res_url', None)
unique_id = request.args.get('unique_id') # This is added on feb 23 2020 like order id
txtid_prefix = request.args.get('txtid_prefix') # This is added on sep 24 2020 for merchant ref id
# endcode res_url
url_byte = res_url.encode("ascii")
_bytes = base64.b64encode(url_byte)
r_url = _bytes.decode("ascii")
# last_insert_id_f = request.args.get('last_insert_id')
gateway_name = "Payumoney"
currency = "INR"
data = {
'name' : name,
'email' : email,
'mobile' : mobile,
'amount' : amount,
'gateway_name' : [gateway_name],
'created_at' : [dt_string],
'currency' : [currency],
'unique_id' : [unique_id]
}
delg_save =UserModel().insert_delegates(data,unique_id)
last_insert_id = delg_save
delegates = UserModel().get_delegate_by_pid(last_insert_id)
# user = session.get('user')
# user_id = user.get('user_id')
# user = User().get_user(user_id)
# session['user'] = user
MERCHANT_KEY = gateway_data.live_key
key= gateway_data.live_key
SALT = gateway_data.live_salt_or_secret
# PAYU_BASE_URL = "https://sandboxsecure.payu.in/_payment"
# https://sandboxsecure.payu.in/_payment # test url
# https://secure.payu.in/_payment # live url
PAYU_BASE_URL = "https://secure.payu.in/_payment" # FOR LIVE MO
# PAYU_BASE_URL = "https://sandboxsecure.payu.in/_payment" # FOR TEST MO
action = ''
if request.method == 'GET':
posted={}
return render_template('payumoney/payumoney_payment_screen.html',posted=posted,delegates=delegates,r_url = r_url,last_insert_id=last_insert_id)
else:
posted={}
# # Merchant Key and Salt provided y the PayU.
# randtemp = randint(0,20)
randtemp = str(randint(1,99999))+ str(unique_id)
hash_object = hashlib.sha256(str(randtemp).encode('utf-8'))
txnid= txtid_prefix + hash_object.hexdigest()[0:20]
# txnid= 'VRVDC' + hash_object.hexdigest()[0:20]
hashh = ''
print("<<<<< TXN ID NTEC PAYMENT APP >>>>>>")
print(txnid)
# Mandatory Field
posted['amount'] = amount
posted['productinfo']='register'
posted['firstname'] = name
posted['email'] = email
posted['phone'] = mobile
posted['surl'] = config['BASE_URL']+'/payment_api/success'
# posted['surl'] = "http://127.0.0.1:5001/payment_api/success"
posted['furl'] = config['BASE_URL']+'/payment_api/failure'
# posted['furl'] = "http://127.0.0.1:5001/payment_api/failure"
posted['hash'] = ''
posted['udf1'] = r_url
posted['udf2'] = unique_id # this line added on feb 23 2020
# hashSequence = "key|txnid|amount|productinfo|firstname|email|phone|surl|furl"
hashSequence = "key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10"
posted['txnid']=txnid
posted['key']=key
hash_string=''
hashVarsSeq=hashSequence.split('|')
for i in hashVarsSeq:
try:
hash_string+=str(posted[i])
except Exception:
hash_string+=''
hash_string+='|'
hash_string+=SALT
hashh=hashlib.sha512(hash_string.encode('utf-8')).hexdigest().lower()
action =PAYU_BASE_URL
if(posted.get("key")!=None and posted.get("txnid")!=None and posted.get("firstname")!=None and posted.get("email")!=None):
payment_id = posted.get("txnid")
payment_status = "Pending"
created_at = datetime.now()
# update_payment_id = {
# 'payment_status' : 'YETTOPAY',
# 'payment_id' : posted.get("txnid"),
# 'created_at' : datetime.now(),
# }
insert_user = PayumoneyModel().update_payment_id(last_insert_id,payment_id,payment_status,created_at)
data = { "posted":posted,"hashh":hashh,"key":key,"MERCHANT_KEY":MERCHANT_KEY,"txnid":txnid,"action":"https://secure.payu.in/_payment" } # It is before mar 13 2021
# data = { "posted":posted,"hashh":hashh,"key":key,"MERCHANT_KEY":MERCHANT_KEY,"txnid":txnid,"hash_string":hash_string,"action":"https://sandboxsecure.payu.in/_payment" }
return render_template('payumoney/payu_request.html',posted=data.get('posted'),MERCHANT_KEY=MERCHANT_KEY,action=action,hashh=hashh,txnid=txnid)
else:
data = { "posted":posted,"hashh":hashh,"MERCHANT_KEY":MERCHANT_KEY,"txnid":txnid,"hash_string":hash_string,"action":"." }
return render_template('payumoney/payu_request.html',posted=data.get('posted'))
@app.route('/success', methods=['GET','POST'])
def success():
print("Payumoney return url funcion calling ...")
txnid=request.values["txnid"]
print("txnid from payumoney success url")
print(txnid)
get_user_id = PayumoneyModel().getuser_idbytxnid(txnid)
payuMoneyId = request.values["payuMoneyId"]
status = request.values["status"]
print("Payumoney return url funcion calling ...")
print(status)
firstname = request.values["firstname"]
amount = request.values["amount"]
posted_hash = request.values["hash"]
key = request.values["key"]
productinfo = request.values["productinfo"]
email = request.values["email"]
mobile = request.values["phone"]
udf1 = request.values["udf1"]
udf2 = request.values["udf2"] # This line added on feb 23 2021
method_1 = request.values["mode"]
base64_bytes = udf1.encode("ascii")
sample_bytes = base64.b64decode(base64_bytes)
response_url_str = sample_bytes.decode("ascii")
# salt="4pdSWxjLqt"
# salt="QlpAxn2s" # Techventure Here salt variable not used in the success function so this is commented on Feb 14 2022
now = datetime.now()
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
save_data = {'amount' : amount ,'payment_status' : status , 'method' : method_1,'payment_id' : payuMoneyId,'updated_at' : dt_string}
print(save_data)
save_payment_dt = PayumoneyModel().updatepaymentdetail(txnid,save_data)
if status == "success" :
pass
else :
salt=""
try:
additionalCharges=request.values["additionalCharges"]
retHashSeq=additionalCharges+'|'+salt+'|'+status+'|||||||||||'+email+'|'+firstname+'|'+productinfo+'|'+amount+'|'+txnid+'|'+key
except Exception:
retHashSeq = salt+'|'+status+'|||||||||||'+email+'|'+firstname+'|'+productinfo+'|'+amount+'|'+txnid+'|'+key
hashh=hashlib.sha512(retHashSeq.encode('utf-8')).hexdigest().lower()
return flask.redirect(response_url_str+'?payment_id='+str(payuMoneyId)+'&status='+status+'&email='+email+'&mobile='+mobile+'&name='+firstname+'&amount='+amount+'&unique_id='+udf2+'&method='+method_1)
# @app.route('/success', methods=['GET','POST'])
# def success():
# txnid=request.values["txnid"]
# p=PayumoneyModel()
# get_user_id = p.getuser_idbytxnid(txnid)
# # user_id = get_user_id.get('user_id')
# # user = User().get_user(user_id)
# # session['user'] = user
# status = request.values["status"]
# firstname = request.values["firstname"]
# amount = request.values["amount"]
# # txnid=request.values["txnid"]
# posted_hash = request.values["hash"]
# key = request.values["key"]
# productinfo = request.values["productinfo"]
# email = request.values["email"]
# mobile = request.values["phone"]
# udf1 = request.values["udf1"]
# udf2 = request.values["udf2"] # This line added on feb 23 2021
# base64_bytes = udf1.encode("ascii")
# sample_bytes = base64.b64decode(base64_bytes)
# response_url_str = sample_bytes.decode("ascii")
# # salt="4pdSWxjLqt"
# salt="QlpAxn2s" # Techventure
# UTC = pytz.utc
# IST = pytz.timezone('Asia/Kolkata')
# datetime_ist = datetime.now(IST)
# dt_string = datetime_ist.strftime('%Y-%m-%d %H:%M:%S')
# save_data = {
# # 'user_id': user_id,
# 'amount' : amount ,
# 'payment_status' : status ,
# 'payment_id' : txnid,
# 'updated_at' : dt_string,
# }
# save_payment_dt = PayumoneyModel().updatepaymentdetail(txnid,save_data)
# return flask.redirect(response_url_str+'?payment_id='+txnid+'&status='+status+'&email='+email+'&mobile='+mobile+'&name='+firstname+'&amount='+amount+'&unique_id='+udf2)
# try:
# additionalCharges=request.values["additionalCharges"]
# retHashSeq=additionalCharges+'|'+salt+'|'+status+'|||||||||||'+email+'|'+firstname+'|'+productinfo+'|'+amount+'|'+txnid+'|'+key
# except Exception:
# retHashSeq = salt+'|'+status+'|||||||||||'+email+'|'+firstname+'|'+productinfo+'|'+amount+'|'+txnid+'|'+key
# hashh=hashlib.sha512((retHashSeq).encode('utf-8')).hexdigest().lower()
# if(hashh !=posted_hash):
# print ("Invalid Transaction. Please try again")
# # payumoney_server_response
# else:
# data = { "txnid":txnid,"status":status,"amount":amount }
# save_data = {
# # 'user_id': user_id,
# 'amount' : amount ,
# 'payment_status' : status ,
# 'payment_id' : txnid,
# 'updated_at' : datetime.now(),
# }
# save_payment_dt = PayumoneyModel().updatepaymentdetail(txnid,save_data)
# flash("Payment status success " )
# # return flask.redirect('http://127.0.0.1:5000/success?payment_id='+txnid+'&status='+status+'&email='+email+'&mobile='+mobile+'&name='+firstname+'&amount='+amount)
# # payumoney_server_response
# return flask.redirect(response_url_str+'?payment_id='+txnid+'&status='+status+'&email='+email+'&mobile='+mobile+'&name='+firstname+'&amount='+amount)
# return redirect(url_for('user.DelegategReg'))
# return render_template('videos/video_index.html',status=data.get('status'),txnid=data.get('txnid'),amount=data.get('amount'))
@app.route('/failure', methods=['GET','POST'])
def failure():
txnid=request.values["txnid"]
print(txnid)
payuMoneyId = request.values["payuMoneyId"]
# get_user_id = Payumoney().getuser_idbytxnid(txnid)
status = request.values["status"]
firstname = request.values["firstname"]
amount = request.values["amount"]
# paymentId = request.values["paymentId"]
posted_hash = request.values["hash"]
key = request.values["key"]
productinfo = request.values["productinfo"]
email = request.values["email"]
mobile = request.values["phone"]
r_url = request.values["udf1"]
udf2 = request.values["udf2"]
method_1 = request.values["mode"] or None
base64_bytes = r_url.encode("ascii")
sample_bytes = base64.b64decode(base64_bytes)
response_url_str = sample_bytes.decode("ascii")
salt=""
try:
additionalCharges=request.values["additionalCharges"]
retHashSeq=additionalCharges+'|'+salt+'|'+status+'|||||||||||'+email+'|'+firstname+'|'+productinfo+'|'+amount+'|'+txnid+'|'+key
except Exception:
retHashSeq = salt+'|'+status+'|||||||||||'+email+'|'+firstname+'|'+productinfo+'|'+amount+'|'+txnid+'|'+key
hashh=hashlib.sha512(retHashSeq.encode('utf-8')).hexdigest().lower()
UTC = pytz.utc
IST = pytz.timezone('Asia/Kolkata')
datetime_ist = datetime.now(IST)
dt_string = datetime_ist.strftime('%Y-%m-%d %H:%M:%S')
save_data = {'amount' : amount ,'payment_status' : status ,'payment_id' : payuMoneyId,'method' : method_1 ,'updated_at' : dt_string}
save_payment_dt = PayumoneyModel().updatepaymentdetail(txnid,save_data)
return flask.redirect(response_url_str+'?payment_id='+str(payuMoneyId)+'&status='+status+'&email='+email+'&mobile='+mobile+'&name='+firstname+'&amount='+amount+'&unique_id='+udf2)
# Webhook call payumoney account Oct 31 ,2022
@app.route('/payumoney-webhook', methods = ["GET", "POST"])
def PayumoneyWebhook():
now = datetime.now()
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
email = "ganesan@numerotec.com"
emails = ["karthick@numerotec.com","ganesan@numerotec.com"]
html = "<h3 style='color:green'>Webhook Mail function calling at "+ dt_string +" </h3>"
subject = "Payumoney Webhook calling at "+ dt_string
for email in emails :
email = email
pass
# EMAIL.WebhookInitiateMail(subject,html,email)
# unique_id = 'DEMO1212121'
# webhook_data = {'amount' : '5.00' ,'payment_status' : 'success' ,'payment_id' : 1212122,'updated_at' : dt_string}
# save_payment_dt = PayumoneyModel().updateWebhookData(unique_id,webhook_data)
# return save_payment_dt
if request.method == 'POST':
# print("Data received from Webhook is: ", request.json)
data_1 = request.json
res_url_base64 = data_1["udf1"]
base64_bytes = res_url_base64.encode("ascii")
sample_bytes = base64.b64decode(base64_bytes)
response_url_str = sample_bytes.decode("ascii")
paymentId = data_1["paymentId"]
status = data_1["status"]
email = data_1["customerEmail"]
mobile = data_1["customerPhone"]
firstname = data_1["customerName"]
amount = data_1["amount"]
unique_id = data_1["udf2"]
method_1 = data_1["paymentMode"]
webhook_data = {'amount' : amount ,'payment_status' : status ,'payment_id' : paymentId,'updated_at' : dt_string , 'method' : method_1,'is_webhook_update' : 1}
save_payment_dt = PayumoneyModel().updateWebhookData(unique_id,webhook_data)
return save_payment_dt
else :
return "Method not allowed."
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists