createPayment method

Step 1: Create payment transaction POST /payments/collect

Implementation

Future<LokotroPaymentResponse> createPayment(LokotroPaymentRequest request) async {
  try {
    if (kDebugMode) {
      debugPrint('[Lokotro Payment] Creating payment: ${request.toString()}');
    }

    // Generate idempotency key to prevent duplicate payments
    final idempotencyKey = '${request.customerReference}_${DateTime.now().millisecondsSinceEpoch}';

    final response = await _httpClient.post<Map<String, dynamic>>(
      '/payments/collect',
      data: request.toJson(),
      options: Options(headers: {'idempotency-key': idempotencyKey}),
      parser: (data) => data as Map<String, dynamic>,
    );

    if (response.isSuccess && response.data != null) {
      final paymentResponse = LokotroPaymentResponse.fromJson(response.data!);

      if (kDebugMode) {
        debugPrint('[Lokotro Payment] Payment created: ${paymentResponse.toString()}');
      }

      return paymentResponse;
    } else {
      throw LokotroPaymentException(
        message: response.message,
        code: 'PAYMENT_CREATION_FAILED',
      );
    }
  } catch (e) {
    if (kDebugMode) {
      debugPrint('[Lokotro Payment] Create payment error: $e');
    }
    rethrow;
  }
}