import base64
import http.client
import random
import ssl
from utils.PKCS12Manager import PKCS12Manager
def generate_basic_auth(client_id, client_secret):
credentials = f'{client_id}:{client_secret}'
encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8')
auth_header = f'Basic {encoded_credentials}'
return auth_header
def getSslContext():
# Отключаем проверку SSL
context = ssl.SSLContext() # add SSL context
context.verify_mode = ssl.CERT_NONE # disable verification
return context
def generate_RqUID():
# Рандоманый UID для записи сбера, позволяют помечать запросы
pattern = "([0-9]|[a-f]|[A-F]){32}"
chars = "0123456789abcdefABCDEF"
random_string = ""
for _ in range(32):
random_string += random.choice(chars)
return random_string
def requestToken():
# Пример запроса
headers = {
'Authorization': auth,
'RqUID': generate_RqUID(),
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
payload = 'grant_type=client_credentials&scope=https://api.sberbank.ru/escrow'
path = '/prod/tokens/v3/oauth'
ssl_context = getSslContext()
connection = http.client.HTTPSConnection(
host="mc.api.sberbank.ru",
port=443,
context=ssl_context,
cert_file=certificate_manager.certFile,
key_file=certificate_manager.keyfile
)
connection.request(method='POST', url=path, headers=headers, body=payload)
response = connection.getresponse()
return response
cert = "/some/dir/my_cert.p12"
passphrase = "" # Пароль от сертификата p12
certificate_manager = PKCS12Manager(p12file=cert, passphrase=passphrase)
client_id = ""
client_secret = ""
auth = generate_basic_auth(client_id, client_secret) #
token_response = requestToken() # Вызываем запрос получения токена, который в последствии используется для выполнения запросов.
import os
import shutil
from OpenSSL import crypto
from configs import TEMP_DIR
class PKCS12Manager:
def __init__(self, p12file, passphrase):
self.p12file = p12file
self.unlock = passphrase
self.cert_storage_dir = ''
self.keyfile = ''
self.certFile = ''
# Get filename without extension
ext = os.path.splitext(p12file)
self.filebasename = os.path.basename(ext[0])
self.createPrivateCertStore()
self.p12toPem()
def getKey(self):
return self.keyfile
def getCert(self):
return self.certFile
def createPrivateCertStore(self):
home = os.path.dirname(os.path.abspath(__file__))
# home = os.path.expanduser('~')
temp = TEMP_DIR
if not os.path.exists(temp):
os.mkdir(temp)
os.chmod(temp, 0o700)
self.cert_storage_dir = temp
def p12toPem(self):
p12 = crypto.load_pkcs12(open(self.p12file, 'rb').read(), bytes(self.unlock, 'utf-8'))
# PEM formatted private key
key = crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())
self.keyfile = os.path.join(self.cert_storage_dir, self.filebasename + ".key.pem")
open(self.keyfile, 'a').close()
os.chmod(self.keyfile, 0o600)
with open(self.keyfile, 'wb') as f:
f.write(key)
# PEM formatted certificate
cert = crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())
self.certFile = os.path.join(self.cert_storage_dir, self.filebasename + ".crt.pem")
open(self.certFile, 'a').close()
os.chmod(self.certFile, 0o644)
with open(self.certFile, 'wb') as f:
f.write(cert)
def removeCertStorage(self):
shutil.rmtree(self.cert_storage_dir)
self.cert_storage_dir = ''
context = ssl.SSLContext()
context.verify_mode = ssl.CERT_NONE
conn = http.client.HTTPSConnection("mc.api.sberbank.ru", 443, context=context, cert_file=cert, key_file=key)
context = ssl.SSLContext()
context.verify_mode = ssl.CERT_NONE
conn = http.client.HTTPSConnection("mc.api.sberbank.ru", 443, context=context, cert_file=cert, key_file=key)
$(document).ready(function() {
var date = new Date();
// var today = date.toISOString().slice(0, 10);
var minInput = new Date(date.setDate(date.getDate() + 3)).toISOString().slice(0, 10);
var maxInput = new Date(date.setDate(date.getDate() + 7)).toISOString().slice(0, 10);
$("#checkDate").attr('min', minInput);
$("#checkDate").attr('max', maxInput);
$('.phonenumb').inputmask("+7 (999) 999-99-99");
});