Domanda

UPDATE: sono riuscito ad ottenere questa cosa di lavoro

Si scopre, è necessario inviare un biglietto sicuro con la chiamata per ottenere una risposta adeguata. Non ho idea perché ha funzionato in poster senza di essa. Ci sono un paio di altri parametri che sono necessari, che a quanto pare non ColdFusion invia per impostazione predefinita.

Ecco una chiamata di lavoro:

<!---MyTicketValue is sent over from the SAML gateway--->
<cfset myTicket = #cookie.MyTicketValue#>

<!---here we set the XML for the POST--->
<cfsavecontent variable="APIxml"><qdbapi><ticket><cfoutput>#myTicket#</cfoutput></ticket><apptoken>c4abnsde36pse7hzurwvjjb4m</apptoken></qdbapi></cfsavecontent>

<!---and this is the post with all necessary headers (don't ask me why they're needed)--->
<cfhttp url="https://workplace.intuit.com/db/main" method="POST" result="objGet">
  <cfhttpparam type="header" name="Accept-Encoding" value="gzip,deflate"/>
  <cfhttpparam type="header" name="Keep-Alive" value="115" />
  <cfhttpparam type="header" name="QUICKBASE-ACTION" value="API_GetUserInfo" />
  <cfhttpparam type="header" name="Content-Type" value="application/xml; charset=UTF-8" />
  <cfhttpparam type="body" value="#APIxml#" />
</cfhttp>

E questo restituisce una risposta perfetta dal Intuit sul posto di lavoro.


Sto cercando di inviare una chiamata API di Intuit con ColdFusion. La chiamata deve essere inviato a loro (attraverso un gateway SAML). Un token deve essere fornito nell'intestazione.

Non ho davvero alcuna esperienza con cfhttp, e sono totalmente confuso con tutta questa situazione chiamata API. Ho bisogno di assistenza di base abbastanza qui.

In sostanza, come faccio a formattare il tag cfhttp in modo che io possa avere questo token nell'intestazione?

<cfxml variable="API_GetUserInfo">

<qdbapi>
   <apptoken>c4abnsdepseds7hdzurwvjjb4m</apptoken>
   <email>email@hotmail.com</email>
</qdbapi>

</cfxml>


<cfhttp
  url="https://workplace.intuit.com/db/main"
  method="POST"
  result="objGet">

  <cfhttpparam
    type="header"
    name="Header"
    value="QUICKBASE-ACTION:API_GetUserInfo" 
  />

  <cfhttpparam
    type="xml"
    name="API_GetUserInfo"
    value="#API_GetUserInfo#"
  />

</cfhttp>

In seguito, ho provato il poster Aggiungi on per Firefox.

posso ottenere la chiamata a lavorare bene con quello, ma quando provo a replicare in CF, non riesco ancora a ottenere una risposta.

Ecco il codice aggiornato:

<cfhttp url="https://workplace.intuit.com/db/main" method="POST" result="objGet" >

<cfhttpparam type="header" name="QUICKBASE-ACTION" value="API_GetUserInfo" />

<cfhttpparam type="formfield" name="xml" value="#API_GetUserInfo#" />

</cfhttp>

E in poster, ecco cosa sto entrando:

URL: https://workplace.intuit.com/db/main

Contenuto: XML

Contenuto:

<qdbapi>
  <apptoken>c4abnsdepseds7hdzurwvjjb4m</apptoken>
  <email>jimmyhogoboom@gmail.com</email>
</qdbapi>

e 1 intestazione:

Nome: QuickBase-ACTION

Valore: API_GetUserInfo

Con queste impostazioni, ottengo una risposta corretta.

Tutte le idee su quello che sto facendo di sbagliato con il codice ColdFusion?

È stato utile?

Soluzione

ottenuto. È necessario per avvolgere il vostro XML con un ToString. Esso metterà la dichiarazione XML, all'inizio del XML per renderlo un documento XML valido. Ho appena provato sulla mia estremità e ha funzionato.

