getTransactionStatus method

Future<TransactionStatusResponse> getTransactionStatus({
  1. required String paymentId,
})

Get transaction status by payment_id

Reference: https://docs.mobibox.io/docs/guides/checkout_integration#get_trans_status-by-payment_id

After 3DS redirect, use this method to check the final payment status

paymentId - Payment ID from the initial payment response

Returns TransactionStatusResponse with payment status

Implementation

Future<TransactionStatusResponse> getTransactionStatus({
  required String paymentId,
}) async {
  final uri = Uri.parse('$checkoutHost/api/v1/payment/status');

  // Generate hash: SHA1(MD5(UPPERCASE(payment.id + merchant.pass)))
  final hash = MobiPayHash.generateTransactionStatusHash(
    paymentId: paymentId,
    password: password,
  );

  final requestBody = <String, dynamic>{
    'merchant_key': merchantKey,
    'payment_id': paymentId,
    'hash': hash,
  };

  final headers = <String, String>{
    'Content-Type': 'application/json',
  };

  try {
    final response = await http.post(
      uri,
      headers: headers,
      body: jsonEncode(requestBody),
    );

    if (response.statusCode == 200) {
      final jsonResponse = jsonDecode(response.body) as Map<String, dynamic>;
      final statusResponse = TransactionStatusResponse.fromJson(jsonResponse);
      return statusResponse;
    } else {
      final errorBody = jsonDecode(response.body) as Map<String, dynamic>?;
      final errorMessage = errorBody?['error_message'] as String? ??
                         'Failed to get transaction status';
      throw Exception(errorMessage);
    }
  } catch (e) {
    // Re-throw with clean error message
    if (e is Exception) {
      rethrow;
    }
    throw Exception('Error getting transaction status: $e');
  }
}