createPayment method

Future<LokotroEWalletPaymentResponse> createPayment({
  1. required String customerReference,
  2. required double amount,
  3. required String currency,
  4. String? notifyUrl,
  5. String? successRedirectUrl,
  6. String? failRedirectUrl,
})

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