"""Server-side example. pip install httpx; keep tokens and delivery out of logs.""" import os import httpx BASE = os.getenv('SAVDOLAR_API_URL', 'https://apishop.nexa.uz') + '/v1' class Savdolar: def __init__(self): self.client = httpx.Client(base_url=BASE + '/', timeout=20, headers={'Authorization': 'Bearer ' + os.environ['SAVDOLAR_API_TOKEN']}) def request(self, path, method='GET', body=None, key=None): headers = {'Idempotency-Key': key} if key else {} # Network failure leaves purchase outcome uncertain. Recover with the same stored key/body. response = self.client.request(method, path, json=body, headers=headers) try: result = response.json() except ValueError as exc: raise RuntimeError('Outcome uncertain; recover original order key') from exc if not response.is_success or not result.get('ok'): error = result.get('error', {}) raise RuntimeError({'code': error.get('code'), 'description': error.get('description'), 'request_id': result.get('request_id'), 'retry_after': response.headers.get('Retry-After')}) return result def quote(self, product_id): return self.request('quotes', 'POST', {'product_id': product_id, 'quantity': 1}) def purchase(self, exact_stored_body, stored_key): return self.request('orders', 'POST', exact_stored_body, stored_key) def lookup(self, stored_key): from urllib.parse import quote return self.request('orders/lookup?idempotency_key=' + quote(stored_key, safe='')) def order(self, order_id): return self.request('orders/' + order_id) def delivery(self, order_id): return self.request('orders/' + order_id + '/delivery') def close(self): self.client.close() # Before purchase: save customer ownership, quoted/accepted price, key, exact JSON in your DB. # After timeout: lookup(key), then retry SAME body/key if needed. Poll every 5 seconds. # Never treat queued/processing/review_required as successful delivery.