Rails, QBOE, qbXML and integrating them all together - ruby-on-rails

I am currently developing a Ruby/Rails app that will be used in-house as a sort of Enterprise application to support our business.
Our company uses Quickbooks Online to do almost all of our accounting, most importantly for invoicing.
I am looking for a way to automatically generate invoices from our Rails app into Quickbooks, as well as be able to pull customer balances and some other "basic" information into the Rails app to display on a customer information screen.
I have done a lot of research on the topic, and have yet to find an acceptable solution to what we're trying to accomplish.
Quickbooks Web Connector - Not applicable since are not running Quickbooks Pro
Intuit Anywhere app - The app we are using is certainly not a SaaS App, as it is specifically designed for our business, and the only Quickbooks file/account it will ever see is our own
Quickbooks Online/qbXML Gateway application - This seems to be the best fit
So I have spent considerable time with Keith Palmer's Consolibytes wiki, and Intuit's Official Documentation (which is great to get started, but doesn't really provide much help for the details), and have been unable to even link my application to quickbooks using the https://qbo.intuit.com/redir/addsdkapp?appid=YOUR-ID-HERE&appreferer=&appdata=1 link.
My server does have a GoDaddy generated SSL certificate, and I have visited the connection callback URL and have confirmed that everything is in working order there. However, I keep getting a "Failed to notify third party application about this connection" error. There is no evidence of a request from QB to my server in any of my logs.
So what I'm getting at here is this:
Is what I'm trying to do possible and/or practical?
Am I going the right way about it?
I'd really love to find someone out there who has done something like this before and maybe shed some light on the whole process.
Thanks!

So what I'm getting at here is this: Is what I'm trying to do possible and/or practical?
Yes.
Am I going the right way about it?
Almost. :-)
From what you posted:
My server does have a GoDaddy generated SSL certificate, and I have visited the connection callback URL and have confirmed that everything is in working order there.
It sounds like you registered in HOSTED mode.
Unfortunately, the Intuit servers don't consider GoDaddy certificates valid, and thus won't be able to HTTP POST your connection ticket to those servers. That's why you're seeing this:
Failed to notify third party application about this connection
Additionally, I believe they do reverse DNS checks, which will most likely fail because GoDaddy generally doesn't set up rDNS entries.
The solution is:
Do not register in HOSTED mode
Instead, register in DESKTOP mode.
Once you've registered, use this URL to register get your connection ticket:
https://login.quickbooks.com/j/qbn/sdkapp/confirm?appid=YOUR-APPLICATION-ID-HERE&serviceid=2004&appdata=1
(make sure to plug your actual application ID into the URL)
Instead of Intuit HTTP POSTing the connection ticket to you, the connection ticket will be displayed and you can copy/paste it. From there on in, it's as simple as HTTP POSTing additional HTTP requests to Intuit's servers.
Sample XML requests can be found on our QuickBooks integration wiki - make sure you use the DESKTOP mode examples.
Hope that helps clear things up!

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

Do I need to get an ERN certificate or other for my app?

I've come to the "Export Compliance" part of the itunes connect app submission form and although i've been reading different sources on the internet about it for the last few hours i'm still unsure as to what is applicable for my case.
I'm wondering if you can help me gain some clarity on whether I need to get a ERN cert or not or what I need to do.
I've found lots of information but also thinking that it might be outdated so not sure which information to follow:
Note:
I read here that since sept 2016 things have changed so it's no longer necessary to get an ERN for https requests. Is this correct?
This is all the encryption I'm using in my app:
Using php password_hash() on registration
Ajax requests are made to a remote server using https
Some requests in the app are made using just http
(eg. requests using the phonegap file-transfer to upload photos) to a remote server.
My app is for users to communicate with each other and ajax requests are made for things like submitting comments and submitting a contact form.
Thanks for any help :)

How can I develop/debug the Office 365 Rest Api Notifications NotificationURL?

After testing and research it seems the NotificationURL parameter requires a fully valid SSL certificate or the subscribe call fails.
I am wondering if there is a way I have not found or a clever workaround to use the Office 365 Notifications with a self-signed SSL certificate installed on the NotificationURL during development?
Thanks!
Steve
I won't mark this as answered yet in case there is a better way, but here is my work around for the issue.
I created a small webapi project that takes a base64 encoded url as a parameter, ie: https://site.azurewebsites.com/Notify/aHR0cDovL3NvbWVob3N0OjEyMzQ1L05vdGlmeQ==
It proxies the request to that encoded URL and plays back the response.
I hosted this "proxy" as a free azure website making use of the SSL provided and can now subscribe to notifications via my proxy.
It works well enough and means I can work from anywhere.
I'll see if better ideas come along, but if not will accept this as the answer as it seems to work for my development purposes.
Steve
I've used Ngrok. The free version is sufficient to debug WebHooks

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

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