createPayment method
Create payment transaction
Implementation
Future<LokotroEWalletPaymentResponse> createPayment({
required String customerReference,
required double amount,
required String currency,
String? notifyUrl,
String? successRedirectUrl,
String? failRedirectUrl,
}) async {
try {
final requestData = {
'customer_reference': customerReference,
'amount': amount,
'currency': currency.toLowerCase(),
'payment_method': 'wallet',
'user_info': 'none',
'payment_method_info': 'none',
'fee_covered_by': 'buyer',
'delivery_behaviour': 'direct_delivery',
if (notifyUrl != null) 'notify_url': notifyUrl,
if (successRedirectUrl != null) 'success_redirect_url': successRedirectUrl,
if (failRedirectUrl != null) 'fail_redirect_url': failRedirectUrl,
};
final response = await _httpClient.post<Map<String, dynamic>>(
'/payments/collect',
data: requestData,
parser: (data) => data as Map<String, dynamic>,
);
if (response.isSuccess && response.data != null) {
final responseData = response.data!['data'] as Map<String, dynamic>;
return LokotroEWalletPaymentResponse(
success: true,
transactionId: responseData['transaction_id'] as String,
status: responseData['status'] as String,
amount: responseData['amount'] as double,
currency: responseData['currency'] as String,
message: response.data!['message'] as String,
);
} else {
throw LokotroPayException(
message: response.message,
code: 'PAYMENT_CREATION_FAILED',
);
}
} catch (e) {
LokotroPayLog.m('ewallet.create.err', 'create payment failed (type=${e.runtimeType})');
rethrow;
}
}