Conectando uma aplicação ASP.NET para QuickBooks Edição Online
-
11-09-2019 - |
Pergunta
Eu estou tentando criar uma página ASP.NET que se conecta ao QuickBooks Edição Online, ler um par de valores, e exibir os resultados. Até agora eu ter baixado o QuickBooks SDK mas eu tenho sido incapaz de encontrar um exemplo simples passo-a-passo sobre como criar uma página asp.net para se conectar ao QuickBooks Online. A documentação QuickBooks SDK e do próprio SDK é muito confuso e esmagadora. Alguém sabe de um simples passo a passo tutorial sobre onde começar ... ou talvez uma dica sobre a primeira coisa a fazer.
Solução 2
Aqui estão todos os passos que tomou para começar este trabalho. Um agradecimento especial a Keith Palmer por seus comentários, respostas, e sua site que realmente me ajudou a começar este trabalho.
-
Registre seu aplicativo em http://appreg.quickbooks.com . Isto lhe dará o seu App ID e nome do aplicativo. Eu usei essas configurações:
- Aplicação de destino: QBOE
- Ambiente: Produção
-
Tipo de Aplicação: Desktop
- (usando o Desktop tornou as coisas muito mais fácil na medida em que não necessitam de certificados)
-
A chave de verificação é enviado para seu endereço de e-mail que você precisa para entrar na página 2 do assistente.
- Configure sua Conexão QBOE . Quando você terminar de registrar seu aplicativo na etapa 1, então você vai ter um ID de aplicação. Utilize este ID na URL abaixo para configurar a conexão com a QBOE:
- https://login.quickbooks.com/j / QBN / sdkapp / confirmar? serviceId = 2004 & appid =
APP_ID
- NOTA:. Certifique-se de substituir APP_ID na URL acima com o ID do aplicativo que foi criado quando você registrou seu aplicativo
- O assistente irá levá-lo através dos seguintes passos:
- A especificação de um nome para sua conexão.
- A concessão de direitos de acesso - Eu dei direitos toda a contabilidade desde que esta foi mais fácil .
- Especifique Acesso de Segurança - Virei Acesso de Segurança Off. Isto é importante uma vez que torna a apresentação do XML para o QBOE muito mais fácil desde que você não precisa obter uma permissão de sessão para cada usuário.
- Em seguida, será dada uma chave de conexão.
- https://login.quickbooks.com/j / QBN / sdkapp / confirmar? serviceId = 2004 & appid =
- A esta altura você já tem os 3 peças importantes de informação , a fim de obter acesso à sua conta QuickBooks Edição Online (QBOE).
- Nome do aplicativo
- ID Aplicação
- chave de conexão
-
Depois do XML para QBOE com as 3 peças de informação de acesso e a solicitação real em seu banco de dados QBOE. Aqui está amostra c # código que irá enviar para o gateway QBOE. Isso irá retornar todos os clientes em seu banco de dados QuickBooks. Certifique-se de atualizar o xml abaixo com o seu Nome de Aplicativo, ID, e Connection Key.
string requestUrl = null; requestUrl = "https://apps.quickbooks.com/j/AppGateway"; HttpWebRequest WebRequestObject = null; StreamReader sr = null; HttpWebResponse WebResponseObject = null; StreamWriter swr = null; try { WebRequestObject = (HttpWebRequest)WebRequest.Create(requestUrl); WebRequestObject.Method = "POST"; WebRequestObject.ContentType = "application/x-qbxml"; WebRequestObject.AllowAutoRedirect = false; string post = @"<?xml version=""1.0"" encoding=""utf-8"" ?> <?qbxml version=""6.0""?> <QBXML> <SignonMsgsRq> <SignonDesktopRq> <ClientDateTime>%%CLIENT_DATE_TIME%%</ClientDateTime> <ApplicationLogin>APPLICATION_LOGIN</ApplicationLogin> <ConnectionTicket>CONNECTION_TICKET</ConnectionTicket> <Language>English</Language> <AppID>APP_ID</AppID> <AppVer>1</AppVer> </SignonDesktopRq> </SignonMsgsRq> <QBXMLMsgsRq onError=""continueOnError""> <CustomerQueryRq requestID=""2"" /> </QBXMLMsgsRq> </QBXML>"; post = post.Replace("%%CLIENT_DATE_TIME%%", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(post); post = xmlDoc.InnerXml; WebRequestObject.ContentLength = post.Length; swr = new StreamWriter(WebRequestObject.GetRequestStream()); swr.Write(post); swr.Close(); WebResponseObject = (HttpWebResponse)WebRequestObject.GetResponse(); sr = new StreamReader(WebResponseObject.GetResponseStream()); string Results = sr.ReadToEnd(); } finally { try { sr.Close(); } catch { } try { WebResponseObject.Close(); WebRequestObject.Abort(); } catch { } }
-
algumas coisas para nota:
- Como apontado por Keith Palmer as necessidades versão qbxml ser 6.0 (mesmo que o IDN unificada sobre-tela mostra Referência 7,0)
- que eu precisava para incluir o atributo = onError "ContinueOnError".
- Definir a propriedade WebRequestObject.ContentLength é necessária.
- Tipo de conteúdo precisa ser "application / x-qbxml"
- E finalmente recebi muitos "O servidor remoto retornou um erro: (400) Bad Request". excepções que não foram úteis, mas no final eu era capaz de rastreá-las a algo de errado com o XML. Portanto, se você receber esse olhar exceção a seu XML como a origem do problema.
Outras dicas
A resposta de Yishai é parcialmente correta, mas não inteiramente.
Você pode ter o seu registo de aplicação ASP .NET e pedidos de emissão sem ter que enviar o utilizador para o registo de QuickBooks Online página se você fizer Certifique-se de definir as preferências de segurança corretamente quando você conectar-se a sua aplicação para QuickBooks Edição online.
Durante o processo de processo de registro application / conexão, ele irá perguntar se você quer ativar ou desativar a segurança de login com um prompt como abaixo. É necessário dizer que você quer desligar segurança de login, se você quer ser capaz de acessar dados QuickBooks Edição Online sem forçar o usuário a fazer logon em cada tempo. O prompt é algo como:
"Você quer ativar a segurança de login?"
Você deve selecionar: "Não. Qualquer um que pode entrar em [Nome do aplicativo] pode usar a conexão".
Fora disso, Yishai está correta sobre o processo. Para reiterar, em poucas palavras:
- Inscreva-se para uma conta QBOE
- Registre seu aplicativo integrado com o serviço AppReg da Intuit
- Visite um link específico para amarrar sua aplicação AppReg à sua conta QBOE (certifique-se de desativar a segurança de login quando ele pede para você!)
- Faça solicitações HTTPS POST para servidores da Intuit para assinar em usando o bilhete conexão Intuit irá fornecer-lhe
- Faça HTTPS POST solicitações para enviar solicitações qbXML para servidores da Intuit, que você pode usar para adicionar, modificar, apagar e registros de consulta dentro QuickBooks Edição Online.
Há alguma documentação adicional e alguns exemplos de solicitações no meu QuickBooks desenvolvimento e integração wiki , especificamente o QuickBooks Edição online página integração .
Eu construí uma solução que faz o que você está pedindo em PHP que adiciona, modifica e consultas de dados dentro QuickBooks Edição Online sem exigir que o usuário faça login toda vez, e ele funciona como um campeão. Ele empurra e puxa pedir dados entre um carrinho de compras PHP (VirtueMart) e QuickBooks Edição Online. O código PHP está disponível aqui: QuickBooks PHP Framework
Como uma nota lateral, a menos que você está muito familiarizado com a geração de certificados SSL e enviá-los via HTTPS POSTs, você vai salvar um monte de problemas, utilizando o modelo de desktop de comunicação, e não o modelo hospedado. Apenas certifique-se de manter o seu bilhete de conexão criptografadas.
Além disso, a sugestão de Yishai para: "Uma delas é através de programação atingiu a sua página de login e enviar as credenciais como se você fosse um usuário eu tenho certeza que não é 'suportado', mas que seria provável de trabalho." vai especificamente contra a segurança / diretrizes para desenvolvedores Intuit e o conjunto SDK diante. Se eles pegarem você fazer isso, eles vão proibir o seu aplicativo se conecte a QuickBooks.
O esboço do que você tem que fazer são descritos no Capítulo 7 da documentação QBSDK (pelo menos na versão 7.0 do SDK que eu tenho). Você tem que abrir uma conta de teste e obter permissão para se conectar aos seus servidores.
Depois de ter sua configuração da conta, o procedimento de autenticação básica consiste de redirecionar o usuário para o site do QuickBooks Online para entrar, e uma vez que o usuário tenha feito isso, QuickBooks chama de volta a sua aplicação com um posto HTTPS com um bilhete, que é basicamente um identificador de sessão que você pode usar para seus pedidos, para que o sistema sabe que você está autenticado. Quando você receber essa resposta, você analisá-lo e enviar o seu próprio pedido de login para o sistema com base no que você tem de volta.
Em seguida (se eu entendi a documentação corretamente) que você está fazendo basicamente POSTS HTTPS do arquivos XML com os pedidos de QuickBooks, e você terá respostas XML que você tem que analisar para obter os dados que deseja.
Espero que permite começar a.
O resto do SDK é a documentação (que você precisa saber como formar suas solicitações e analisar suas respostas) e tudo o mais está preocupado com a forma de comunicar com o produto desktop. A única coisa que você vai precisar do resto da documentação é como fazer o tratamento de erros, o que só é realmente importante se você está postando dados para QuickBooks. Se você está apenas lendo, não importa (seja o seu pedido funciona ou não, você não precisa se preocupar se você precisa de repetição ou se isso iria resultar em dados duplicados).
EDIT: Dado o seu caso de uso específico vejo duas opções. (Você não é louco, só não o QuickBooks típicos cenário Online).
Uma é através de programação atingiu a sua página de login e enviar as credenciais como se você fosse um usuário. Estou certo de que não é "suportado", mas ele iria trabalhar provável.
O outro é para armazenar em cache os resultados (que você provavelmente deve fazer de qualquer maneira) e tem uma tela de administração, onde alguém faz log em QuickBooks on-line e atualizar os resultados a cada manhã ou à noite ou o que faz sentido.
Na maioria das pequenas empresas, eles estão indo para opt para a primeira opção, mas o segundo vai para o trabalho de forma mais consistente, robusta e realmente ser apoiada por Intuit, se você tem um problema.
Isso parece muito perto do que você precisa: www.QuickbooksConnector.com
Não foi capaz de baixá-lo ainda.