diff --git a/lib/buy/dfx/dfx_buy_provider.dart b/lib/buy/dfx/dfx_buy_provider.dart index 4dd6f1c68..670dca513 100644 --- a/lib/buy/dfx/dfx_buy_provider.dart +++ b/lib/buy/dfx/dfx_buy_provider.dart @@ -10,11 +10,11 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/connect_device/connect_device_page.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; -import 'package:cw_core/utils/proxy_wrapper.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart'; import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/utils/print_verbose.dart'; +import 'package:cw_core/utils/proxy_wrapper.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:flutter/material.dart'; @@ -115,7 +115,7 @@ class DFXBuyProvider extends BuyProvider { final message = responseBody['message'] ?? 'Service unavailable in your country'; throw Exception(message); } else { - throw Exception('Failed to sign up. Status: ${response.statusCode} ${response.body}'); + throw Exception('Failed to sign up. ${_getErrorMessage(response.statusCode, response.body)}'); } } @@ -401,4 +401,15 @@ class DFXBuyProvider extends BuyProvider { } return null; } + + String _getErrorMessage(int statusCode, String body) { + final responseBody = jsonDecode(body) as Map; + final message = responseBody['message']?.toString() ?? ''; + + if (message.contains("address must match")) { + return "The wallet type must match the selected currency"; + } + + return message.isNotEmpty ? message : "Unknown error: ${statusCode}"; + } } diff --git a/lib/core/open_crypto_pay/exceptions.dart b/lib/core/open_crypto_pay/exceptions.dart index 71010482f..af133d6e5 100644 --- a/lib/core/open_crypto_pay/exceptions.dart +++ b/lib/core/open_crypto_pay/exceptions.dart @@ -4,8 +4,7 @@ class OpenCryptoPayException implements Exception { OpenCryptoPayException([this.message = '']); @override - String toString() => - 'OpenCryptoPayException${message.isNotEmpty ? ': $message' : ''}'; + String toString() => message.isNotEmpty ? message : 'OpenCryptoPayException'; } class OpenCryptoPayNotSupportedException extends OpenCryptoPayException { diff --git a/lib/core/open_crypto_pay/open_cryptopay_service.dart b/lib/core/open_crypto_pay/open_cryptopay_service.dart index f6c11bbbf..d913a619c 100644 --- a/lib/core/open_crypto_pay/open_cryptopay_service.dart +++ b/lib/core/open_crypto_pay/open_cryptopay_service.dart @@ -35,14 +35,12 @@ class OpenCryptoPayService { final response = await ProxyWrapper().get(clearnetUri: Uri.https(uri.authority, uri.path, queryParams)); + final body = jsonDecode(response.body) as Map; if (response.statusCode == 200) { - final body = jsonDecode(response.body) as Map; - if (body.keys.contains("txId")) return body["txId"] as String; throw OpenCryptoPayException(body.toString()); } - throw OpenCryptoPayException( - "Unexpected status code ${response.statusCode} ${response.body}"); + throw OpenCryptoPayException("${response.statusCode}: ${body["message"]}"); } Future cancelOpenCryptoPayRequest(OpenCryptoPayRequest request) async {