Skip to main content

Paycom.uz integration with Flask application, (only for Uzbekistan)

Project description

Flask-PaycomUz

Only for Uzbekistan

Paycom.uz integration for Flask

Links

How it Works

Install

pip install Flask-PaycomUz

Add your credentials from PaycomUz to config file

PAYCOM_ID = "your merchant ID"
PAYCOM_KEY = "your sercet key" 

Create Flask App With Flask-PaycomUz

from flask_paycomuz import Paycom
from flask import *
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
paycom = Paycom(db)

def CheckAllowment(account): # Before creating transaction Flask-PaycomUz send account data which will have key whick you gave to Register_Account_data to validate it. Return True/False and detail object
    order_id = account.get('order_id') 
    res = Order.query.filter(Order.id == order_id).first()
    detail = {
            "discount": { # скидка, необязательное поле
                "title": "Скидка 5%",
                "price": 10000
            },
            "shipping": { # доставка, необязательное поле
                "title": "Доставка до ттз-4 28/23",
                "price": 500000
            },
            "items": [ # товарная позиция, обязательное поле для фискализации
                {
                    "title": "Помидоры", # нааименование товара или услуги
                    "price": 505000, # цена за единицу товара или услуги, сумма указана в тийинах
                    "count": 2, # кол-во товаров или услуг
                    "code": "00702001001000001", #  код *ИКПУ обязательное поле
                    "units": 241092, # значение изменится в зависимости от вида товара
                    "vat_percent": 15, # обязательное поле, процент уплачиваемого НДС для данного товара или услуги
                    "package_code": "123456" # Код упаковки для конкретного товара или услуги, содержится на сайте в деталях найденного ИКПУ.
                }
            ]
        }
    if res:
        return True, detail
    return False, {
        
    }

def CallbackPayme(transaction): # After Creating and Performing transaction from Payme this function will call with Payme_Transaction as argument
    if transaction.state == 1: # Successful creating transaction in Payme
        pass
    if transaction.state == 2: # Successful performing transaction in Payme
        pass
    


def create_app():
    app = Flask(__name__)
    app.config.from_pyfile('config.py')
    
    paycom.Register_Account_Data(['order_id']) # Register Paycom payment details, requires to set before init app
    paycom.Register_Validators(CheckAllowment) # Register your Validator for payment, requires to set before init app
    paycom.Register_Callback(CallbackPayme) # Register your Callback function which will be called after Creating and Performing transaction
    paycom.init_app(app, url_prefix='/payme') # Init Paycom to your application, url_prefix to add view to app, defualt /payme, in that case Flask-PaycomUz register JSON-RPC route to recieve requests from PaycomUz as https://example.uz/payme
    
    @app.get("/")
    def index():
        return "Hello World"
    

    @app.get('/create_transaction')
    def create_transaction():
        amount = 10000
        order_id = 45 # Order ID to create Transaction in Paycom
        return_url = "https://example.uz/return_url" # return Url after successful or error payment 
        url = paycom.Generate(amount=amount, return_url=return_url, order_id = order_id)

    with app.app_context():
        db.create_all() # Don't forget to create db, flask_paycomuz adds 2 table to db, Payme_Transaction and Payme_Account


    return app

app = create_app()

if __name__ == "__main__":
    app.run(debug=True)

Flask-PaycomUz models schema

# Flask-PaycomUz uses Flask-SQLAlchemy models to save data in database, it prefers to use Postgresql

class Payme_Transaction(db.Model):
    __tablename__ = 'payme_transaction'
    id = db.Column(db.Integer, primary_key = True)
    payme_id = db.Column(db.Integer, unique=True)
    transaction_id = db.Column(db.String, unique=True)
    time = db.Column(db.BigInteger, nullable=True)
    amount = db.Column(db.Integer, nullable=True)
    state = db.Column(db.Integer, default=1)
    created_at = db.Column(db.BigInteger, nullable=False)
    account = db.relationship('Payme_Account', backref='payme_transaction')

    def result(self):
        return {"result" : {
                    "create_time" : self.created_at,
                    "transaction" : self.transaction_id,
                    "state" : self.state}
            }
        
class Payme_Account(db.Model):
    __tablename__ = 'payme_account'
    id = db.Column(db.Integer, primary_key = True)
    transaction_id = db.Column(db.ForeignKey("payme_transaction.transaction_id"))
    key = db.Column(db.String, nullable=True)
    value = db.Column(db.String, nullable=True)

Accessing Models

Select data from models

paycom.models # it contains 2 models in list, [Payme_Transaction,Payme_Account ]
Payme_Transaction, Payme_Account = paycom.models
transaction = Payme_Transaction.query.all() # You can select or filter data

Add model view to Flask-Admin

from flask_admin.contrib.sqla import ModelView
admin.add_view(ModelView(paycom.models[0], db.session))
admin.add_view(ModelView(paycom.models[1], db.session))

Task List

Merchant API methods

  • CheckPerformTransaction
  • CreateTransaction
  • CheckTransaction
  • PerformTransaction
  • CancelTransaction

Licence

This project is licensed under the MIT License (see the LICENSE file for details).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Flask-PaycomUz-1.2.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

Flask_PaycomUz-1.2.1-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file Flask-PaycomUz-1.2.1.tar.gz.

File metadata

  • Download URL: Flask-PaycomUz-1.2.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for Flask-PaycomUz-1.2.1.tar.gz
Algorithm Hash digest
SHA256 c60b0c06399466d8869029455c6a749d63571349c564eee45a6b0e095319608c
MD5 8edd9861ad7f26ac211389e2df6335ef
BLAKE2b-256 90ccf345c74b6cb7e9a6e297c7dc1e0612c73336c01107ca1fa2893923d846bb

See more details on using hashes here.

File details

Details for the file Flask_PaycomUz-1.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for Flask_PaycomUz-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a6ef78b834f01379a7e835ee821a05ca758ded833486a7990b38bdc9695f692c
MD5 c1a2a73e1fdc9897d2a5c078c5c4cc11
BLAKE2b-256 c4931d8ecd4f52a43d1c597e63f4c4bc05b9ed42a0c4cfda1a6ae2ab8677a715

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page