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.RazorpayModel import RazorpayModel
from core.model.InstamojoModel import InstamojoModel
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 instamojo_wrapper import Instamojo
import flask
import base64
app = Flask(__name__,static_folder = "static", static_url_path='')
# razorpay_client = razorpay.Client(auth=("rzp_test_p0fCsPyrmeO28Q", "3dYe8yvI7gEzSeTaqREW4LUj"))
# client = razorpay.Client(auth=("<YOUR_KEY>", "<YOUR_SECRET>"))
app = Blueprint('razorpay', __name__)
@app.route('/razorpayment/<gateway_id>', methods = ["POST"])
def Payment_rayzorpay(gateway_id):
if request.method == 'POST':
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 = RazorpayModel().get_gateway(gateway_id_int)
now = datetime.now()
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
name = request.values.get("name",None)
email = request.values.get("email",None)
mobile = request.values.get("mobile",None)
amount = request.values.get("amount",None)
res_url = request.values.get("res_url",None)
unique_id = request.values.get("unique_id",None) # This is added on feb 23 2020 like order id
key = request.values.get("key",None) # This is added on sep 24 2020 for merchant ref id
key_unique_id = key+"_"+str(unique_id)
is_test = request.values.get("is_test",None)
amount_int = amount
amount_int = amount_int[:-3]
if int(amount_int) <=0 or res_url is None :
return "Please enter response url and valid amount "
else :
gateway_name = "RazorPay"
currency = "INR"
# fetching data from form..
data = {
'name' : name,
'email' : email,
'mobile' : mobile,
'amount' : amount,
'gateway_name' : [gateway_name],
'key_val' : [key],
'is_test' : [is_test],
'key_unique_id': [key_unique_id],
'created_at' : [dt_string],
'currency' : [currency],
'unique_id' : [unique_id]
}
delg_save =UserModel().insert_delegates(data,unique_id)
last_insert_id = delg_save
# encoded = base64.b64encode (bytes(res_url, "utf-8"))
# encode res_url
url_byte = res_url.encode("ascii")
_bytes = base64.b64encode(url_byte)
r_url = _bytes.decode("ascii")
if int(is_test) == 1 :
# After save data in our database
gateway_name = gateway_data.gateway_name
api_key_1 = gateway_data.test_key
else :
gateway_name = gateway_data.gateway_name
api_key_1 = gateway_data.live_key
if gateway_name == "RazorPay":
delegates = UserModel().get_delegate_by_pid(last_insert_id)
amt = delegates.amount
amount = int(amt) * 100
return render_template('razorpay/razorpay_payment_screen.html',delegates = delegates,last_insert_id=last_insert_id,amount=amount,gateway_id=gateway_id_int,r_url=r_url,api_key_1=api_key_1,is_test =is_test)
else :
return "Invalid URL "
# if gateway_name == "Instamojo":
# test_auth_token = gateway_data.test_auth_token
# pay_test_link = gateway_data.pay_test_link
# p_id_ =str(last_insert_id)
# instamojo_api = Instamojo(api_key=api_key_1,auth_token=test_auth_token,endpoint='https://test.instamojo.com/api/1.1/')
# response = instamojo_api.payment_request_create(amount=amount, buyer_name= name,phone = mobile,purpose= "Delegate Registration fee " ,send_email=False,email=email,
# redirect_url="http://127.0.0.1:5001/payment_api/payment_instamojo_response/"+p_id_+"/"+r_url
# )
# pay_request_id = response['payment_request']['id']
# status = response['payment_request']['status']
# print (response['payment_request']['shorturl']) # Get the short URL
# print (response['payment_request']['status']) # Get the current status
# print (pay_request_id) # List of payments
# p_id = last_insert_id
# update_pay_req_id = InstamojoModel().update_pay_req_id(p_id,pay_request_id,status)
# return render_template('instamojo/instamojo_payment_screen.html',data= data,payment_request_id=pay_request_id,last_insert_id =p_id,pay_test_link=pay_test_link)
@app.route('/razorpay_response/<int:last_insert_id>/<gateway_id>/<r_url>', methods=['POST'])
def Razorpay_response(last_insert_id,gateway_id,r_url):
# response url decode
if "%3D" in r_url:
r_url =r_url.replace("%3D","=")
else :
pass
base64_bytes = r_url.encode("ascii")
sample_bytes = base64.b64decode(base64_bytes)
response_url_str = sample_bytes.decode("ascii")
gateway_data = RazorpayModel().get_gateway(gateway_id)
# auth_key = gateway_data.test_key
# auth_secret = gateway_data.test_salt_or_secret
delegates = UserModel().get_delegate_by_pid(last_insert_id)
payment_id = request.form['razorpay_payment_id']
amount_f = delegates.amount
is_test = delegates.is_test
amount = int(amount_f) * 100
if int(is_test) == 1 :
auth_key_1 = gateway_data.test_key
auth_secret_1 = gateway_data.test_salt_or_secret
else :
auth_key_1 = gateway_data.live_key
auth_secret_1 = gateway_data.live_salt_or_secret
razorpay_client = razorpay.Client(auth=(auth_key_1, auth_secret_1)) # from database based on gateway id
razorpay_client.payment.capture(payment_id, amount)
razorpay_res = json.dumps(razorpay_client.payment.fetch(payment_id))
response = json.loads(razorpay_res)
# print(response)
email = response["email"]
mobile = response["contact"]
mobile = mobile.replace("+91", "")
status = response["status"]
unique_id = response['notes']['shopping_order_id']
# **********************************************************************
# *********************************************************************
if response["status"] == "captured" or response["status"] == "Credit" :
payment_id_update = UserModel().update_payment_id(last_insert_id,status,payment_id)
flash("Payment status success " )
return flask.redirect(response_url_str+'?payment_id='+payment_id+'&status='+status+'&email='+email+'&mobile='+mobile+'&unique_id='+unique_id)
else:
flash("Payment status Failed " )
payment_id_update = UserModel().update_payment_id(last_insert_id,status,payment_id)
return flask.redirect(response_url_str+'?payment_id='+payment_id+'&status='+status+'&email='+email+'&mobile='+mobile+'&unique_id='+unique_id)
# return razorpay_res
# flash("Payment status success " )
# return redirect(url_for('user.DelegategReg'))
@app.route('/payment_instamojo_response/<p_id>/<r_url>', methods = ["GET", "POST"])
def Payment_instamojo_response(p_id,r_url):
p_id =str(p_id)
base64_bytes = r_url.encode("ascii")
sample_bytes = base64.b64decode(base64_bytes)
response_url_str = sample_bytes.decode("ascii")
# delegates = UserModel().get_delegate_by_pid(p_id)
# amt = delegates.amount
# amount = int(amt)
payment_id = request.args.get('payment_id')
payment_status = request.args.get('payment_status')
payment_request_id = request.args.get('payment_request_id')
now = datetime.now()
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
update_pay_status = InstamojoModel().update_pay_status(p_id,payment_id,payment_status,payment_request_id,dt_string)
if update_pay_status :
# flash("Payment status :" + payment_status)
# return redirect(url_for('user.DelegategReg'))
email = update_pay_status.email
mobile = update_pay_status.mobile
if payment_status == "Credit":
flash("Payment status success " )
return flask.redirect(response_url_str+'?payment_id='+payment_id+'&status='+payment_status+'&email='+email+'&mobile='+mobile+'&payment_request_id='+payment_request_id)
# return redirect(url_for('http://127.0.0.1:5000/delegate_reg'))
else:
flash("Payment status Failed " )
# return redirect(url_for('http://127.0.0.1:5000/delegate_reg'))
# return flask.redirect('http://127.0.0.1:5000/delegate_reg')
return flask.redirect(response_url_str+'?payment_id='+payment_id+'&status='+payment_status+'&email='+email+'&mobile='+mobile+'&payment_request_id='+payment_request_id)
@app.route('/razorpay_webhook', methods=['POST'])
def razorpay_webhook():
webhook_secret: str = "ganesanja"
signature = request.headers['X-Razorpay-Signature']
client = razorpay.Client(auth=("rzp_test_p0fCsPyrmeO28Q", "3dYe8yvI7gEzSeTaqREW4LUj"))
# client = razorpay.Client(auth=(MY_KEY, MY_SIGNATURE))
# verify = client.utility.verify_webhook_signature(str(request.data) , signature, webhook_secret)
verify = client.utility.verify_webhook_signature(json.dumps(body, separators=(',', ':')), signature, secret)
return verify
# client = razorpay.Client(auth=(MY_KEY, MY_SIGNATURE))
# verify = client.utility.verify_webhook_signature(request.data, signature, webhook_secret)
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists