【问题标题】:How to create Journal entry in QuickBooks Online如何在 QuickBooks Online 中创建日记条目
【发布时间】:2015-06-25 00:21:47
【问题描述】:

我正在尝试使用 C# 在 Quickbooks Online V3 API 中创建日记条目。

我做过的事情:

  • 检查 JSON 值和格式
  • 检查标头并接受。

标题信息:

Accept : application/json
Authorization : OAuth oauth_token="************",oauth_nonce="cfc36792-8f9a-4202-9fec-be0a610eed8e",oauth_consumer_key="************",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1435189421",oauth_version="1.0",oauth_signature="***"
Content-Length : 642
Content-Type : application/json
Host : qb.sbfinance.intuit.com

//till here everything is fine not sure about last two lines..
//not sure should i add this to my header or not..

X-NewRelic-ID : UQMAU15RGwcAUllSDwc=
X-NewRelic-Transaction : PxQAVVRUCgMIUiRXdHMBICETGlUDChAHHEAPVgoPBgILU3xUciMFJCEUG0MDUwFVAV1WVBVs

我的代码:

   public static void Main()
        {

         //   JournalEndPoint lnew = new JournalEndPoint();
           // string Json=lnew.CreateJournal();

            string consumerKey = "***";
            string consec = "***";
            string appkeysec1 = "***";
            string appkey1 = "***";

            string returnvalue = ExecuteV3Query(consumerKey, consec, appkey1, appkeysec1, "1397754725", "select * from employee where active=TRUE");

        }
        public static string ExecuteV3Query(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string CompanyId, string query)
        {
            string encodedQuery = RestSharp.Contrib.HttpUtility.UrlEncode(query);
            string uri = string.Format("https://quickbooks.api.intuit.com/v3/company/{0}/journalentry", CompanyId, encodedQuery);
            HttpWebRequest httpWebRequest = WebRequest.Create(uri) as HttpWebRequest;
            httpWebRequest.Method = "POST";
            string JSonvalue = CreateUserJson();
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Accept = "application/json";
            httpWebRequest.Headers.Add("Authorization", GetDevDefinedOAuthHeader(consumerKey, consumerSecret, accessToken, accessTokenSecret, httpWebRequest, null));
            //HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;

            /*
             * using (Stream data = httpWebResponse.GetResponseStream())
            {
                //return XML response
                return new StreamReader(data).ReadToEnd();
            }
            */


            var result = "";
            HttpWebResponse httpResponse;
            try
            {
                httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = streamReader.ReadToEnd();
                }
            }
            catch (WebException e)
            {
                Console.WriteLine("This program is expected to throw WebException on successful run." +
                                    "\n\nException Message :" + e.Message);
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                    using (Stream data = e.Response.GetResponseStream())
                    using (var reader = new StreamReader(data))
                    {
                        string text = reader.ReadToEnd();
                        Console.WriteLine(text);
                        result = text;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return result;
        }

GetDevDefineHeader() 将创建标头,返回类型为字符串。

【问题讨论】:

  • 最后两个标题行由 newrelic 插件自动插入到您的标题中。您不必自己添加它们。
  • @BrokenBinary 你能告诉我我做错了什么吗?我从过去 3 小时开始尝试这个东西,但得到同样的错误..请帮助我

标签: c# asp.net .net quickbooks quickbooks-online


【解决方案1】:

在您的网址中,我没有看到编码查询的使用,您为什么要传递它?

请检查文档以获取正确的 CRUD 端点和查询操作- https://developer.intuit.com/docs/api/accounting/JournalEntry

查看这个使用开发者定义的 GET 示例-

https://gist.github.com/IntuitDeveloperRelations/0913b4c224de758fde0a

这里也有post example,JE也可以这样写-

//string res = CreateV3Customer(consumerKey, consumerSecret, accessToken, accessTokenSecret, realmId);

public string CreateV3Customer(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string realmId)
    {

        StringBuilder request = new StringBuilder();
        StringBuilder response = new StringBuilder();



        var requestBody = "{\"FamilyName\":\"Jack\"}";

        HttpWebRequest httpWebRequest = WebRequest.Create("https://quickbooks.api.intuit.com/v3/company/"+realmId+"/customer") as HttpWebRequest;
        httpWebRequest.Method = "POST";
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Headers.Add("Authorization", GetDevDefinedOAuthHeader(consumerKey, consumerSecret, accessToken,accessTokenSecret,httpWebRequest, requestBody));
        request.Append(requestBody);
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] content = encoding.GetBytes(request.ToString());
        using (var stream = httpWebRequest.GetRequestStream())
        {
            stream.Write(content, 0, content.Length);
        }
        HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
        using (Stream data = httpWebResponse.GetResponseStream())
        {


          string customerr = new StreamReader(data).ReadToEnd();

          return customerr;

        }
    }

【讨论】:

  • 我只是通过它,而不是使用它...那是给员工的,我在日记条目之前尝试过...我创建了单独的课程,出于问题的目的,我在单个课程中编写了所有内容所以可能是我忘了删除它..但是我创建的 JSON 是正确的,可能是标头有问题,检查了端点...我不知道我做错了什么...你能帮我解决这个问题吗?
  • 查看上面的代码并将您的代码与它进行比较。我看到只有编码是不同的。你还没有做。
  • Headers req- POST quickbooks.api.intuit.com/v3/company/717093040/query HTTP/1.1 Content-Type: text/plain Host: quickbooks.api.intuit.com Authorization: OAuth oauth_token="lvprdBmi45KMPO2FnvYtq6KLFTMM7KG0P0PJO3Sm7F3n7pgq",oauth_nonce="e5d6e732- 4456-9c5f-58103843c3c6" ,oauth_consumer_key = “qyprd7I5WvVgJZUvWDFnPoiBh1ejZn”,oauth_signature_method = “HMAC-SHA1”,oauth_timestamp = “1394005668”,oauth_version = “1.0”,oauth_signature = “J8qgGZRa4loR6HEtdpAudP1nVpw%3D”跨度>
  • 除非您粘贴完整的 url 和错误响应,否则我们无法调试问题所在。无论如何比较代码本身应该为您提供指针。
  • 有什么理由不使用 .net sdk 2.2.0?那里提供了 Oauth 和服务调用包装器。您无需为它创建单独的类。 developer.intuit.com/docs/0100_accounting/0500_developer_kits/… 也检查 .net 的示例应用程序-github.com/IntuitDeveloperRelations/QuickbooksV3API-DotNet
猜你喜欢
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多