requestPaymentToken method

Future<String> requestPaymentToken({
  1. required double amount,
  2. required String currency,
  3. required String integrationId,
  4. required BillingData billingData,
  5. int userTokenExpiration = ApiConstants.defaultUserTokenExpiration,
})

Request payment token

Implementation

Future<String> requestPaymentToken({
  required double amount,
  required String currency,
  required String integrationId,
  required BillingData billingData,
  int userTokenExpiration = ApiConstants.defaultUserTokenExpiration,
}) async {
  if (_authToken == null || _orderId == null) {
    throw const PaymentInitializationException('Order not created or token not available');
  }

  try {
    final response = await _apiService.post<Map<String, dynamic>>(
      ApiConstants.keys,
      data: {
        "auth_token": _authToken,
        "expiration": userTokenExpiration,
        "amount_cents": ((amount * 100).round()).toString(),
        "order_id": _orderId,
        "billing_data": billingData.toJson(),
        "currency": currency,
        "integration_id": integrationId,
        "lock_order_when_paid": false
      },
    );

    if (response.statusCode != null && response.statusCode! >= 200) {
      return response.data?["token"]?.toString() ?? '';
    } else {
      throw const PaymentTokenException();
    }
  } catch (e) {
    if (e is PaymobException) rethrow;
    throw const PaymentTokenException('Failed to get payment token');
  }
}