Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IntuitDeveloperRelations/6024616 to your computer and use it in GitHub Desktop.
Save IntuitDeveloperRelations/6024616 to your computer and use it in GitHub Desktop.
DevDefined / IPP .NET DevKit v2 - QBO - Get Items with DateTimeFilter #DotNetDevKitV2 #Item #Filter
//List<Item> items = GetQboItemsWithDateTimeFiler(commonService, 1, 100, new DateTime(2013, 6, 30, 11, 0, 0));
public List<Intuit.Ipp.Data.Qbo.Item> GetQboItemsWithDateTimeFiler(DataServices dataServices, int startPage, int resultsPerPage, DateTime filterCreateTimeAfter)
{
var filter = "CreateTime :AFTER: " + filterCreateTimeAfter.ToString("yyyy-MM-dd\"T\"HH:mm:sszzz");
var httpWebRequest = WebRequest.Create(dataServices.ServiceContext.BaseUrl + "items/v2/" + dataServices.ServiceContext.RealmId) as HttpWebRequest;
if (httpWebRequest != null)
{
var requestBody = String.Format("Filter={0}&PageNum={1}&ResultsPerPage={2}", filter, startPage, resultsPerPage);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Headers.Add("Authorization", GetDevDefinedOAuthHeader(httpWebRequest, requestBody));
using (var stream = httpWebRequest.GetRequestStream())
{
var requestBodyEncoded = String.Format("Filter={0}&PageNum={1}&ResultsPerPage={2}", UrlEncode(filter), startPage, resultsPerPage);
var encoding = new ASCIIEncoding();
byte[] content = encoding.GetBytes(requestBodyEncoded);
stream.Write(content, 0, content.Length);
}
var httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
if (httpWebResponse != null)
using (Stream data = httpWebResponse.GetResponseStream())
{
if (data != null)
{
var searchResults = (Intuit.Ipp.Data.Qbo.SearchResults)dataServices.ServiceContext.Serializer.Deserialize<Intuit.Ipp.Data.Qbo.SearchResults>(new StreamReader(data).ReadToEnd());
return ((Intuit.Ipp.Data.Qbo.Items)searchResults.CdmCollections).Item.ToList();
}
}
}
throw new Exception("Error requesting Items from QuickBooks API");
}
protected string GetDevDefinedOAuthHeader(HttpWebRequest webRequest, string requestBody)
{
var consumerContext = new OAuthConsumerContext
{
ConsumerKey = consumerKey,
ConsumerSecret = consumerSecret,
SignatureMethod = SignatureMethod.HmacSha1,
UseHeaderForOAuthParameters = true
};
//URIs not used
var oauthSession = new OAuthSession(consumerContext, "https://www.example.com", "https://www.example.com","https://www.example.com")
{AccessToken = new TokenBase
{
Token = accessToken, ConsumerKey = consumerKey, TokenSecret = accessTokenSecret
}
};
IConsumerRequest consumerRequest = oauthSession.Request();
consumerRequest = consumerRequest.ForMethod(webRequest.Method);
consumerRequest = consumerRequest.ForUri(webRequest.RequestUri);
if (webRequest.Headers.Count > 0)
{
consumerRequest.AlterContext(context => context.Headers = webRequest.Headers);
if (webRequest.Headers[HttpRequestHeader.ContentType] == "application/x-www-form-urlencoded")
{
var formParameters = requestBody.Split('&').ToDictionary(formParameter => formParameter.Split('=')[0], formParameter => formParameter.Split('=')[1]);
consumerRequest = consumerRequest.WithFormParameters(formParameters);
}
}
consumerRequest = consumerRequest.SignWithToken();
return consumerRequest.Context.GenerateOAuthParametersForHeader();
}
public static string UrlEncode(string value)
{
const string UnreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
if (value == null) return null;
var result = new StringBuilder();
foreach (char symbol in value)
{
if (UnreservedChars.IndexOf(symbol) != -1)
{
result.Append(symbol);
}
else
{
// This is where I changed
var bytesUTF8 = System.Text.Encoding.UTF8.GetBytes(symbol + "");
foreach (var b in bytesUTF8)
{
result.Append('%' + String.Format("{0:X2}", b));
}
}
}
return result.ToString();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment