public async Task <HostedPaymentPageCreateSessionResponse> CreateSession(
            HostedPaymentPageCreateSessionRequest session)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri);

            return(await Post <HostedPaymentPageCreateSessionResponse>(url, session).ConfigureAwait(false));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns a collection of payouts.
        /// </summary>
        /// <param name="startDate">Optional. ISO-8601 formatted date with optional time string</param>
        /// <param name="endDate">Optional. ISO-8601 formatted date with optional time string</param>
        /// <param name="currencyCode">Optional. ISO-3166 Currency Code.</param>
        /// <param name="size">Optional. How many elements to include in the result. If no value for size is provided, a default of 20 will be used.</param>
        /// <param name="offset">Optional. The current offset. Describes "where" in a collection the current starts.</param>
        /// <returns><see cref="SettlementsGetAllPayoutsResponse"/></returns>
        public async Task <SettlementsGetAllPayoutsResponse> GetAllPayouts(string startDate = "", string endDate = "", string currencyCode = "",
                                                                           int size         = 0, int offset = 0)
        {
            var parameters = new NameValueCollection();

            if (!string.IsNullOrEmpty(startDate))
            {
                parameters.Add("start_date", startDate);
            }

            if (!string.IsNullOrEmpty(endDate))
            {
                parameters.Add("end_date", endDate);
            }

            if (!string.IsNullOrEmpty(currencyCode))
            {
                parameters.Add("currency_code", currencyCode);
            }

            if (size > 0)
            {
                parameters.Add("size", size.ToString("F0"));
            }

            if (offset > 0)
            {
                parameters.Add("offset", offset.ToString("F0"));
            }

            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, null, parameters);

            return(await Get <SettlementsGetAllPayoutsResponse>(url).ConfigureAwait(false));
        }
        /// <summary>
        /// Returns a collection of transactions.
        /// </summary>
        /// <param name="paymentReference">Optional. The reference id of the payout</param>
        /// <param name="orderId">Optional. The Klarna assigned order id reference</param>
        /// <param name="size">
        ///     Optional. How many elements to include in the result. If no value for size is provided,
        ///     a default of 20 will be used.
        /// </param>
        /// <param name="offset">Optional. The current offset. Describes "where" in a collection the current starts.</param>
        /// <returns><see cref="TransactionCollection"/></returns>
        public async Task <TransactionCollection> GetTransactions(string paymentReference = "", string orderId = "",
                                                                  int size = 0, int offset = 0)
        {
            var parameters = new NameValueCollection();

            if (!string.IsNullOrEmpty(paymentReference))
            {
                parameters.Add("payment_reference", paymentReference);
            }

            if (!string.IsNullOrEmpty(orderId))
            {
                parameters.Add("order_id", orderId);
            }

            if (size > 0)
            {
                parameters.Add("size", size.ToString("F0"));
            }

            if (offset > 0)
            {
                parameters.Add("offset", offset.ToString("F0"));
            }

            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl,
                                                          ApiControllers.SettlementTransactions,
                                                          null,
                                                          parameters);

            return(await Get <TransactionCollection>(url).ConfigureAwait(false));
        }
        /// <summary>
        /// Creates a new HPP session
        /// </summary>
        /// <param name="session">The <see cref="HppModel.SessionCreationRequestV1"/> object</param>
        /// <returns>A single <see cref="HppModel.SessionCreationResponseV1"/> object</returns>
        public async Task <HppModel.SessionCreationResponseV1> CreateSession(
            HppModel.SessionCreationRequestV1 session)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri);

            return(await Post <HppModel.SessionCreationResponseV1>(url, session).ConfigureAwait(false));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Returns a collection of transactions.
        /// </summary>
        /// <param name="paymentReference">Optional. The reference id of the payout</param>
        /// <param name="orderId">Optional. The Klarna assigned order id reference</param>
        /// <param name="size">Optional. How many elements to include in the result. If no value for size is provided, a default of 20 will be used.</param>
        /// <param name="offset">Optional. The current offset. Describes "where" in a collection the current starts.</param>
        /// <returns></returns>
        public async Task <SettlementsGetTransactionsResponse> GetTransactions(string paymentReference = "", string orderId = "",
                                                                               int size = 0, int offset = 0)
        {
            var nvm = new NameValueCollection();

            if (!string.IsNullOrEmpty(paymentReference))
            {
                nvm.Add("payment_reference", paymentReference);
            }

            if (!string.IsNullOrEmpty(orderId))
            {
                nvm.Add("order_id", orderId);
            }

            if (size > 0)
            {
                nvm.Add("size", size.ToString("F0"));
            }

            if (offset > 0)
            {
                nvm.Add("offset", offset.ToString("F0"));
            }

            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.SettlementTransactions, null, nvm);

            var response = await Get <SettlementsGetTransactionsResponse>(url);

            return(response);
        }
        /// <summary>
        /// Creates a new order
        /// <a href="https://developers.klarna.com/api/#payments-api-create-a-new-order">
        ///     https://developers.klarna.com/api/#payments-api-create-a-new-order
        /// </a>
        /// </summary>
        /// <param name="authorizationToken">Authorization token from JS client</param>
        /// <param name="order">The <see cref="PaymentOrder"/> object</param>
        /// <returns><see cref="PaymentOrderResponse"/></returns>
        public async Task <Order> CreateOrder(string authorizationToken, CreateOrderRequest order)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl,
                                                          ApiControllers.PaymentAuthorizations,
                                                          $"{authorizationToken}/order");

            return(await Post <Order>(url, order).ConfigureAwait(false));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Updates an existing order.
        /// Please note: an order can only be updated when the status is 'checkout_incomplete'.
        /// <a href="https://developers.klarna.com/api/#checkout-api-update-an-order">https://developers.klarna.com/api/#checkout-api-update-an-order</a>
        /// </summary>
        /// <param name="order">The <see cref="CheckoutOrder"/> object</param>
        /// <returns><see cref="CheckoutOrder"/></returns>
        public async Task <CheckoutOrder> UpdateOrder(CheckoutOrder order)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, order.OrderId);

            var response = await Post <CheckoutOrder>(url, order);

            return(response);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Use this API call to read an order from Klarna.
        /// Note that orders should only be read from the checkout API until the order is completed. Completed orders should be read using the order management API
        /// <a href="https://developers.klarna.com/api/#checkout-api-retrieve-an-order">https://developers.klarna.com/api/#checkout-api-retrieve-an-order</a>
        /// </summary>
        /// <param name="orderId">ID of the order to retrieve</param>
        /// <returns><see cref="CheckoutOrder"/></returns>
        public async Task <CheckoutOrder> GetOrder(string orderId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, orderId);

            var response = await Get <CheckoutOrder>(url);

            return(response);
        }
        /// <summary>
        /// Get HPP session status
        /// </summary>
        /// <param name="sessionId">HPP session id</param>
        /// <returns>A single <see cref="HostedPaymentPageSessionStatus"/> object</returns>
        public async Task <HostedPaymentPageSessionStatus> GetSessionStatus(string sessionId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"{sessionId}/status");

            var response = await Get <HostedPaymentPageSessionStatus>(url);

            return(response);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Get all captures for one order
        /// <a href="https://developers.klarna.com/api/#order-management-api-get-all-captures-for-one-order">https://developers.klarna.com/api/#order-management-api-get-all-captures-for-one-order</a>
        /// </summary>
        /// <param name="orderId">Id of order to retrieve captures</param>
        /// <returns>Collection of <see cref="OrderManagementCapture"/></returns>
        public async Task <ICollection <OrderManagementCapture> > GetCapturesForOrder(string orderId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"{orderId}/captures");

            var response = await Get <ICollection <OrderManagementCapture> >(url);

            return(response);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Get one capture
        /// <a href="https://developers.klarna.com/api/#order-management-api-get-one-capture">https://developers.klarna.com/api/#order-management-api-get-one-capture</a>
        /// </summary>
        /// <param name="orderId">Id of order that contains the capture</param>
        /// <param name="captureId">Id of capture to retrieve</param>
        /// <returns><see cref="OrderManagementCapture"/></returns>
        public async Task <OrderManagementCapture> GetCapture(string orderId, string captureId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"{orderId}/captures/{captureId}");

            var response = await Get <OrderManagementCapture>(url);

            return(response);
        }
        /// <summary>
        /// Retrieve an existing settlement
        /// To read the settlement resource provide the settlement identifier.
        /// </summary>
        /// <param name="settlementId">Unique settlement identifier.</param>
        /// <param name="keyId">Unique identifier for the public key used for encryption of the card data</param>
        /// <returns>A single <see cref="VirtualCardSettlement"/> object</returns>
        public async Task <VirtualCardSettlement> GetSettlement(string settlementId, string keyId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, settlementId);

            return(await Get <VirtualCardSettlement>(url, new Dictionary <string, string> {
                { "KeyId", keyId }
            }).ConfigureAwait(false));
        }
        /// <summary>
        /// Create a new settlement
        /// To create a settlement resource provide a completed order identifier and (optionally) a promise identifier.
        /// </summary>
        /// <param name="request">The <see cref="VirtualCardCreateSettlementRequest"/> object</param>
        /// <returns>A single <see cref="VirtualCardSettlement"/> object</returns>
        public async Task <VirtualCardSettlement> CreateSettlement(VirtualCardCreateSettlementRequest request)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri);

            var response = await Post <VirtualCardSettlement>(url, request);

            return(response);
        }
        /// <summary>
        /// Create capture
        /// <a href="https://developers.klarna.com/api/#order-management-api-create-capture">https://developers.klarna.com/api/#order-management-api-create-capture</a>
        /// </summary>
        /// <param name="orderId">Id of order to create capture</param>
        /// <param name="capture">The <see cref="OrderManagementCapture"/> object</param>
        /// <returns>Object of <see cref="OrderManagementCapture"/> </returns>
        public async Task <OrderManagementCapture> CreateCapture(string orderId, OrderManagementCreateCapture capture)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"{orderId}/captures");

            OrderManagementCapture response = await Post <OrderManagementCapture>(url, capture);

            return(response);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Create a new order using the customer token
        /// </summary>
        /// <param name="customerToken">Customer token</param>
        /// <param name="order">A <see cref="CustomerTokenOrder"/> object</param>
        /// <returns><see cref="CustomerTokenCreateOrderResponse"/></returns>
        public async Task <CustomerTokenCreateOrderResponse> CreateOrder(string customerToken, CustomerTokenOrder order)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"{customerToken}/order");

            var response = await Post <CustomerTokenCreateOrderResponse>(url, order);

            return(response);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Read customer tokens details
        /// </summary>
        /// <param name="customerToken">Customer token</param>
        /// <returns><see cref="CustomerTokenDetails"/></returns>
        public async Task <CustomerTokenDetails> GetCustomerTokenDetails(string customerToken)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, customerToken);

            var response = await Get <CustomerTokenDetails>(url);

            return(response);
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Create a new order
        /// <a href="https://developers.klarna.com/api/#payments-api-create-a-new-order">https://developers.klarna.com/api/#payments-api-create-a-new-order</a>
        /// </summary>
        /// <param name="authorizationToken">Authorization token from JS client</param>
        /// <param name="order">The <see cref="PaymentOrder"/> object</param>
        /// <returns><see cref="PaymentOrderResponse"/></returns>
        public async Task <PaymentOrderResponse> CreateOrder(string authorizationToken, PaymentOrder order)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.PaymentAuthorizations, $"{authorizationToken}/order");

            var response = await Post <PaymentOrderResponse>(url, order);

            return(response);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Generate a consumer token
        /// <a href="https://developers.klarna.com/api/#payments-api-generate-a-consumer-token">https://developers.klarna.com/api/#payments-api-generate-a-consumer-token</a>
        /// </summary>
        /// <param name="authorizationToken">Authorization token from JS client</param>
        /// <param name="consumerTokenRequest">The <see cref="PaymentGenerateConsumerTokenRequest"/> object</param>
        /// <returns><see cref="PaymentGenerateConsumerTokenResponse"/></returns>
        public async Task <PaymentGenerateConsumerTokenResponse> GenerateConsumerToken(string authorizationToken, PaymentGenerateConsumerTokenRequest consumerTokenRequest)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.PaymentAuthorizations, $"{authorizationToken}/customer-token");

            var response = await Post <PaymentGenerateConsumerTokenResponse>(url, consumerTokenRequest);

            return(response);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Create a new credit session
        /// <a href="https://developers.klarna.com/api/#payments-api-create-a-new-credit-session">https://developers.klarna.com/api/#payments-api-create-a-new-credit-session</a>
        /// </summary>
        /// <param name="creditSession">The <see cref="PaymentCreditSession"/> object</param>
        /// <returns><see cref="PaymentCreditSessionResponse"/></returns>
        public async Task <PaymentCreditSessionResponse> CreateCreditSession(PaymentCreditSession creditSession)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri);

            var response = await Post <PaymentCreditSessionResponse>(url, creditSession);

            return(response);
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Read an existing credit session
        /// <a href="https://developers.klarna.com/api/#payments-api-read-an-existing-credit-session">https://developers.klarna.com/api/#payments-api-read-an-existing-credit-session</a>
        /// </summary>
        /// <param name="sessionId">Id of the credit session to retrieve</param>
        /// <returns><see cref="PaymentCreditSession"/></returns>
        public async Task <PaymentCreditSession> GetCreditSession(string sessionId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, sessionId);

            var response = await Get <PaymentCreditSession>(url);

            return(response);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Retrieves a settled order's settlement
        /// To read the order's settlement resource provide the order identifier.
        /// </summary>
        /// <param name="orderId">Unique identifier for the order associated to the settlement.</param>
        /// <param name="keyId">Unique identifier for the public key used for encryption of the card data.</param>
        /// <returns>A single <see cref="SettlementResponse"/> object</returns>
        public async Task <SettlementResponse> GetSettlementForOrder(string orderId, string keyId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"order/{orderId}");

            return(await Get <SettlementResponse>(url, new Dictionary <string, string> {
                { "KeyId", keyId }
            }).ConfigureAwait(false));
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Returns a specific payout based on a given payment reference.
        /// </summary>
        /// <param name="paymentReference">The reference id of the payout</param>
        /// <returns>A single <see cref="SettlementsPayout"/> object</returns>
        public async Task <SettlementsPayout> GetPayout(string paymentReference)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, paymentReference);

            var response = await Get <SettlementsPayout>(url);

            return(response);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Generates a consumer token
        /// <a href="https://developers.klarna.com/api/#payments-api-generate-a-consumer-token">
        ///     https://developers.klarna.com/api/#payments-api-generate-a-consumer-token
        /// </a>
        /// </summary>
        /// <param name="authorizationToken">Authorization token from JS client</param>
        /// <param name="consumerTokenRequest">The <see cref="CustomerTokenCreationRequest"/> object</param>
        /// <returns><see cref="CustomerTokenCreationResponse"/></returns>
        public async Task <CustomerTokenCreationResponse> GenerateConsumerToken(string authorizationToken,
                                                                                CustomerTokenCreationRequest consumerTokenRequest)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl,
                                                          ApiControllers.PaymentAuthorizations,
                                                          $"{authorizationToken}/customer-token");

            return(await Post <CustomerTokenCreationResponse>(url, consumerTokenRequest).ConfigureAwait(false));
        }
