inquireTransaction static method

Future<ApiResponse> inquireTransaction({
  1. required String orderId,
  2. required String accountNum,
})

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;
}