/// <summary>
        /// Will fetch data from Klarna endpoint to find customer information
        /// </summary>
        /// <param name="url">Url to poll</param>
        /// <returns>OrderDtails Object if purchase is complete</returns>
        public OrderDetails pollData(Uri url)
        {
            var        digestCreator = new Klarna.Helpers.DigestCreator();
            var        digest        = digestCreator.CreateOffline(_config.MerchantId, _config.SharedSecret);
            WebRequest request       = WebRequest.Create(_statusUrl);

            request.Method      = "GET";
            request.ContentType = "application/json";
            request.Headers.Add("Authorization", "Basic " + digest);
            try
            {
                WebResponse response = request.GetResponse();
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    string result = reader.ReadToEnd(); // do something fun...
                    Helpers.JsonConverter.GetOrderFromString(result);
                    var jsreader = new JsonTextReader(new StringReader(result));
                    var details  = new JsonSerializer().Deserialize <OrderDetails>(jsreader);
                    return(details);
                }
            }
            catch (Exception)
            {
                return(null);
            }
        }
        /// <summary>
        /// Cancels the order
        /// </summary>
        public void Cancel()
        {
            if (_klarnaId == String.Empty)
            {
                throw new Exception("Cannot cancel an order that has not been created");
            }
            var        digestCreator = new Klarna.Helpers.DigestCreator();
            var        digest        = digestCreator.CreateOffline(_config.MerchantId, _config.SharedSecret);
            WebRequest request       = WebRequest.Create(GetBaseUrl() + "/v1/" + _config.MerchantId + "/orders/" + _klarnaId + "/cancel");

            request.Method      = "POST";
            request.ContentType = "application/json";
            request.Headers.Add("Authorization", "Basic " + digest);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode != HttpStatusCode.NoContent)
            {
                throw new Exception("Something went wrong with the cancellation");
            }
        }
Exemple #3
0
        private HttpWebResponse SendRequest(Uri url, string method, JObject data = null)
        {
            var            digestCreator = new Klarna.Helpers.DigestCreator();
            var            digest        = digestCreator.CreateDigest(_config.MerchantId, _config.SharedSecret);
            HttpWebRequest request       = (HttpWebRequest)WebRequest.Create(url);

            request.Method      = method;
            request.ContentType = "application/json";
            request.UserAgent   = "Mnording Instore SDK - " + Assembly.GetExecutingAssembly().GetName().Version;
            request.Headers.Add("Authorization", "Basic " + digest);
            if (data != null)
            {
                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    streamWriter.Write(data.ToString());
                }
            }
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            return(response);
        }
        private void SendOrder()
        {
            WebRequest request = WebRequest.Create(GetBaseUrl() + "/v1/" + _config.MerchantId + "/orders");

            request.Method = "POST";
            JsonSerializer jsonWriter = new JsonSerializer
            {
                NullValueHandling = NullValueHandling.Ignore
            };
            JObject ob = JObject.FromObject(this, jsonWriter);

            var digestCreator = new Klarna.Helpers.DigestCreator();
            var digest        = digestCreator.CreateOffline(_config.MerchantId, _config.SharedSecret);

            request.ContentType = "application/json";
            request.Headers.Add("Authorization", "Basic " + digest);

            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                streamWriter.Write(ob.ToString());
            }
            WebResponse response = request.GetResponse();

            _status = Status.Sent;
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                string  result        = reader.ReadToEnd(); // do something fun...
                JObject orderResponse = JObject.Parse(result);
                _klarnaId = orderResponse["id"].ToString();
                _status   = Status.Pending;
                if (orderResponse["status_uri"] != null)
                {
                    _statusUrl = new Uri(orderResponse["status_uri"].ToString());
                    _status    = Status.Polling;
                }
            }
        }