Create customer in QuickBooks offline - quickbooks

I have created a sample .NET web app that connects to QuickBooks Online and using pages/forms in the app I can create/update customer records in QB. I would like to know how customer records in my database can be migrated to QB Online so that user does not have to explicitly logon to QB online. I read about WebConnector but it works with desktop version of QB. So I need to have ability to be able to create/update records in QB Online (using a background process) whenever customer records are added or updated in my SQL Server database without connecting to QB Online.
I am thinking of writing a WCF windows service that will call QBOnline API to do this work periodically but not sure how I will connect that service to QB Online. Please suggest if QB supports this (and how) or I have to force users to logon to QB to create/update customers.

I would like to know how customer records in my database can be migrated to QB Online so that user does not have to explicitly logon to QB online.
The very first time you establish a connection to QuickBooks Online, the user must login.
That only needs to be done ONCE. After that very first time, you should be storing your OAuth tokens, and you can send data over anytime you want without any user interaction what-so-ever.
If that's not the behavior you're seeing, it's probably because you're not storing the OAuth tokens like you should be.
I read about WebConnector but it works with desktop version of QB.
Do not use the Web Connector. If you've already implemented a sample .NET web app that connects to QuickBooks Online, then you're on the right path.
I am thinking of writing a WCF windows service that will call QBOnline API
Why would you do this? This is making things so much harder than they have to be... you already implemented a sample .NET web app, keep doing what you're doing.
Please suggest if QB supports this (and how)
It does.
You already implemented a sample app, which means you've already done what you're asking to do. Just make sure you're storing the OAuth tokens so you don't have to keep reconnecting all the time. The connection process by the user should happen ONLY ONCE. If it's happening more than once, you're not storing the tokens like you should be.

Related

how to make an quickbooks Api call and bypass login

I know I'm probably going to get a "no, you can't do that" but it doesn't seem reasonable to me.
My client uses Quickbooks Online and wants to be able to have his customers sign in to his web site and see how much they owe, and then pay their invoices with a credit card.
Obviously, the customers themselves can't be signing into Quickbooks Online. We want the web server to be able to directly access the data via the api.
I've found the api but I'm not sure if it's possible to have the webserver connecting to it and getting the data it needs.
I know this can be done with other systems. I've done it with GMail and Salesforce using OAuth2.
The biggest piece I want to load from quickbooks as well might be something unavailable as I couldn't find it in the API anywhere. When my client opens Quickbooks Online, he can send an email to any customer that will include a link to pay online by credit card. We'd like to be able to find that link and redirect the user to it. But I'm not sure if it's available via the api.
I could go with webhooks but that would require storing all that data on our webserver, and syncing it for existing data. Not to mention what happens if an update happens to fail.
You're misunderstanding how OAuth works a bit, which is what is causing the confusion here.
The person who owns the QuickBooks company logs in, not the end-user. They log in ONCE, and that gets you OAuth tokens that you can use to make server-to-server calls forever going forward.
Soooo...
I know I'm probably going to get a "no, you can't do that" but it doesn't seem reasonable to me.
You can do what you're trying to do, you're just going about it the wrong way.
Obviously, the customers themselves can't be signing into Quickbooks Online.
Correct.
We want the web server to be able to directly access the data via the api.
That's fine, and totally do-able.
I've found the api but I'm not sure if it's possible to have the webserver connecting to it and getting the data it needs.
It is do-able.
The key understanding here is that you're going to have an OAuth connection process that the person who owns QuickBooks is going to go through just once, to get you OAuth tokens.
You're then going to store those OAuth tokens server-side (e.g. in your database).
You can then use those stored OAuth tokens to make future server-to-server API calls whenever you want.
When my client opens Quickbooks Online, he can send an email to any customer that will include a link to pay online by credit card. We'd like to be able to find that link and redirect the user to it. But I'm not sure if it's available via the api.
I don't think this information is available via the API right now.
There is an API endpoint to send an email invoice, if that's helpful:
https://developer.intuit.com/docs/api/accounting/invoice

