Frage

UPDATE: ich es geschafft, das Ding zum Laufen zu bringen

Es stellt sich heraus, Sie brauchen ein sicheres Ticket mit dem Aufruf senden eine richtige Antwort zu erhalten. Ich habe keine Ahnung, warum es in Poster, ohne es funktionierte. Es gibt ein paar anderen Parameter, die benötigt werden, die Coldfusion offenbar nicht standardmäßig senden.

Hier ist ein Arbeits Aufruf:

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

Und Dies gibt eine perfekte Antwort vom Intuit Arbeitsplatz.


Ich versuche, einen Anruf zu Intuit API mit Coldfusion zu senden. Der Aufruf muss (über einen SAML-Gateway), um sie veröffentlicht werden. Ein Token muss im Header angegeben werden.

Ich habe wirklich keine Erfahrung mit cfhttp, und bin total mit dieser ganzen API-Aufruf Situation verwirrt. Ich brauche eine ziemlich grundlegende Unterstützung hier.

Im Grunde genommen, wie kann ich den Tag cfhttp formatieren, so dass ich dieses Token im Header haben kann?

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

Später, ich habe das Poster Add anprobiert für Firefox.

Ich kann den Anruf an der Arbeit ganz gut mit dem, aber wenn ich versuche, es in CF zu replizieren, kann ich noch keine Antwort erhalten.

Hier ist der aktualisierte Code:

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

Und in Poster, hier ist, was ich eingeben:

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

Content Type: xml

Inhalt:

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

und 1 Rubrik:

Name: Quickbase-ACTION

Wert: API_GetUserInfo

Mit diesen Einstellungen, erhalte ich eine richtige Antwort.

Alle Ideen, was ich mit dem Coldfusion-Code falsch?

War es hilfreich?

Lösung

Got es. Sie benötigen eine XML mit einem ToString wickeln. Es wird die XML-Deklaration am Anfang des XML setzen, um es ein gültiges XML-Dokument zu machen. Ich habe gerade versucht es auf meinem Ende und es hat funktioniert.

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

Da die oben nicht funktioniert hat, habe ich versucht, einige andere Dinge, und hier ist, wo ich bin. Ich habe Fiddler die HTTP-Anforderungen zu überwachen, dass Plakat macht, dass wir wissen, eine gute Anfrage ist und hier ist die Request-Header:

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>

Das nächste, was ich versuchte, wurde so viel von der Anfrage nachahmt, wie ich konnte, aber es kehrt immer noch nicht die XML. Einige Dinge, die Sie geändert werden feststellen, ist der Einsatz von cfsavecontent loswerden der XML-Deklaration zu erhalten und die Zugabe einer Reihe von Header und Cookie-Eigenschaften zu versuchen, die Poster Anfrage zu simulieren:

<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 ist die Übersetzung nicht eine Eigenschaft, wie erwartet, und ich bin nur nicht sicher, welches es ist. Vielleicht hilft ein zweiter Satz von Augen. Möglicherweise müssen direkt und Create Java verwenden (java.net Klassen), um die HTTP-Anforderung zu tun, und Bypass CFHTTP und was jeder wackelig Standard an die HTTP-Anforderung ist das Hinzufügen es fehlschlagen.

Andere Tipps

stochern Sie einfach die intuit sdk Seite sieht es aus wie ein PHP Entwickler-Kit zur Verfügung, wenn Sie Zugriff haben. Ich würde den HTTP-Aufruf macht es herumzustochern, um eine Vorstellung davon zu bekommen, wie ein ähnlichen Aufruf in Coldfusion zu strukturieren. Weil Sie sagen, „Hinweis“ Sie normalerweise die Art der Formfield für den zweiten cfhttpparam Tag als mit der Art von XML verwenden, würden die Struktur und die Art des Inhalts der Anfrage ändert.

Ich habe auch bemerkt ein Java SAML-Gateway auf ihrer Website, dass Sie die Java api direkt von Ihrem Coldfusion-Code möglicherweise in der Lage, die Krieg-Datei auf Ihrer Website hinzufügen und anrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top