首先,我没有使用Xero api。我认为这更像是一个OAuth2问题,而不是Xero。
不确定问题是OAuth2的一般问题还是OAuth2的Xero实施。我可以成功验证,从Xero获取我的令牌等。我甚至可以成功获取发票和联系人的终端请求。我的问题是试图发布任何内容,即创建发票。
服务器响应400 Bad请求。我已经通过将XML放入他们的API测试程序并确保实际发布的数据是正确的。
邮件请求不应该是标准httpwebequest
,(POST),查询字符串?oauth_signature=[sig here]
,以及通过流编码和发送的实际邮政数据URL吗?我的实现是否正确,我应该在其他地方寻找问题吗?表格中发送的数据是否应包含在签名中?
{
byte[] reqData = encode.GetBytes(postData);
HttpWebRequest request = WebRequest.CreateHttp(url + querystring) as HttpWebRequest;
request.Method = "POST";
try {
using (Stream stream = request.GetRequestStream) {
stream.Write(reqData, 0, reqData.Length);
}
using (HttpWebResponse response = request.GetResponse) {
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
dynamic responseFromServer = reader.ReadToEnd();
return responseFromServer;
}
} catch (Exception ex) {
}
}
答案 0 :(得分:3)
Xero使用OAuth1.0a,而不是OAuth2。 OAuth签名需要作为标头而不是查询字符串提供。我相信它应该与您正在进行的成功GET请求完全相同。
https://oauth.net/core/1.0a/#rfc.section.5.4.1:
OAuth协议参数通过以下方式在Authorization标头中发送:
参数名称和值按参数编码进行编码。 对于每个参数,名称后面紧跟一个'='字符(ASCII代码61),一个'“'字符(ASCII代码34),参数值(可以为空)和另一个'”'字符(ASCII代码) 34)。 参数由逗号字符(ASCII码44)和每个[RFC2617]的可选线性空格分隔。 根据[RFC2617]第1.2节增加和解释OPTIONAL领域参数。
答案 1 :(得分:1)
针对那些立即发现此问题的人进行更新,Xero API现在在公共Beta中具有OAuth2 https://developer.xero.com/documentation/oauth2/overview