QBO, QBD, API and app authorization

It drives me crazy, please help.
I want to integrate QuickBooks Enterprise 2014 with my website.
I managed to create app via developer center.
I managed to sync data using Sync Manager.
I managed to see synced data i my appcenter account (company file).
I managed to implement OAuth authorization with QuickBooks connect button
I managed to use api explorer V3QBD (even though they say it's deprecated) to access synced data
now...
there is no option to choose desktop company file when authorizing... there is only a message saying I need QuickBooks Online subscription.
I don't want to subscribe to QBO, I want to access a company file synced via SyncManager.
Is it still possible ?
I read that you need to set your app to use desktop data source, but this option is not available anymore?
After one week of investigation I couldn't find answers to that, but one "you need to use web connector", is this true ?
please, confirm
thanks ahead
Unless you have been grandfathered in, you can not use sync manager and access QBD data through the API's. You will need to use the QBXML SDK and web connector for accessing desktop data.

How to connect to QuickBooks online from a desktop application

OK. This question has been asked a number of times and answered. However, it seems Intuit changed things on their part so:
Their own latest documentation is no longer correct
All the answers I found so far on the Internet no longer work
Therefore, the only option left is to ask the same question again.
I'm building a console application in C# that need to import data (invoices, customers, etc.) to QB online. It is an internal integration application that will be used by only one company. I definitely do not want to go on the SaaS route.
By all accounts it seems that I should the QuickBooks QBXML SDK v12 and should registered the application in QBOE at "www.appreg.intuit.com". However, this address no longer exists and the registration procedure has changed. QBOE currently support three types of applications:
QuickBooks API - SaaS
Customer Account Data API
Payments (QBMS) App
By considering the functionality I need (create invoices etc.) I should probably create a "QuickBooks API" application. However, this is a SaaS application which is unusable to me.
The "Customer Account Data API" is definitely not what I need.
The only option left is the "Payments (QBMS) App" which does not seem to be the right choice either. However, this is the only one of the three application types that can be either hosted or desktop and have "AppID" and "AppLogin" attributes described in various integration articles on the Internet when using the traditional SDK.
Therefore, I created a "Payments (QBMS) App" (Desktop, Production), followed documentation and articles, did all required settings and used the traditional SDK COM objects to connect to QuickBooks.
During the first connection attempt I approved the application in my QBOE account and set the connection token. Gave all permissions to the connection with no user authentication required.
In the end all I got is the following uninformative exception thrown by the QBSessionManager.BeginSession method:
System.Runtime.InteropServices.COMException (0x80040403): Problem communicating with QuickBooks Online Edition
If I turn on log-in security a dialog appears prompting me to log-in and paste a ticket. Upon opening the log-in URL
https://login.quickbooks.com/j/qbn/sdkapp/sessionauth2?serviceid=2004&appid=[AppID]
the following message appears
There is a problem with sharing your financial data between applications.
Error Message: Application [AppLogin] is not designed to work with service 2004
I also tried using qbXML directly which resulted in a "400 Bad request" error.
Is connecting to QBOE via the SDK still supported and what I'm supposed to do to achieve that?
Go here to create a QBOE application - http://developer.intuit.com/Application/Create/QBOE.
You should use traditional QBSDK.
Please refer this link - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/0250_qb
Thanks

QB PRO 2013 + Web Connector with closed company

I have Quickbooks Pro 2013 with the Web Connector installed.
I have created a sync application, granted permissions and everything, and I get the Web connector to exchange data between the company file (QB PRO 2013) and a web service successfully.
This happens only while QB PRO 2013 is OPEN. It doesn't require a logged in user, just keeping the application open is good enough for the Web Connector to connect to the company file and exchange data.
The thing is when I close the application the Web Connector starts complaining with a QBWC1013 error, saying:
Could not start QuickBooks. - second row in this link: http://www.zoho.com/crm/help/quickbooks/troubleshooting.html#sthash.hk3Dc8dl.dpuf
I'm used to QB POS, where I don't need the company open. Is this behavior different on non POS products ? Do I need to keep QB open all the time ? The path to the company file is OK as well as the syncing logic, we are able to connect, authenticate, exchange data both ways smoothly but only while QB is open (being logged in is not necessary, just keeping the app open).
It is like the Web Connector needs a running instance of QuickBooks to authenticate, because when it does so, QuickBooks flickers like if someone were logging in and then logging out.
The Web Connector application has been granted full access and Admin login to the company file.
Any thoughts :)
First, know that the very first time you connect things you have to make sure QuickBooks is open. If you haven't had QuickBooks open at all yet, make sure it's open the very first time to get things connected.
After that, QuickBooks does not have to be open, provided you have configured things correctly.
To answer your questions:
Is this behavior different on non POS products ?
Yes. Slightly.
Do I need to keep QB open all the time ?
No.
The path to the company file is OK as well as the syncing logic, we are able to connect, authenticate, exchange data both ways smoothly but only while QB is open (being logged in is not necessary, just keeping the app open).
Hit F2 in QuickBooks, and make sure that the path that's shown in the dialog window that pops up is EXACTLY the path that your web service is returning to the Web Connector. It must be EXACTLY the same.
If you're still having trouble, double-check that the app is allowed to connect in the QuickBooks settings, and that a valid user is chosen in the settings, restart the computer, and try again.
If you're still having trouble, post your Web Connector logs (in VERBOSE mode: QuickBooks Web Connector - how to set VERBOSE mode) so that we can help you troubleshoot.

