/// <summary>
        /// A method that will throw an exception which looks like { errors: "some error message"}
        /// </summary>
        public async Task ThrowStringException()
        {
            var request = RequestEngine.CreateRequest("api_permissions/current.json", Method.GET);

            //Make request
            await RequestEngine.ExecuteRequestAsync(_RestClient, request);
        }
        /// <summary>
        /// A method that will throw an exception which looks like { errors: { "order" : "some error message" } }
        /// </summary>
        /// <returns></returns>
        public async Task ThrowObjectException()
        {
            var request = RequestEngine.CreateRequest("orders.json", Method.POST);

            //Make request
            await RequestEngine.ExecuteRequestAsync(_RestClient, request);
        }
        /// <summary>
        /// Authorizes an application installation, generating an access token for the given shop.
        /// </summary>
        /// <param name="code">The authorization code generated by Bizweb OAuth, which should be a parameter named 'code' on the request querystring.</param>
        /// <param name="myApiUrl">The store's *.bizwebvietnam.net URL, which should be a paramter named 'shop' on the request querystring.</param>
        /// <param name="apiKey">Your app's public API key.</param>
        /// <param name="apiSecretKey">Your app's secret key.</param>
        /// <returns>The <see cref="OAuthResult"/> that's contain access token.</returns>
        public static async Task <OAuthResult> AuthorizeWithResultAsync(string code, string myApiUrl, string apiKey,
                                                                        string apiSecretKey)
        {
            var authState = new BizwebAuthorizationState
            {
                ApiUrl = myApiUrl
            };

            //Build request body
            var content = new JsonContent(new
            {
                client_id     = apiKey,
                client_secret = apiSecretKey,
                code
            });

            using (var reqMsg = RequestEngine.CreateRequest(authState, "oauth/access_token", HttpMethod.Post, content))
            {
                var response = await RequestEngine.ExecuteRequestAsync(reqMsg, new DefaultRequestExecutionPolicy());

                var accessToken = response.Value <string>("access_token");

                IEnumerable <string> scopes = null;
                var scope = response.Value <string>("scope");
                if (scope != null)
                {
                    scope  = scope.Replace(" ", ","); // only for bizweb
                    scopes = scope.Split(',');
                }

                return(new OAuthResult(accessToken, scopes));
            }
        }
Beispiel #4
0
        private static IRestRequest CreateRestRequest(string path, Method method, string rootElement = null, object payload = null, List <Parameter> parameters = null)
        {
            var request = RequestEngine.CreateRequest(path, method, rootElement);

            request.RequestFormat  = DataFormat.Json;
            request.JsonSerializer = new ZiaJsonSerializer(new JsonSerializer());
            request.AddHeader("Content-Type", "application/json");

            if (parameters != null)
            {
                foreach (var param in parameters)
                {
                    request.AddParameter(param);
                }
            }

            if (payload == null)
            {
                return(request);
            }

            if (method != Method.GET && method != Method.DELETE)
            {
                request.AddBody(payload);
            }
            else
            {
            }

            return(request);
        }
Beispiel #5
0
 /// <summary>
 /// Deletes a data in API.
 /// </summary>
 /// <param name="apiPath">API query and path, not include domain.</param>
 public async Task DeleteAsync(string apiPath)
 {
     using (var req = RequestEngine.CreateRequest(_AuthState, apiPath, HttpMethod.Delete))
     {
         await RequestEngine.ExecuteRequestToStringAsync(req, ExecutionPolicy);
     }
 }
Beispiel #6
0
 /// <summary>
 /// Gets a results in API.
 /// </summary>
 /// <param name="apiPath">API query and path, not include domain.</param>
 public async Task <string> GetAsync(string apiPath)
 {
     using (var req = RequestEngine.CreateRequest(_AuthState, apiPath, HttpMethod.Get))
     {
         return(await RequestEngine.ExecuteRequestToStringAsync(req, ExecutionPolicy));
     }
 }
        /// <summary>
        /// Lists subscribers for the ConvertKit account.
        /// </summary>
        /// <param name="page">The page of subscribers to get.</param>
        /// <returns>The <see cref="ConvertKitSubscriberList"/>.</returns>
        public async Task <ConvertKitSubscriberList> ListAsync(int page = 1)
        {
            var req = RequestEngine.CreateRequest("subscribers", Method.GET);

            if (page > 1)
            {
                req.AddParameter("page", page);
            }

            return(await RequestEngine.ExecuteRequestAsync <ConvertKitSubscriberList>(_RestClient, req));
        }
        /// <summary>
        /// Subscribes a person to multiple <see cref="ConvertKitCourse" />s.
        /// </summary>
        /// <param name="email">The subscriber's email address.</param>
        /// <param name="firstName">The subscriber's first name.</param>
        /// <param name="courseIds">A list of Course ids to subscribe them to.</param>
        /// <returns>The subscriber.</returns>
        public async Task <ConvertKitSubscriber> SubscribeToCourses(string email, string firstName, IEnumerable <long> courseIds)
        {
            long?defaultCourse = courseIds.FirstOrDefault();

            if (defaultCourse == null)
            {
                throw new NullReferenceException("You must specify at least one course id to subscribe to.");
            }

            var req = RequestEngine.CreateRequest($"Courses/{defaultCourse}/subscribe", Method.POST, "subscription");

            if (courseIds.Count() > 1)
            {
                req.AddQueryParameter("courses", string.Join(",", courseIds.Where(f => f != defaultCourse)));
            }

            return(await RequestEngine.ExecuteRequestAsync <ConvertKitSubscriber>(_RestClient, req));
        }
        /// <summary>
        /// A method that will throw an exception which looks like { errors: { "order" : [ "some error message" ] } }
        /// </summary>
        /// <returns></returns>
        public async Task ThrowArrayException()
        {
            var request = RequestEngine.CreateRequest("orders.json", Method.POST);

            //Creating an order with tax lines on both line items and the order will return an error
            var order = new ShopifyOrder()
            {
                CreatedAt = DateTime.UtcNow,
                LineItems = new List <ShopifyLineItem>()
                {
                    new ShopifyLineItem()
                    {
                        Title    = "Click Keyboard",
                        Price    = 99.99,
                        Grams    = 600,
                        Quantity = 1,
                        TaxLines = new List <ShopifyTaxLine>()
                        {
                            new ShopifyTaxLine()
                            {
                                Price = 1.0,
                                Rate  = 0.01,
                                Title = "Keyboard tax"
                            }
                        }
                    }
                },
                TaxLines = new List <ShopifyTaxLine>()
                {
                    new ShopifyTaxLine()
                    {
                        Price = 6.0,
                        Rate  = 0.06,
                        Title = "State tax"
                    }
                }
            };

            request.AddJsonBody(new { order });

            //Make request
            await RequestEngine.ExecuteRequestAsync <ShopifyOrder>(_RestClient, request);
        }
