@Override
  public String registerOrder(Order order) {
    Map<String, Object> metadata = new HashMap<>();
    metadata.put("A5LId", order.getId());

    Optional<String> method = Optional.of("ideal");
    CreatePayment payment =
        new CreatePayment(
            method,
            (double) order.getAmount(),
            "Area FiftyLAN Ticket",
            returnUrl + "?order=" + order.getId(),
            Optional.empty(),
            metadata);

    // First try is for IOExceptions coming from the Mollie Client.
    try {
      // Create the payment over at Mollie
      ResponseOrError<Payment> molliePayment = mollie.payments().create(payment);

      if (molliePayment.getSuccess()) {
        // All good, update the order
        updateOrder(order, molliePayment);
        return molliePayment.getData().getLinks().getPaymentUrl();
      } else {
        // Mollie returned an error.
        handleMollieError(molliePayment);
        return null;
      }
    } catch (IOException e) {
      // This indicates the HttpClient encountered some error
      throw new PaymentException("Could not connect to the Paymentprovider");
    }
  }