سؤال

تحديث: تمكنت من عمل هذا الشيء!

تبين ، تحتاج إلى إرسال تذكرة آمنة مع المكالمة للحصول على استجابة مناسبة. ليس لدي أي فكرة عن سبب عمله في الملصق بدونه. هناك بعض المعلمات الأخرى المطلوبة والتي يبدو أن Coldfusion لا ترسل افتراضيًا.

هذه مكالمة عمل:

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

وهذا يعيد استجابة مثالية من مكان عمل Intuit.


أحاول إرسال مكالمة إلى واجهة برمجة تطبيقات Intuit مع Coldfusion. يجب نشر المكالمة إليهم (من خلال بوابة SAML). يجب تزويد الرمز المميز في الرأس.

ليس لدي أي خبرة مع CFHTTP ، وأنا مرتبك تمامًا مع وضع استدعاء API بالكامل. أحتاج إلى بعض المساعدة الأساسية هنا.

في الأساس ، كيف يمكنني تنسيق علامة CFHTTP حتى أتمكن من الحصول على هذا الرمز المميز في الرأس؟

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

في وقت لاحق ، جربت الملصق إضافة ل Firefox.

يمكنني الحصول على المكالمة للعمل بشكل جيد مع ذلك ، لكن عندما أحاول تكرارها في التليف الكيسي ، ما زلت لا أستطيع الحصول على رد.

إليك الرمز المحدث:

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

وفي الملصق ، إليك ما أدخله:

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

نوع المحتوى: XML

محتوى:

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

ورأس واحد:

الاسم: Quickbase-action

القيمة: api_getuserinfo

مع هذه الإعدادات ، أحصل على استجابة صحيحة.

أي أفكار حول ما أفعله خطأ في رمز Coldfusion؟

هل كانت مفيدة؟

المحلول

فهمتك. تحتاج إلى لف XML الخاص بك مع tostring. سيضع إعلان XML في بداية XML لجعله مستند XML صالح. لقد جربتها للتو في نهايتي وعملت.

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

نظرًا لأن ما سبق لم ينجح ، جربت عدة أشياء أخرى وهنا هنا. لقد استخدمت Fiddler لمراقبة طلبات HTTP التي تجعل الملصق الذي نعرفه هو طلب جيد وهنا رأس الطلب:

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>

الشيء التالي الذي جربته هو تقليد أكبر قدر ممكن من الطلب ولكنه لا يزال لا يعيد XML. بعض الأشياء التي ستلاحظ تغييرها هي استخدام CFSaveContent للتخلص من إعلان XML وإضافة عدد من خصائص الرأس وملفات تعريف الارتباط لمحاولة محاكاة طلب الملصق:

<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 بعض الممتلكات كما هو متوقع ، وأنا لست متأكدًا من أي منها. ربما ستساعد مجموعة ثانية من العيون. قد تضطر إلى استخدام CreateObject و Java مباشرة (فئات java.net) للقيام بطلب HTTP وتجاوز CFHTTP وما هو الافتراضي المتزعزع الذي يضيفه إلى طلب HTTP لفشله.

نصائح أخرى

مجرد التثقيف حول صفحة Intuit SDK ، يبدو أن هناك ملف طقم PHP Dev متاح إذا كان لديك وصول. كنت أتجول حول مكالمة HTTP التي تجعلها تحصل على فكرة عن كيفية تنظيم مكالمة مماثلة في Coldfusion. نظرًا لأنك تقول "تم نشر" ، فإنك ستستخدم عادة نوع FormField لعلامة CFHTTPARAM الثانية لأن استخدام نوع XML يغير الهيكل ونوع المحتوى للطلب.

لاحظت أيضا أ بوابة جافا سام في موقعهم ، قد تكون قادرًا على إضافة ملف الحرب إلى موقعك والاتصال بجهاز API Java مباشرة من رمز ColdFusion الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top