<cfhttpparam
    type="xml"
    name="API_GetUserInfo"
    value="#ToString(API_GetUserInfo)#"
/>

Dato quanto sopra non ha funzionato, ho provato molte altre cose, e qui è dove mi trovo in. Ho usato Fiddler per monitorare le richieste HTTP che rende poster che sappiamo è una buona richiesta e qui è l'intestazione della richiesta:

POST https://workplace.intuit.com/db/main HTTP/1.1
Host: workplace.intuit.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
QUICKBASE-ACTION: API_GetUserInfo
Content-Type: application/xml; charset=UTF-8
Content-Length: 109
Cookie: scache=Jun  3 2010 18:30:57_3; ptest=1277297927934; stest=1277298582509
Pragma: no-cache
Cache-Control: no-cache

<qdbapi>
  <apptoken>c4abnsdepseds7hdzurwvjjb4m</apptoken>
  <email>jimmyhogoboom@gmail.com</email>
</qdbapi>

La prossima cosa che ho provato è stata imitando come gran parte della richiesta che potevo ma non è ancora tornando l'XML. Alcune cose che noterete cambiato è l'uso di CFSAVECONTENT sbarazzarsi della dichiarazione XML e l'aggiunta di una serie di intestazione e biscotto oggetti da cercare di simulare la richiesta Poster:

<cfsavecontent variable="API_GetUserInfo"><qdbapi>
    <apptoken>c4abnsdepseds7hdzurwvjjb4m</apptoken>
    <email>jimmyhogoboom@gmail.com</email>
</qdbapi></cfsavecontent>

<cfhttp url="https://workplace.intuit.com/db/main" method="POST" result="objGet" useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)">
    <cfhttpparam type="header" name="Accept" value="application/xml" />
    <cfhttpparam type="header" name="Accept-Language" value="en-us,en" />
    <cfhttpparam type="header" name="Accept-Charset" value="utf-8" />
    <cfhttpparam type="header" name="Keep-Alive" value="115" />
    <cfhttpparam type="header" name="Connection" value="keep-alive" />
    <cfhttpparam type="header" name="QUICKBASE-ACTION" value="API_GetUserInfo" />
    <cfhttpparam type="header" name="Content-Type" value="application/xml; charset=UTF-8" />
    <cfhttpparam type="cookie" name="scache" value="Jun  3 2010 18:30:57_3" />
    <cfhttpparam type="cookie" name="ptest" value="1277297927934" />
    <cfhttpparam type="cookie" name="stest" value="1277298582509" />
    <cfhttpparam type="header" name="Pragma" value="no-cache" />
    <cfhttpparam type="header" name="Cache-Control" value="no-cache" />
    <!---<cfhttpparam encoded="no" type="formfield" name="" value="#API_GetUserInfo#" />--->
    <cfhttpparam type="body" value="#API_GetUserInfo#" />
</cfhttp>

cfhttp non sta traducendo alcune proprietà come previsto e io non sono sicuro quale sia. Forse una seconda serie di occhi vi aiuterà. Potrebbe essere necessario utilizzare CreateObject e Java direttamente (Java.net classi) per fare la richiesta HTTP e bypass cfhttp e ciò che ogni difetto traballante sta aggiungendo alla richiesta HTTP per causare il fallimento.

Altri suggerimenti

Proprio rovistando nella pagina intuire sdk, sembra che ci sia un PHP dev kit disponibile se si ha accesso. Vorrei frugare la chiamata HTTP si fa per avere un'idea di come strutturare una chiamata simile a ColdFusion. Perché si dice "distaccato" si usa normalmente il tipo di FormField per il secondo marchio cfhttpparam come utilizzando il tipo di XML cambia la struttura e il tipo di contenuto della richiesta.

Ho anche notato un Java SAML Gateway sul loro sito che si potrebbe essere in grado di aggiungere il file di guerra al tuo sito e chiamare l'API di Java direttamente dal codice ColdFusion.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top