Skip to content

Conversation

@ganiyevuz
Copy link

@ganiyevuz ganiyevuz commented Apr 22, 2025

Menda yaqinda summa bilan bog'liq quyidagicha hatolik kuzatildi

Request from payme:

{
  "time": "2025-04-21T19:25:32.303Z",
  "body": {
    "data": {
      "method": "CreateTransaction",
      "params": {
        "id": "68069b976111b37899d50215",
        "time": 1745263532241,
        "amount": 140000000,
        "account": {
          "order_id": "217"
        }
      },
      "url": "***************",
      "timeout": 30000
    }
  }
}

Response from server:

{
  "time": "2025-04-21T19:25:32.346Z",
  "body": {
    "data": {
      "error": {
        "code": -32400,
        "message": {
          "uz": "Tizimda xatolik yuzaga keldi.",
          "ru": "Внутренняя ошибка сервиса.",
          "en": "Internal service error."
        },
        "data": "numeric field overflow\nDETAIL:  A field with precision 10, scale 2 must round to an absolute value less than 10^8.\n"
      }
    }
  }
}
numeric field overflow
DETAIL:  A field with precision 10, scale 2 must round to an absolute value less than 10^8.

Men oylik tarif uchun 1400000 (1 million 400 ming) tolov qabul qilishim kerak edi lekin ushbu xatolik yuzaga keldi.
Bunda PaymeTransactions modelida amount = DecimalField(max_digits=10, decimal_places=2) yozilgan va generate_pay_link methodda amount = amount * 100 tolov check yaratish paytida tiyinga otkazish uchun.
Lekin raqamlar soni avval 7 honali edi va *100 sababli 9 honaga kopayib ketadi va bizda max_digits=10 bu bizga maksimal 8 honali butun va 2 honali qoldiq sonni saqlashga imkonini beradi lekin 9 yoki undan katta (10000000) 10 million kabi tolovlar yaratishda yana qoshimcha 2 hona qoshilib limitdan oshib ketadi

bunga quyidagicha yechim qildim:

#settings.py
PAYME_TRANSACTION_AMOUNT_MAX_DIGITS = 10



MAX_DIGITS = getattr(settings, "PAYME_TRANSACTION_AMOUNT_MAX_DIGITS", 10) + 2 # include 2 tiyyin digits


class PaymeTransactions(Model):
    ......
        amount = DecimalField(
        max_digits=MAX_DIGITS,
        decimal_places=2
    )

bu orqali foydalanuvchilar limitni ozlariga kerakli holatda ozgartirib olaveradilar defaul holatda esa 11 (99 999 999 99) to'qson to'qqiz million ....) va 2 honali tiyin gacha qabul qila olishadi va qoshimcha xatoliklarni oldini olish uchun system check va Exeption ham yozib qoydim. qoshimcha malumot uchun readme ni korishingiz mumkin

…N_AMOUNT_MAX_DIGITS

- Introduced PAYME_TRANSACTION_AMOUNT_MAX_DIGITS setting to allow custom max digit limit for transaction amounts.
- Included human-readable limit representation (e.g., 99 million 999 ming 999 soʻm 99 tiyin).
- Added validation to raise `TransactionAmountLimitExceeded` error when limit is exceeded.
- Error includes guidance to update settings.py for higher transaction support.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant