Pregunta

ACTUALIZACIÓN: Me las arreglé para conseguir esta cosa de trabajo

Resulta que, tiene que enviar un ticket de seguro con la llamada para obtener una respuesta adecuada. No tengo idea de por qué funcionaba en cartel sin ella. Hay un par de otros parámetros que se requieren, que ColdFusion aparentemente no envía por defecto.

Esta es una llamada de trabajo:

<!---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>

Y esto devuelve una respuesta perfecta desde el Intuit lugar de trabajo.


Estoy intentando enviar una llamada a la API de Intuit con ColdFusion. La llamada debe ser enviado a ellos (a través de una puerta de entrada SAML). Un contador debe ser suministrada en la cabecera.

No tengo realmente ninguna experiencia con cfhttp, y estoy totalmente confundido con toda esta situación llamada a la API. Necesito un poco de ayuda bastante básico aquí.

Básicamente, ¿cómo puedo dar formato a la etiqueta cfhttp de modo que puede tener este token en la cabecera?

<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>

Más tarde, he probado el cartel complemento para Firefox.

que puedo conseguir la llamada a trabajar muy bien con eso, pero cuando intento de replicar en la FQ, todavía no puede obtener una respuesta.

Aquí está el código de actualización:

<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>

Y en cartel, esto es lo que estoy escribiendo:

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

Tipo de contenido: XML

Contenido:

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

y 1 Header:

Nombre: QuickBase-ACCIÓN

Valor: API_GetUserInfo

Con estos ajustes, recibo una respuesta correcta.

Alguna idea de lo que estoy haciendo mal con el código ColdFusion?

¿Fue útil?

Solución

Lo tengo. Es necesario para envolver el código XML con una ToString. Con él, la declaración XML al principio del XML para que sea un documento XML válido. Yo sólo lo probé en mi final y funcionó.

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

Dado lo anterior no funciona, he intentado varias otras cosas y aquí es donde estoy. Solía ??Fiddler para monitorear las solicitudes HTTP que cartel hace que sabemos que es una buena solicitud y aquí está la cabecera de la solicitud:

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 siguiente cosa que probé estaba imitando tanto de la solicitud como pude pero todavía no está devolviendo el XML. Algunas cosas que usted notará cambiado es el uso de CFSAVECONTENT para deshacerse de la declaración XML y la adición de una serie de propiedades de encabezado y galletas para tratar de simular la solicitud del cartel:

<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 no se está traduciendo alguna propiedad como se esperaba y yo no estoy seguro de cuál se trata. Tal vez un segundo par de ojos ayudará. Podría tener que utilizar CreateObject y Java directamente (java.net clases) para hacer la petición HTTP y bypass CFHTTP y lo que cada defecto poco firme que se suma a la petición HTTP para hacer que falle.

Otros consejos

Sólo hurgar la página intuir SDK, parece que hay un PHP dev kit disponible si tiene acceso. Me saca alrededor de la llamada HTTP se hace para tener una idea de cómo estructurar una llamada similar en ColdFusion. Porque se dice "publicado" se suele utilizar el tipo de FormField para la segunda marca cfhttpparam como el uso del tipo de XML cambia la estructura y el tipo de contenido de la solicitud.

También notó un de Java SAML puerta de entrada en su sitio que usted podría ser capaz de añadir el archivo de la guerra a su sitio y llamar a la API de Java directamente desde el código de ColdFusion.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top