Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3bda23b

Browse files
committed
intial
1 parent 1324bcc commit 3bda23b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1571
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*.user
77
*.userosscache
88
*.sln.docstates
9+
Snipcart.NET451/
910

1011
# User-specific files (MonoDevelop/Xamarin Studio)
1112
*.userprefs

Snipcart.API/Snipcart.API.sln

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.27130.2036
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snipcart.API", "Snipcart.API\Snipcart.API.csproj", "{B03C6598-7214-42BD-A082-01D5FBF25BA4}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Snipcart.NET451", "Snipcart.NET451\Snipcart.NET451.csproj", "{7D9AFC8A-2DC9-4E57-9723-4B8EAC5ABABD}"
9+
EndProject
10+
Global
11+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
12+
Debug|Any CPU = Debug|Any CPU
13+
Release|Any CPU = Release|Any CPU
14+
EndGlobalSection
15+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16+
{B03C6598-7214-42BD-A082-01D5FBF25BA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17+
{B03C6598-7214-42BD-A082-01D5FBF25BA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
18+
{B03C6598-7214-42BD-A082-01D5FBF25BA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
19+
{B03C6598-7214-42BD-A082-01D5FBF25BA4}.Release|Any CPU.Build.0 = Release|Any CPU
20+
{7D9AFC8A-2DC9-4E57-9723-4B8EAC5ABABD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{7D9AFC8A-2DC9-4E57-9723-4B8EAC5ABABD}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{7D9AFC8A-2DC9-4E57-9723-4B8EAC5ABABD}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{7D9AFC8A-2DC9-4E57-9723-4B8EAC5ABABD}.Release|Any CPU.Build.0 = Release|Any CPU
24+
EndGlobalSection
25+
GlobalSection(SolutionProperties) = preSolution
26+
HideSolutionNode = FALSE
27+
EndGlobalSection
28+
GlobalSection(ExtensibilityGlobals) = postSolution
29+
SolutionGuid = {7D3E6646-CC18-44E6-B141-DDC202668DD3}
30+
EndGlobalSection
31+
EndGlobal
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netstandard1.6</TargetFramework>
5+
<Authors>Shervin Williams</Authors>
6+
<Company>ITpod</Company>
7+
<PackageTags>snipcart</PackageTags>
8+
<PackageId>Snipcart-SDK</PackageId>
9+
<Description>Provides integrations for all documented Snipcart API endpoints and webhooks</Description>
10+
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
15+
</ItemGroup>
16+
17+
<ItemGroup>
18+
<Folder Include="models\domains\" />
19+
<Folder Include="models\shipping\" />
20+
<Folder Include="webhooks\" />
21+
</ItemGroup>
22+
23+
</Project>
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Net;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Snipcart.Models;
7+
8+
9+
namespace Snipcart
10+
{
11+
public class SnipcartClient : SnipcartService
12+
{
13+
private SnipcartClient() : base(null)
14+
{
15+
throw new ArgumentNullException("Must provide an API key generated from your Snipcart dashboard");
16+
}
17+
public SnipcartClient(string apiKey) : base(apiKey) { }
18+
19+
#region Orders
20+
public virtual Task<Orders> GetOrdersAsync()
21+
{
22+
return _httpClient.GetObject<Orders>(Urls.Orders);
23+
}
24+
public virtual Task<Orders> GetOrdersAsync(OrdersRequestOptions options)
25+
{
26+
string url = Urls.Orders + options.GetUrlParams();
27+
return _httpClient.GetObject<Orders>(url);
28+
}
29+
public virtual Task<Order> GetOrderAsync(string orderToken)
30+
{
31+
var url = string.Format(Urls.Order, orderToken);
32+
return _httpClient.GetObject<Order>(url);
33+
}
34+
public virtual Task<Order> UpdateOrderAsync(string orderToken, OrderPutOptions options)
35+
{
36+
var url = string.Format(Urls.Order, orderToken);
37+
return _httpClient.PutObject<Order>(url, options);
38+
}
39+
#endregion
40+
41+
public virtual Task<Subscriptions> GetSubscriptionsAsync(SubscriptionsRequestOptions options)
42+
{
43+
string url = Urls.Subscriptions + options.GetUrlParams();
44+
return _httpClient.GetObject<Subscriptions>(url);
45+
}
46+
public virtual Task<Subscription> GetSubscriptionAsync(string subscriptionid)
47+
{
48+
var url = string.Format(Urls.Subscription, subscriptionid);
49+
return _httpClient.GetObject<Subscription>(url);
50+
}
51+
public virtual Task<SnipcartList<Invoice>> GetSubscriptionInvoicesAsync(string subscriptionid)
52+
{
53+
var url = string.Format(Urls.SubscriptionInvoices, subscriptionid);
54+
return _httpClient.GetObject<SnipcartList<Invoice>>(url);
55+
}
56+
public virtual Task<Subscription> DeleteSubscriptionAsync(string subscriptionid)
57+
{
58+
var url = string.Format(Urls.Subscription, subscriptionid);
59+
return _httpClient.DeleteObject<Subscription>(url);
60+
}
61+
public virtual Task<Subscription> PauseSubscriptionAsync(string subscriptionid)
62+
{
63+
var url = string.Format(Urls.SubscriptionPause, subscriptionid);
64+
return _httpClient.PostObject<Subscription>(url, "");
65+
}
66+
public virtual Task<Subscription> ResumeSubscriptionAsync(string subscriptionid)
67+
{
68+
var url = string.Format(Urls.SubscriptionResume, subscriptionid);
69+
return _httpClient.PostObject<Subscription>(url, "");
70+
}
71+
72+
public virtual Task<Notifications> GetOrderNotificationsAsync(string orderToken, OrderNotificationsRequestOptions options)
73+
{
74+
var url = string.Format(Urls.OrderNotifications, orderToken) + options.GetUrlParams();
75+
return _httpClient.GetObject<Notifications>(url);
76+
}
77+
78+
public virtual Task<Notifications> PostOrderNotificationAsync(string orderToken, OrderNotificationPostOptions options)
79+
{
80+
var url = string.Format(Urls.OrderNotifications, orderToken);
81+
return _httpClient.PostObject<Notifications>(url, options);
82+
}
83+
84+
public virtual Task<SnipcartList<Refund>> GetOrderRefundsAsync(string orderToken)
85+
{
86+
var url = string.Format(Urls.OrderRefunds, orderToken);
87+
return _httpClient.GetObject<SnipcartList<Refund>>(url);
88+
}
89+
public virtual Task<Refund> GetOrderRefundAsync(string orderToken, string refundId)
90+
{
91+
var url = string.Format(Urls.OrderRefund, orderToken, refundId);
92+
return _httpClient.GetObject<Refund>(url);
93+
}
94+
public virtual Task<Refund> PostOrderRefundAsync(string orderToken, RefundPostOptions options)
95+
{
96+
var url = string.Format(Urls.OrderRefunds, orderToken);
97+
return _httpClient.PostObject<Refund>(url, options);
98+
}
99+
100+
public virtual Task<Customers> GetCustomersAsync(string orderToken, CustomersRequestOptions options)
101+
{
102+
var url = Urls.Customers + options.GetUrlParams();
103+
return _httpClient.GetObject<Customers>(url);
104+
}
105+
106+
public virtual Task<User> GetCustomerAsync(string customerId)
107+
{
108+
var url = string.Format(Urls.Customer, customerId);
109+
return _httpClient.GetObject<User>(url);
110+
}
111+
112+
public virtual Task<SnipcartList<Order>> GetCustomerOrdersAsync(string customerId)
113+
{
114+
var url = string.Format(Urls.CustomerOrders, customerId);
115+
return _httpClient.GetObject<SnipcartList<Order>>(url);
116+
}
117+
118+
public virtual Task<SnipcartList<Discount>> GetDiscountsAsync()
119+
{
120+
return _httpClient.GetObject<SnipcartList<Discount>>(Urls.Discounts);
121+
}
122+
public virtual Task<Discount> GetDiscountAsync(string discountId)
123+
{
124+
var url = string.Format(Urls.Discount, discountId);
125+
return _httpClient.GetObject<Discount>(url);
126+
}
127+
128+
public virtual Task<Discount> PostDiscountAsync(DiscountOptions options)
129+
{
130+
return _httpClient.PostObject<Discount>(Urls.Discounts, options);
131+
}
132+
public virtual Task<Discount> UpdateDiscountAsync(string discountId, DiscountOptions options)
133+
{
134+
var url = string.Format(Urls.Discount, discountId);
135+
return _httpClient.PutObject<Discount>(url, options);
136+
}
137+
138+
public virtual Task<Discount> DeleteDiscountAsync(string discountId)
139+
{
140+
var url = string.Format(Urls.Discount, discountId);
141+
return _httpClient.DeleteObject<Discount>(url);
142+
}
143+
144+
public virtual Task<UserSessions> GetUserSessionsAsync(string sessionToken)
145+
{
146+
var url = string.Format(Urls.Discount, sessionToken);
147+
return _httpClient.GetObject<UserSessions>(url);
148+
}
149+
150+
public virtual Task<Products> GetProductsAsync(ProductsRequestOptions options)
151+
{
152+
var url = Urls.Products + options.GetUrlParams();
153+
return _httpClient.GetObject<Products>(url);
154+
}
155+
156+
public virtual Task<Product> GetProductAsync(string productId)
157+
{
158+
var url = string.Format(Urls.Product, productId);
159+
return _httpClient.GetObject<Product>(url);
160+
}
161+
162+
public virtual Task<SnipcartList<Product>> PostProductAsync(ProductPostOptions options)
163+
{
164+
return _httpClient.PostObject<SnipcartList<Product>>(Urls.Products, options);
165+
}
166+
167+
public virtual Task<Product> UpdateProductAsync(string productId, ProductPutOptions options)
168+
{
169+
var url = string.Format(Urls.Product, productId);
170+
return _httpClient.PostObject<Product>(url, options);
171+
}
172+
173+
public virtual Task<Product> DeleteProductAsync(string productId)
174+
{
175+
var url = string.Format(Urls.Product, productId);
176+
return _httpClient.DeleteObject<Product>(url);
177+
}
178+
179+
public virtual Task<AbandonedCarts> GetAbandonedCartsAsync(AbandonedCartsRequestOptions options)
180+
{
181+
var url = Urls.AbandonedCarts + options.GetUrlParams();
182+
return _httpClient.GetObject<AbandonedCarts>(url);
183+
}
184+
185+
public virtual Task<AbandonedCart> GetAbandonedCartAsync(string abandonedCartToken)
186+
{
187+
var url = string.Format(Urls.AbandonedCart, abandonedCartToken);
188+
return _httpClient.GetObject<AbandonedCart>(url);
189+
}
190+
}
191+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using System;
2+
using System.Net.Http;
3+
using System.Text;
4+
using System.Threading.Tasks;
5+
using Newtonsoft.Json;
6+
7+
8+
namespace Snipcart
9+
{
10+
internal class SnipcartHttpClient
11+
{
12+
private static HttpClient _client = new HttpClient();
13+
public SnipcartHttpClient(string key)
14+
{
15+
var basekey = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(":" + key));
16+
_client.DefaultRequestHeaders.Add("Authorization", "Basic " + basekey);
17+
_client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
18+
}
19+
20+
public async Task<T> GetObject<T>(string url) where T : IResponseBase
21+
{
22+
HttpResponseMessage response = await _client.GetAsync(url).ConfigureAwait(false);
23+
return await ParseResponse<T>(response);
24+
}
25+
26+
public async Task<T> DeleteObject<T>(string url) where T : IResponseBase
27+
{
28+
HttpResponseMessage response = await _client.DeleteAsync(url).ConfigureAwait(false);
29+
return await ParseResponse<T>(response);
30+
}
31+
32+
public async Task<T> PutObject<T>(string url, object input) where T : IResponseBase
33+
{
34+
var inputString = JsonConvert.SerializeObject(input, Formatting.None,
35+
new JsonSerializerSettings
36+
{
37+
NullValueHandling = NullValueHandling.Ignore,
38+
DefaultValueHandling = DefaultValueHandling.Ignore
39+
});
40+
var content = new StringContent(inputString == null ? "" : inputString, Encoding.UTF8, "application/json");
41+
42+
HttpResponseMessage response = await _client.PutAsync(url, content).ConfigureAwait(false);
43+
return await ParseResponse<T>(response);
44+
}
45+
46+
public async Task<T> PostObject<T>(string url, object input) where T : IResponseBase
47+
{
48+
var inputString = JsonConvert.SerializeObject(input, Formatting.None,
49+
new JsonSerializerSettings
50+
{
51+
NullValueHandling = NullValueHandling.Ignore,
52+
DefaultValueHandling = DefaultValueHandling.Ignore
53+
});
54+
var content = new StringContent(inputString == null ? "" : inputString, Encoding.UTF8, "application/json");
55+
56+
HttpResponseMessage response = await _client.PostAsync(url, content).ConfigureAwait(false);
57+
return await ParseResponse<T>(response);
58+
}
59+
60+
private async Task<T> ParseResponse<T>(HttpResponseMessage response) where T : IResponseBase
61+
{
62+
if (response.IsSuccessStatusCode)
63+
{
64+
var responseJson = await response.Content.ReadAsStringAsync();
65+
var ret = JsonConvert.DeserializeObject<T>(responseJson);
66+
ret.statuscode = response.StatusCode;
67+
return ret;
68+
}
69+
else
70+
{
71+
T ret = (T)Activator.CreateInstance(typeof(T));
72+
ret.message = await response.Content.ReadAsStringAsync();
73+
ret.statuscode = response.StatusCode;
74+
return ret;
75+
}
76+
}
77+
}
78+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Net;
4+
using System.Text;
5+
6+
namespace Snipcart
7+
{
8+
public class SnipcartList<T> : List<T>, IResponseBase
9+
{
10+
public string message { get; set; }
11+
public IErrors errors { get; set; }
12+
public HttpStatusCode statuscode { get; set; }
13+
public bool IsSuccessStatusCode
14+
{
15+
get { return ((int)statuscode >= 200) && ((int)statuscode <= 299); }
16+
}
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace Snipcart
6+
{
7+
public abstract class SnipcartService
8+
{
9+
internal SnipcartHttpClient _httpClient;
10+
11+
public SnipcartService(string apiKey)
12+
{
13+
if (_httpClient == null)
14+
_httpClient = new SnipcartHttpClient(apiKey);
15+
}
16+
}
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Net;
4+
using System.Text;
5+
6+
namespace Snipcart
7+
{
8+
public interface IResponseBase
9+
{
10+
string message { get; set; }
11+
IErrors errors { get; set; }
12+
HttpStatusCode statuscode { get; set; }
13+
}
14+
public interface IErrors
15+
{
16+
List<string> parameter { get; set; }
17+
}
18+
}

0 commit comments

Comments
 (0)