createPayment method
Step 1: Create payment transaction POST /payments/collect
Implementation
Future<LokotroPaymentResponse> createPayment(LokotroPaymentRequest request) async {
try {
LokotroPayLog.d('payment.create', {
'customer_reference': request.customerReference,
'amount': request.amount,
'currency': request.currency,
'payment_method': request.paymentMethod,
});
// 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!);
LokotroPayLog.d('payment.create.ok', {
'transaction_id': paymentResponse.transactionId,
'status': paymentResponse.status,
});
return paymentResponse;
} else {
throw LokotroPaymentException(
message: response.message,
code: 'PAYMENT_CREATION_FAILED',
);
}
} catch (e) {
LokotroPayLog.m('payment.create.err', 'create payment failed (type=${e.runtimeType})');
rethrow;
}
}