Sindbad~EG File Manager

Current Path : /home/numerotech/ntecpayapp.urbanedge.co.in/ntecpayapp/core/controller/
Upload File :
Current File : //home/numerotech/ntecpayapp.urbanedge.co.in/ntecpayapp/core/controller/RazorpayController.py

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