MrRobot
MrRobot

Reputation: 168

Adding invoice to quickbooks online using .NET IPP QBOV3 SDK

using .NET IPP QBOV3 SDK

I have been working (struggling) on a small integration project all week. The purpose of the project is to be able to have some accounts integration between a windows desktop client application, to quickbooks online.

I want to be able to -

  1. Create new customers/suppliers (can do this)
  2. Add sales invoices (cannot do this)
  3. Return credit balances (not even tried this yet)

After reading a few forums, and articles to come to the understanding the QBOV3 .NET SDK was the one to use, for two reasons.

  1. I'm going to use C# .net, as a winforms application to code the functionality I need (this allows me to have the functionality integrated in the current system, a this is also written in c# .net winforms)

  2. It seems intuit say this is the way to go, as all over APIs are going to be depreciated.

So, my first hurdle was the OAuth - which eventually I managed to figure out. I can now authorise and connect to my QBO sandbox account - great!

I can also create customers from the winforms application, and they appear in QBO - also great!

The next step, which has stumped me for the last 2 or so, is to be able to create an invoice for a customer - I just cant seem to figure out what to do. I am constantly getting a 'Bad request' error.

I have found next to no examples online on how to do this from a c# winforms application. It cant be that hard - so I'm really kicking myself at the moment.

Any help, or sample to set me in the right direction would be appreciated. I cant believe no simple examples exist of this already - I guess not many are doing this via a desktop winforms application, or I am just looking in the wrong places - or have missed something obvious!

Reading through the API documentation is confusing, and doesn't really offer any sample code. I would of thought adding a sales invoice would be a pretty big thing to cover.

Here is the code I am currently using to gain some simple functionality - creating the customer works fine (if the customer doesn't exist in qbo - this is something I need to check before adding - so any steer on that would be great also)

Here is the code I cobbled together so far..

 private void button2_Click(object sender, EventArgs e)
    {
        string consumerKey = "consumerKey";
        string consumerSecret = "consumerSecret";

        string accessToken = "accessToken"; 
        string accessTokenSecret = "accessTokenSecret";

        string appToken = "appToken"; 
        string companyID = "companyID"; //realmID

        OAuthRequestValidator oauthValidator = new OAuthRequestValidator(accessToken, accessTokenSecret, consumerKey, consumerSecret);

        ServiceContext context = new ServiceContext(appToken, companyID, IntuitServicesType.QBO, oauthValidator);
        //uses production as default, which is https://quickbooks.api.intuit.com
        context.IppConfiguration.BaseUrl.Qbo = "https://sandbox-quickbooks.api.intuit.com/";
        //If not set, the default base URL, https://quickbooks.api.intuit.com, is used



        DataService service = new DataService(context);

        //add customer
        Customer customer = new Customer();

        customer.CompanyName = "Jims Junk";
        customer.GivenName = "Jim";
        customer.FamilyName = "Little";
        customer.PrimaryEmailAddr = new EmailAddress() { Address = "[email protected]", Default = true };
        customer.DisplayName = "Jims Junk Ltd"

        Customer resultCustomer = service.Add(customer) as Customer;


        //invoice

        //-An invoice must have at least one Line that describes an item.
        //- An invoice must have CustomerRef populated.
        //- The DocNumber attribute is populated automatically by the data service if not supplied.
        //- If ShipAddr, BillAddr, or both are not provided, the appropriate customer address from Customer is used to fill those values.
        //-DocNumber, if supplied, must be unique.

        Invoice invoice = new Invoice();

        invoice.DocNumber = "uniqueNumber";
        invoice.TxnDate = DateTime.Today.Date;
        invoice.TxnDateSpecified = true;
        invoice.CustomerRef = new ReferenceType()
        {
            name = customer.DisplayName,
            Value = resultCustomer.Id
        };

        Line invLine = new Line();

        invLine.Amount = 10000;
        invLine.DetailType = LineDetailTypeEnum.SalesItemLineDetail;
        invLine.Description = "Test Product";

        invoice.Line = new Line[] { invLine };


        Invoice resultInvoice = service.Add(invoice) as Invoice;


    }

Upvotes: 3

Views: 5229

Answers (1)

MrRobot
MrRobot

Reputation: 168

Sods Law, after a few days of not finding anything - Just now I find a code sample that has helped.

I have now managed to get an invoice posted into QBO.

Here is the linked that helped - http://developer.qbapi.com/Create-Invoice-Error---Bad-Request.aspx

ill just leave it here, so that others may benefit if struggling.

Thanks for reading.

Upvotes: 3

Related Questions