Ejemplo n.º 24
0
        /// <summary>
        /// A single settlement summed up in pdf format
        /// </summary>
        /// <param name="paymentReference">Required. The reference id of the payout</param>
        /// <returns>A <see cref="Stream"/> of content type application/pdf</returns>
        public Task <Stream> GetPdfPayoutSummary(string paymentReference)
        {
            var parameters = new NameValueCollection {
                { "payment_reference", paymentReference }
            };
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.SettlementReports, "payout", parameters);

            return(GetStream(url));
        }
Ejemplo n.º 25
0
        /// <summary>
        /// Get CSV Payout Report
        /// More information about this CSV format is available at:
        /// <a href="https://developers.klarna.com/en/gb/kco-v3/settlement-files">https://developers.klarna.com/en/gb/kco-v3/settlement-files</a>
        /// </summary>
        /// <param name="paymentReference">The reference id of the payout</param>
        /// <returns>A <see cref="Stream"/> of content type text/csv</returns>
        public async Task <Stream> GetCsvPayoutReport(string paymentReference)
        {
            var nvm = new NameValueCollection {
                { "payment_reference", paymentReference }
            };

            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.SettlementReports, "payout-with-transactions", nvm);

            return(await GetStream(url));
        }
        /// <summary>
        /// Retrieve a settled order's settlement
        /// To read the order's settlement resource provide the order identifier.
        /// </summary>
        /// <param name="orderId">Unique identifier for the order associated to the settlement.</param>
        /// <param name="keyId">Unique identifier for the public key used for encryption of the card data.</param>
        /// <returns>A single <see cref="VirtualCardSettlement"/> object</returns>
        public async Task <VirtualCardSettlement> GetSettlementForOrder(string orderId, string keyId)
        {
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, $"order/{orderId}");

            var response = await Get <VirtualCardSettlement>(url, new Dictionary <string, string> {
                { "KeyId", keyId }
            });

            return(response);
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Returns a summary for all payouts between the given dates
        /// </summary>
        /// <param name="startDate">Required. ISO-8601 formatted date with optional time string</param>
        /// <param name="endDate">Required. ISO-8601 formatted date with optional time string</param>
        /// <returns>A <see cref="Stream"/> of content type application/pdf</returns>
        public Task <Stream> GetPdfSummary(string startDate, string endDate)
        {
            var parameters = new NameValueCollection
            {
                { "start_date", startDate },
                { "end_date", endDate }
            };
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.SettlementReports, "payouts-summary", parameters);

            return(GetStream(url));
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Get CSV summary
        /// More information about this CSV format is available at:
        /// <a href="https://developers.klarna.com/en/gb/kco-v3/settlement-files">https://developers.klarna.com/en/gb/kco-v3/settlement-files</a>
        /// </summary>
        /// <param name="startDate">Required. ISO-8601 formatted date with optional time string</param>
        /// <param name="endDate">Required. ISO-8601 formatted date with optional time string</param>
        /// <returns>A <see cref="Stream"/> of content type text/csv</returns>
        public async Task <Stream> GetCsvSummary(string startDate, string endDate)
        {
            var nvm = new NameValueCollection
            {
                { "start_date", startDate },
                { "end_date", endDate }
            };

            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllers.SettlementReports, "payouts-summary-with-transactions", nvm);

            return(await GetStream(url));
        }
        public async Task <ICollection <PayoutSummary> > GetPayoutsSummary(string startDate, string endDate, string currencyCode)
        {
            var nvm = new NameValueCollection
            {
                { "start_date", startDate },
                { "end_date", endDate },
                { "currency_code", currencyCode }
            };
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, "summary", nvm);

            return(await Get <ICollection <PayoutSummary> >(url).ConfigureAwait(false));
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Returns a summary of payouts for each currency code in a date range.
        /// </summary>
        /// <param name="startDate">ISO-8601 formatted date with optional time string</param>
        /// <param name="endDate">ISO-8601 formatted date with optional time string</param>
        /// <param name="currencyCode">ISO-3166 Currency Code.</param>
        /// <returns>Collection of <see cref="SettlementsPayoutSummary"/></returns>
        public async Task <ICollection <SettlementsPayoutSummary> > GetPayoutsSummary(string startDate, string endDate, string currencyCode)
        {
            var nvm = new NameValueCollection
            {
                { "start_date", startDate },
                { "end_date", endDate },
                { "currency_code", currencyCode }
            };
            var url = ApiUrlHelper.GetApiUrlForController(ApiSession.ApiUrl, ApiControllerUri, null, nvm);

            var response = await Get <ICollection <SettlementsPayoutSummary> >(url);

            return(response);
        }