getTransactionStatus method
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');
}
}