OAuth2端点请求Xero

时间:2017-11-10 11:31:40

标签: asp.net oauth-2.0 xero-api

首先,我没有使用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) {
    }
}

2 个答案:

答案 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