Question

Mise à jour: J'ai réussi à obtenir ce travail chose

Active, vous avez besoin d'envoyer un billet sécurisé avec l'appel pour obtenir une réponse appropriée. Je ne sais pas pourquoi il a travaillé dans l'affiche sans elle. Il y a quelques autres paramètres requis qui ColdFusion apparemment n'envoie pas par défaut.

Voici un appel de travail:

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

Et ceci retourne une réponse parfaite du milieu de travail Intuit.


Je suis en train d'envoyer un appel à l'API de Intuit avec Coldfusion. L'appel doit être envoyée à eux (via une passerelle SAML). Un jeton doit être fourni dans l'en-tête.

Je ne sais vraiment pas d'expérience avec cfhttp, et je suis tout à fait confondre avec cette situation d'appel API ensemble. J'ai besoin d'une aide assez basique ici.

En gros, comment puis-je formater la balise cfhttp afin que je puisse avoir ce jeton dans l'en-tête?

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

Plus tard, je l'ai essayé l'ajout d'affiche pour Firefox.

Je peux obtenir l'appel à travailler très bien avec cela, mais lorsque je tente de le reproduire dans CF, je ne peux toujours pas obtenir une réponse.

Voici le code mis à jour:

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

Et Poster, voici ce que je suis entrée:

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

Type de contenu: xml

Contenu:

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

1 et Rubrique:

Nom: QuickBase-ACTION

Valeur: API_GetUserInfo

Avec ces paramètres, je reçois une réponse correcte.

Toutes les idées sur ce que je fais mal avec le code coldfusion?

Était-ce utile?

La solution

Got it. Vous avez besoin d'envelopper votre XML avec un ToString. Il mettra la déclaration XML au début du XML pour en faire un document XML valide. Je viens d'essayer sur ma fin et ça a marché.

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

Depuis les travaux fait ci-dessus non, j'ai essayé plusieurs autres choses et voici où je suis à. Je Fiddler pour surveiller les requêtes HTTP qui affiche fait que nous savons est une bonne demande et est ici l'en-tête de la demande:

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 prochaine chose que j'ai essayé imitait autant de la demande que je le pouvais, mais il est toujours pas de retour le XML. Certaines choses ont changé, vous remarquerez est l'utilisation de CFSAVECONTENT pour se débarrasser de la déclaration XML et l'ajout d'un certain nombre de propriétés d'en-tête et les cookies pour essayer de simuler la demande de l'utilisateur:

<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 ne se traduit pas une propriété comme prévu et je ne suis pas sûr que l'on est. Peut-être un second ensemble d'yeux vous aidera. Peut-être utiliser CreateObject et Java directement (classes java.net) pour faire la requête HTTP et by-pass CFHTTP et ce que chaque défaut bancal, il ajoute à la requête HTTP pour la faire échouer.

Autres conseils

Juste farfouillé la page sdk Intuit, il semble qu'il y ait un kit PHP dev disponible si vous avez accès. Je farfouiller l'appel HTTP il fait pour avoir une idée de la façon de structurer un appel similaire dans ColdFusion. Parce que vous dites « POSTé » que vous utilisez normalement le type de FormField pour la deuxième balise de cfhttpparam en utilisant le type de XML modifie la structure et le type de contenu de la demande.

J'ai aussi remarqué un passerelle Java SAML sur leur site que vous pourriez être en mesure d'ajouter le fichier de guerre à votre site et appeler l'API Java directement à partir de votre code ColdFusion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top