C# 4.0 票据过滤只返回默认的10条已排序记录,不从QBO进行任何过滤
请查找下面用于筛选账单的代码,即使我通过ResultPage>10,它也只返回10条已排序的记录C# 4.0 票据过滤只返回默认的10条已排序记录,不从QBO进行任何过滤,c#-4.0,intuit-partner-platform,quickbooks-online,intuit,C# 4.0,Intuit Partner Platform,Quickbooks Online,Intuit,请查找下面用于筛选账单的代码,即使我通过ResultPage>10,它也只返回10条已排序的记录 public IEnumerable<Intuit.Ipp.Data.Qbo.Bill> FilterBills(DataServices dataServices, int startPage, int resultsPerPage, DateTime After, DateTime Before) { Intuit.Ipp.Security.OAuthRequestValid
public IEnumerable<Intuit.Ipp.Data.Qbo.Bill> FilterBills(DataServices dataServices, int startPage, int resultsPerPage, DateTime After, DateTime Before)
{
Intuit.Ipp.Security.OAuthRequestValidator oAuthRequestValidator = ((Intuit.Ipp.Security.OAuthRequestValidator)dataServices.ServiceContext.RequestValidator);
OAuthConsumerContext consumerContext = new OAuthConsumerContext
{
ConsumerKey = oAuthRequestValidator.ConsumerKey,
SignatureMethod = SignatureMethod.HmacSha1,
ConsumerSecret = oAuthRequestValidator.ConsumerSecret
};
OAuthSession oSession = new OAuthSession(consumerContext, "https://oauth.intuit.com/oauth/v1/get_request_token",
"https://workplace.intuit.com/Connect/Begin",
"https://oauth.intuit.com/oauth/v1/get_access_token");
oSession.AccessToken = new TokenBase
{
Token = oAuthRequestValidator.AccessToken,
ConsumerKey = oAuthRequestValidator.ConsumerKey,
TokenSecret = oAuthRequestValidator.AccessTokenSecret
};
var body = "PageNum={0}&ResultsPerPage={1}&Filter=LastUpdatedTime :AFTER: {2} :AND: LastUpdatedTime :BEFORE: {3} & Sort=LastUpdatedTime HighToLow";
body = String.Format(body, startPage, resultsPerPage, After.ToString("yyyy-mm-ddTHH:MM:ssz"), Before.ToString("yyyy-mm-ddTHH:MM:ssz"));
IConsumerRequest conReq = oSession.Request();
conReq = conReq.Post().WithRawContentType("application/x-www-form-urlencoded").WithRawContent(System.Text.Encoding.ASCII.GetBytes(body)); ;
conReq = conReq.ForUrl(dataServices.ServiceContext.BaseUrl + "bills/v2/" + dataServices.ServiceContext.RealmId);
conReq = conReq.SignWithToken();
Intuit.Ipp.Data.Qbo.SearchResults searchResults = (Intuit.Ipp.Data.Qbo.SearchResults)dataServices.ServiceContext.Serializer.Deserialize<Intuit.Ipp.Data.Qbo.SearchResults>(conReq.ReadBody());
IEnumerable<Intuit.Ipp.Data.Qbo.Bill> SearchResult = ((Intuit.Ipp.Data.Qbo.Bills)(searchResults.CdmCollections)).Bill;
return SearchResult;
}
public IEnumerable FilterBills(数据服务数据服务,int startPage,int resultsPerPage,DateTime After,DateTime Before)
{
Intuit.Ipp.Security.OAuthRequestValidator OAuthRequestValidator=((Intuit.Ipp.Security.OAuthRequestValidator)dataServices.ServiceContext.RequestValidator);
OAuthConsumerContext consumerContext=新的OAuthConsumerContext
{
ConsumerKey=oAuthRequestValidator.ConsumerKey,
SignatureMethod=SignatureMethod.HmacSha1,
ConsumerCret=oAuthRequestValidator.ConsumerCret
};
OAuthSession oSession=新的OAuthSession(consumerContext)https://oauth.intuit.com/oauth/v1/get_request_token",
"https://workplace.intuit.com/Connect/Begin",
"https://oauth.intuit.com/oauth/v1/get_access_token");
oSession.AccessToken=新的令牌库
{
Token=oAuthRequestValidator.AccessToken,
ConsumerKey=oAuthRequestValidator.ConsumerKey,
TokenSecret=oAuthRequestValidator.AccessTokenSecret
};
var body=“PageNum={0}&ResultsPerPage={1}&Filter=lastUpdateTime:AFTER:{2}:AND:lastUpdateTime:BEFORE:{3}&Sort=lastUpdateTime HighToLow”;
body=String.Format(body、startPage、resultsPerPage、在.ToString之后(“yyy-mm-ddTHH:mm:ssz”)、在.ToString之前(“yyy-mm-ddTHH:mm:ssz”);
IConsumerRequest conReq=oSession.Request();
conReq=conReq.Post().WithRawContentType(“application/x-www-form-urlencoded”).WithRawContent(System.Text.Encoding.ASCII.GetBytes(body));
conReq=conReq.ForUrl(dataServices.ServiceContext.BaseUrl+“bills/v2/”+dataServices.ServiceContext.RealmId);
conReq=conReq.SignWithToken();
Intuit.Ipp.Data.Qbo.SearchResults SearchResults=(Intuit.Ipp.Data.Qbo.SearchResults)dataServices.ServiceContext.Serializer.Deserialize(conReq.ReadBody());
IEnumerable SearchResult=((Intuit.Ipp.Data.Qbo.Bills)(searchResults.CdmCollections)).Bill;
返回搜索结果;
}
在发送请求后,我得到的响应为10排序的账单记录,没有得到任何错误。我使用的是IPPDotNetDevKit 2.1.12.0版本
请查看此筛选问题。在上面的示例中,OAuth参数在请求正文中传递,并覆盖请求正文,因此它默认为PageNum=1&ResultsPerPage=20。此外,日期格式不正确。下面是一个可以工作的代码示例
public IEnumerable<Intuit.Ipp.Data.Qbo.Bill> FilterBills(DataServices dataServices, int startPage, int resultsPerPage, DateTime After, DateTime Before)
{
StringBuilder requestXML = new StringBuilder();
StringBuilder responseXML = new StringBuilder();
var requestBody =
"PageNum={0}&ResultsPerPage={1}&Filter=LastUpdatedTime :AFTER: {2} :AND: LastUpdatedTime :BEFORE: {3}&Sort=LastUpdatedTime HighToLow";
requestBody = String.Format(requestBody, startPage, resultsPerPage, After.ToString("yyyy-MM-ddThh:mm:sszzz"),
Before.ToString("yyyy-MM-ddThh:mm:sszzz"));
HttpWebRequest httpWebRequest =
WebRequest.Create(dataServices.ServiceContext.BaseUrl + "bills/v2/" +
dataServices.ServiceContext.RealmId) as HttpWebRequest;
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Headers.Add("Authorization", GetDevDefinedOAuthHeader(httpWebRequest, requestBody));
requestXML.Append(requestBody);
UTF8Encoding encoding = new UTF8Encoding();
byte[] content = encoding.GetBytes(requestXML.ToString());
using (var stream = httpWebRequest.GetRequestStream())
{
stream.Write(content, 0, content.Length);
}
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
using (Stream data = httpWebResponse.GetResponseStream())
{
Intuit.Ipp.Data.Qbo.SearchResults searchResults =
(Intuit.Ipp.Data.Qbo.SearchResults)
dataServices.ServiceContext.Serializer.Deserialize<Intuit.Ipp.Data.Qbo.SearchResults>(
new StreamReader(data).ReadToEnd());
return ((Intuit.Ipp.Data.Qbo.Bills) searchResults.CdmCollections).Bill.ToList();
}
}
private string GetDevDefinedOAuthHeader(HttpWebRequest webRequest, string requestBody)
{
OAuthConsumerContext consumerContext = new OAuthConsumerContext
{
ConsumerKey = consumerKey,
ConsumerSecret = consumerSecret,
SignatureMethod = SignatureMethod.HmacSha1,
UseHeaderForOAuthParameters = true
};
consumerContext.UseHeaderForOAuthParameters = true;
OAuthSession oSession = new OAuthSession(consumerContext, "https://www.example.com",
"https://www.example.com",
"https://www.example.com");
oSession.AccessToken = new TokenBase
{
Token = accessToken,
ConsumerKey = consumerKey,
TokenSecret = accessTokenSecret
};
IConsumerRequest consumerRequest = oSession.Request();
consumerRequest = ConsumerRequestExtensions.ForMethod(consumerRequest, webRequest.Method);
consumerRequest = ConsumerRequestExtensions.ForUri(consumerRequest, webRequest.RequestUri);
if (webRequest.Headers.Count > 0)
{
ConsumerRequestExtensions.AlterContext(consumerRequest, context => context.Headers = webRequest.Headers);
if (webRequest.Headers[HttpRequestHeader.ContentType] == "application/x-www-form-urlencoded")
{
Dictionary<string, string> formParameters = new Dictionary<string, string>();
foreach (string formParameter in requestBody.Split('&'))
{
formParameters.Add(formParameter.Split('=')[0], formParameter.Split('=')[1]);
}
consumerRequest = consumerRequest.WithFormParameters(formParameters);
}
}
consumerRequest = consumerRequest.SignWithToken();
return consumerRequest.Context.GenerateOAuthParametersForHeader();
}
public IEnumerable FilterBills(数据服务数据服务,int startPage,int resultsPerPage,DateTime After,DateTime Before)
{
StringBuilder requestXML=新建StringBuilder();
StringBuilder responseXML=新的StringBuilder();
var请求主体=
“PageNum={0}&ResultsPerPage={1}&Filter=LastUpdatedTime:AFTER:{2}:和:LastUpdatedTime:BEFORE:{3}&Sort=LastUpdatedTime HighToLow”;
requestBody=String.Format(requestBody,startPage,resultsPerPage,After.ToString(“yyyy-MM-ddThh:MM:sszzz”),
在.ToString之前(“yyyy-MM-ddThh:MM:sszzz”);
HttpWebRequest HttpWebRequest=
WebRequest.Create(dataServices.ServiceContext.BaseUrl+“bills/v2/”+
dataServices.ServiceContext.RealmId)作为HttpWebRequest;
httpWebRequest.Method=“POST”;
httpWebRequest.ContentType=“应用程序/x-www-form-urlencoded”;
添加(“授权”,GetDevDefinedOAuthHeader(httpWebRequest,requestBody));
Append(requestBody);
UTF8Encoding=新的UTF8Encoding();
byte[]content=encoding.GetBytes(requestXML.ToString());
使用(var stream=httpWebRequest.GetRequestStream())
{
stream.Write(content,0,content.Length);
}
HttpWebResponse HttpWebResponse=httpWebRequest.GetResponse()作为HttpWebResponse;
使用(Stream data=httpWebResponse.GetResponseStream())
{
Intuit.Ipp.Data.Qbo.SearchResults SearchResults=
(Intuit.Ipp.Data.Qbo.SearchResults)
dataServices.ServiceContext.Serializer.Deserialize(
新的StreamReader(data.ReadToEnd());
return((Intuit.Ipp.Data.Qbo.Bills)searchResults.CdmCollections.Bill.ToList();
}
}
私有字符串GetDevDefinedOAuthHeader(HttpWebRequestWebRequest,字符串requestBody)
{
OAuthConsumerContext consumerContext=新的OAuthConsumerContext
{
ConsumerKey=ConsumerKey,
ConsumerCret=ConsumerCret,
SignatureMethod=SignatureMethod.HmacSha1,
UseHeaderForOAuthParameters=true
};
consumerContext.UseHeaderForOAuthParameters=true;
OAuthSession oSession=新的OAuthSession(consumerContext)https://www.example.com",
"https://www.example.com",
"https://www.example.com");
oSession.AccessToken=新的令牌库
{
令牌=访问令牌,
ConsumerKey=ConsumerKey,
TokenSecret=accessTokenSecret
};
IConsumerRequest consumerRequest=oSession.Request();
consumerRequest=ConsumerRequestExtensions.FormMethod(consumerRequest,webRequest.Method);
consumerRequest=ConsumerRequestExtensions.ForUri(consumerRequest,webRequest.RequestUri);
如果(webRequest.Headers.Count>0)
{
AlterContext(consumerRequest,context=>context.Headers=webRequest.Headers);
if(webRequest.Headers[HttpRequestHeader.ContentType]=“application/x-www-form-urlencoded”)
{
Dictionary formParameters=新字典();
foreach(requestBody.Split('&')中的字符串formParameter)
{