{"id":27108896,"url":"https://github.com/odya-llc/flask_paycomuz","last_synced_at":"2025-04-06T22:37:43.374Z","repository":{"id":58060873,"uuid":"529678191","full_name":"Odya-LLC/flask_paycomuz","owner":"Odya-LLC","description":"Paycom.uz integration for Flask application (only for Uzbekistan)","archived":false,"fork":false,"pushed_at":"2022-10-26T10:16:37.000Z","size":48,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-23T16:46:06.521Z","etag":null,"topics":["flask","odya","paycomuz","payment-gateway","paymeuz"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Odya-LLC.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-08-27T19:26:31.000Z","updated_at":"2023-03-03T13:52:53.000Z","dependencies_parsed_at":"2022-09-01T02:32:16.750Z","dependency_job_id":null,"html_url":"https://github.com/Odya-LLC/flask_paycomuz","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odya-LLC%2Fflask_paycomuz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odya-LLC%2Fflask_paycomuz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odya-LLC%2Fflask_paycomuz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odya-LLC%2Fflask_paycomuz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Odya-LLC","download_url":"https://codeload.github.com/Odya-LLC/flask_paycomuz/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247563938,"owners_count":20958971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","odya","paycomuz","payment-gateway","paymeuz"],"created_at":"2025-04-06T22:37:42.683Z","updated_at":"2025-04-06T22:37:43.358Z","avatar_url":"https://github.com/Odya-LLC.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flask-PaycomUz\n\u003e Only for Uzbekistan\n\nPaycom.uz integration for Flask\n\n## Links\n* [About PaycomUz](https://business.payme.uz/)\n* [PaycomUz Docs](https://developer.help.paycom.uz/ru)\n* [PaycomUz Sandbox](https://test.paycom.uz/instruction)\n## How it Works\n\n\n### Install \n\n```\npip install Flask-PaycomUz\n```\n\n### Add your credentials from PaycomUz to config file\n\n```python\nPAYCOM_ID = \"your merchant ID\"\nPAYCOM_KEY = \"your sercet key\" \n```\n\n### Create Flask App With Flask-PaycomUz\n\n\n```python\nfrom flask_paycomuz import Paycom\nfrom flask import *\nfrom flask_sqlalchemy import SQLAlchemy\n\ndb = SQLAlchemy()\npaycom = Paycom(db)\n\ndef 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\n    order_id = account.get('order_id') \n    res = Order.query.filter(Order.id == order_id).first()\n    detail = {\n            \"discount\": { # скидка, необязательное поле\n                \"title\": \"Скидка 5%\",\n                \"price\": 10000\n            },\n            \"shipping\": { # доставка, необязательное поле\n                \"title\": \"Доставка до ттз-4 28/23\",\n                \"price\": 500000\n            },\n            \"items\": [ # товарная позиция, обязательное поле для фискализации\n                {\n                    \"title\": \"Помидоры\", # нааименование товара или услуги\n                    \"price\": 505000, # цена за единицу товара или услуги, сумма указана в тийинах\n                    \"count\": 2, # кол-во товаров или услуг\n                    \"code\": \"00702001001000001\", #  код *ИКПУ обязательное поле\n                    \"units\": 241092, # значение изменится в зависимости от вида товара\n                    \"vat_percent\": 15, # обязательное поле, процент уплачиваемого НДС для данного товара или услуги\n                    \"package_code\": \"123456\" # Код упаковки для конкретного товара или услуги, содержится на сайте в деталях найденного ИКПУ.\n                }\n            ]\n        }\n    if res:\n        return True, detail\n    return False, {}\n\ndef CallbackPayme(transaction): # After Creating and Performing transaction from Payme this function will call with Payme_Transaction as argument\n    if transaction.state == 1: # Successful creating transaction in Payme\n        pass\n    if transaction.state == 2: # Successful performing transaction in Payme\n        pass\n    \n\n\ndef create_app():\n    app = Flask(__name__)\n    app.config.from_pyfile('config.py')\n    \n    paycom.Register_Account_Data(['order_id']) # Register Paycom payment details, requires to set before init app\n    paycom.Register_Validators(CheckAllowment) # Register your Validator for payment, requires to set before init app\n    paycom.Register_Callback(CallbackPayme) # Register your Callback function which will be called after Creating and Performing transaction\n    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\n    \n    @app.get(\"/\")\n    def index():\n        return \"Hello World\"\n    \n\n    @app.get('/create_transaction')\n    def create_transaction():\n        amount = 10000\n        order_id = 45 # Order ID to create Transaction in Paycom\n        return_url = \"https://example.uz/return_url\" # return Url after successful or error payment \n        url = paycom.Generate(amount=amount, return_url=return_url, order_id = order_id)\n\n    with app.app_context():\n        db.create_all() # Don't forget to create db, flask_paycomuz adds 2 table to db, Payme_Transaction and Payme_Account\n\n\n    return app\n\napp = create_app()\n\nif __name__ == \"__main__\":\n    app.run(debug=True)\n```\n\n### Flask-PaycomUz models schema\n\n\n```python\n\"\"\"\nFlask-PaycomUz uses Flask-SQLAlchemy models to save data in database, it prefers to use Postgresql\n\"\"\"\nclass Payme_Transaction(db.Model):\n    __tablename__ = 'payme_transaction'\n    id = db.Column(db.Integer, primary_key = True)\n    payme_id = db.Column(db.Integer, unique=True)\n    transaction_id = db.Column(db.String, unique=True)\n    time = db.Column(db.BigInteger, nullable=True)\n    amount = db.Column(db.Integer, nullable=True)\n    state = db.Column(db.Integer, default=1)\n    created_at = db.Column(db.BigInteger, nullable=False)\n    account = db.relationship('Payme_Account', backref='payme_transaction')\n\n    def result(self):\n        return {\"result\" : {\n                    \"create_time\" : self.created_at,\n                    \"transaction\" : self.transaction_id,\n                    \"state\" : self.state}\n            }\n        \nclass Payme_Account(db.Model):\n    __tablename__ = 'payme_account'\n    id = db.Column(db.Integer, primary_key = True)\n    transaction_id = db.Column(db.ForeignKey(\"payme_transaction.transaction_id\"))\n    key = db.Column(db.String, nullable=True)\n    value = db.Column(db.String, nullable=True)\n```\n### Accessing Models\n\n\nSelect data from models\n\n```python\npaycom.models # it contains 2 models in list, [Payme_Transaction,Payme_Account ]\nPayme_Transaction, Payme_Account = paycom.models\ntransaction = Payme_Transaction.query.all() # You can select or filter data\n```\n\nAdd model view to Flask-Admin\n\n```python\nfrom flask_admin.contrib.sqla import ModelView\nadmin.add_view(ModelView(paycom.models[0], db.session))\nadmin.add_view(ModelView(paycom.models[1], db.session))\n\n```\n\n## Task List\n\n### Merchant API methods\n\n- [x] CheckPerformTransaction\n- [x] CreateTransaction\n- [x] CheckTransaction\n- [x] PerformTransaction\n- [x] CancelTransaction\n\n## Licence\nThis project is licensed under the MIT License (see the `LICENSE` file for details).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodya-llc%2Fflask_paycomuz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fodya-llc%2Fflask_paycomuz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodya-llc%2Fflask_paycomuz/lists"}