Quickbooks Online Edition - Fetching data to display on website

I want to fetch real-time data from my Quickbooks Online edition's (India) account to display customer details like Open Balance, address etc. on my PHP website.
What is the best way to go about fetching data from Quickbooks Online Edition -
Do I follow the instructions in http://wiki.consolibyte.com/wiki/doku.php/quickbooks_online_edition#connecting_with_the_hosted_model_of_communication ? But this requires a website with SSL certificate.
Do I create a Intuit Anywhere app ( https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0025_Intuit_Anywhere/1000_Getting_Started_With_IA ) and then use IDS (Intuit Data Services) to fetch the required data using the API?
Can I use the PHP devkit ( https://code.intuit.com/sf/frs/do/viewSummary/projects.php_devkit/frs ) and feed my credentials directly to the code and access my Quickbooks account's data?
Do I use qbXML (which however does not seem to be the recommended method)?
Or is there a better solution?
Thanks in advance.
First, a disclaimer - if you're using the India version of QuickBooks Online (http://www.quickbooksonline.in/) you'll likely find that nothing works at all. Currently, Intuit does not officially support ANY non-US version of QuickBooks Online (QuickBooks for Windows non-US is supported via qbXML) for integration, regardless of which method you go with. It might work... but I doubt it.
With that said... generally speaking:
If you're building a SaaS application and trying to allow your
end-users to connect their QuickBooks accounts to your app, use
Intuit Anywhere.
Otherwise, if it's a custom/one-off/internal application, and you hate your life, use HOSTED mode via https://appreg.intuit.com and the HOSTED instructions on our QuickBooks integration wiki (HOSTED mode is notoriously unreliable and difficult to get going due to reverse DNS checks, a very specific certificate format, lack of working example code, bugs on Intuit's end, some serious nasty-ness hooking the certificate up to your .NET HTTPS request, etc.).
Otherwise, if it's a custom/one-off/internal application, and you DON'T hate your life, use DESKTOP mode via https://appreg.intuit.com and the DESKTOP instructions on our QuickBooks integration wiki.
None of the APIs allow you to just pass your credentials in and get access - you'll always have some sort of API token to deal with (a "connection ticket" for qbXML, or OAuth for Intuit Anywhere).
If you build for Intuit Anywhere, you'll use IDS XML. Otherwise, you'll use qbXML.

Resources