2cb6d731e9
Cabinet was calling CryptoBotService.create_invoice() directly without saving CryptoBotPayment to DB. When webhook arrived, payment lookup failed and returned HTTP 400, causing infinite retries. Now cabinet uses PaymentService.create_cryptobot_payment() (same as miniapp) with proper USD conversion via currency_converter. Also return HTTP 200 for unknown invoice_ids to stop retry spam.