Beispiel #10
0
        private async Task <string> PostOrPutAsync(HttpMethod method, string apiPath, object data, string rootElement = null)
        {
            JsonContent content = null;

            if (string.IsNullOrEmpty(rootElement))
            {
                content = new JsonContent(data);
            }
            else
            {
                var body = new Dictionary <string, object>
                {
                    { rootElement, data }
                };
                content = new JsonContent(body);
            }

            using (var req = RequestEngine.CreateRequest(_AuthState, apiPath, method, content, rootElement))
            {
                return(await RequestEngine.ExecuteRequestToStringAsync(req, ExecutionPolicy));
            }
        }
Beispiel #11
0
        private static BizwebRequestMessage CreateRequestMessage(BizwebAuthorizationState authState, string path,
                                                                 HttpMethod method, string rootElement = null, object payload = null)
        {
            JsonContent content = null;

            if (payload == null)
            {
                return(RequestEngine.CreateRequest(authState, path, method, rootElement: rootElement));
            }

            if (method != HttpMethod.Get && method != HttpMethod.Delete)
            {
                content = new JsonContent(payload);
            }
            else if (payload is Parameterizable)
            {
                path = RequestEngine.CreateUriPathAndQuery(path, ((Parameterizable)payload).ToParameters());
            }
            else
            {
                //foreach (var propertyInfo in payload.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                //{
                //    req.AddParameter(propertyInfo.Name, propertyInfo.GetValue(payload));
                //}

                var token       = JToken.FromObject(payload);
                var queryParams = token.Select(s =>
                {
                    var i = (JProperty)s;
                    return(new KeyValuePair <string, object>(i.Name, i.Value));
                });

                path = RequestEngine.CreateUriPathAndQuery(path, queryParams);
            }

            return(RequestEngine.CreateRequest(authState, path, method, content, rootElement));
        }
        /// <summary>
        /// Subscribes a person to a <see cref="ConvertKitCourse"/>.
        /// </summary>
        /// <param name="email">The subscriber's email address.</param>
        /// <param name="firstName">The subscriber's first name.</param>
        /// <param name="courseId">The id of the Course to subscribe them to.</param>
        /// <returns>The subscriber.</returns>
        public async Task <ConvertKitSubscriber> SubscribeToCourse(string email, string firstName, long courseId)
        {
            var req = RequestEngine.CreateRequest($"courses/{courseId}/subscribe", Method.POST, "subscription");

            return(await RequestEngine.ExecuteRequestAsync <ConvertKitSubscriber>(_RestClient, req));
        }
        /// <summary>
        /// Lists all <see cref="ConvertKitCourse"/>s on the user's account.
        /// </summary>
        /// <returns></returns>
        public async Task <IEnumerable <ConvertKitCourse> > ListAsync()
        {
            var req = RequestEngine.CreateRequest("courses", Method.GET, "courses");

            return(await RequestEngine.ExecuteRequestAsync <List <ConvertKitCourse> >(_RestClient, req));
        }
        public virtual async Task <ShopifyProvince> GetAsync(long countryId, long id)
        {
            var request = RequestEngine.CreateRequest($"admin/countries/{countryId}/provinces/{id}.json", RestSharp.Method.GET, "province");

            return(await RequestEngine.ExecuteRequestAsync <ShopifyProvince>(_RestClient, request));
        }
        /// <summary>
        /// Unsubscribes a current <see cref="ConvertKitSubscriber"/>.
        /// </summary>
        /// <param name="email">The subscriber's email address.</param>
        public async Task UnsubscribeAsync(string email)
        {
            var req = RequestEngine.CreateRequest("subscribers", Method.PUT);

            await RequestEngine.ExecuteRequestAsync(_RestClient, req);
        }
        /// <summary>
        /// Updates a <see cref="ConvertKitSubscriber"/>.
        /// </summary>
        /// <param name="subscriber">The subscriber.</param>
        /// <returns>The updated subscriber.</returns>
        public async Task <ConvertKitSubscriber> UpdateAsync(long subscriberId, ConvertKitSubscriber subscriber)
        {
            var req = RequestEngine.CreateRequest($"subscribers/{subscriberId}", Method.PUT, "subscriber");

            return(await RequestEngine.ExecuteRequestAsync <ConvertKitSubscriber>(_RestClient, req));
        }