Skip to content

Commit dbb8ba9

Browse files
committed
feat: add CapchaError exception and implement retry logic for capcha processing in MBBank classes
1 parent 662bd30 commit dbb8ba9

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

mbbank/main.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def __init__(self, err_out):
3333
self.message = err_out['message']
3434
super().__init__(f"{err_out['responseCode']} | {err_out['message']}")
3535

36+
class CapchaError(MBBankError):
37+
def __init__(self, err_out):
38+
super().__init__(err_out)
3639

3740
class MBBank:
3841
"""Core class
@@ -180,7 +183,9 @@ def login(self, captcha_text: str):
180183
raise MBBankError(data_out["result"])
181184

182185
def _authenticate(self):
183-
while True:
186+
try_count = 0
187+
while try_count < self.retry_times:
188+
try_count += 1
184189
self._userinfo = None
185190
self.sessionId = None
186191
self._temp = {}
@@ -192,6 +197,8 @@ def _authenticate(self):
192197
if e.code == "GW283":
193198
continue # capcha error, try again
194199
raise e
200+
raise CapchaError(f"Exceeded maximum retry times for capcha processing ({self.retry_times})")
201+
195202

196203
def _verify_biometric_check(self):
197204
self._req("https://online.mbbank.com.vn/api/retail-go-ekycms/v1.0/verify-biometric-nfc-transaction")

mbbank/mbasync.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import aiohttp
99

1010
from .capcha_ocr import CapchaProcessing
11-
from .main import MBBankError, MBBank
11+
from .main import MBBankError, MBBank, CapchaError
1212
from .wasm_helper import wasm_encrypt
1313
from .main import headers_default
1414
from .modals import BalanceResponseModal, BalanceLoyaltyResponseModal, BankListResponseModal, \
@@ -137,7 +137,8 @@ async def _verify_biometric_check(self):
137137
await self._req("https://online.mbbank.com.vn/api/retail-go-ekycms/v1.0/verify-biometric-nfc-transaction")
138138

139139
async def _authenticate(self):
140-
while True:
140+
try_count = 0
141+
while try_count < self.retry_times:
141142
self._userinfo = None
142143
self.sessionId = None
143144
self._temp = {}
@@ -151,6 +152,7 @@ async def _authenticate(self):
151152
if e.code == "GW283":
152153
continue # capcha error, try again
153154
raise e
155+
raise CapchaError(f"Exceeded maximum retry times for capcha processing ({self.retry_times})")
154156

155157
async def _req(self, url, *, json=None, headers=None):
156158
if headers is None:

0 commit comments

Comments
 (0)