inquireTransaction static method
Inquires about the status of a transaction using the provided transaction ID.
orderId: The order ID associated with the transaction.accountNum: The merchant's Easypaisa account number.
Throws an exception if required credentials or keys are not initialized, or if the API request fails or the response signature is invalid.
Returns an ApiResponse object containing the transaction status.
Implementation
static Future<ApiResponse> inquireTransaction({
required String orderId,
required String accountNum,
}) async {
_validateCredentialsAndKeys();
// Prepare the API request
final url =
'${EasypaisaWithRSA.isSandbox ? _sandboxUrl : _liveUrl}/inquire-transaction';
final requestBody = {
'orderId': orderId,
'accountNum': accountNum,
'storeId': EasypaisaWithRSA.storeId!,
};
final requestJson = jsonEncode(requestBody);
final signature =
RSAUtils.signData(requestJson, EasypaisaWithRSA.privateKeyPem!);
final jsonPayload = {
'request': requestBody,
'signature': signature,
};
// Send the API request
final response = await http.post(
Uri.parse(url),
headers: _buildHeaders(),
body: jsonEncode(jsonPayload),
);
_validateResponse(response);
// Parse and verify the API response
final apiResponseJson = jsonDecode(response.body);
final isSignatureValid = RSAUtils.verifySignature(
jsonEncode(apiResponseJson['response']),
apiResponseJson['signature'],
EasypaisaWithRSA.publicKeyPem!,
);
final apiResponse = ApiResponse.fromJson(apiResponseJson, isSignatureValid);
if (!apiResponse.isSignatureValid) {
throw Exception('Invalid response signature.');
}
return apiResponse;
}