2010-10-20 57 views
1

我正在爲Wufoo構建正確的PUT request而遇到麻煩。在ColdFusion中創建具有PUT請求的Wufoo webhook

在我所有的努力我看到了同樣的錯誤:

404 A WebHook must contain a url parameter.

這裏是版本JSON數據類型:

<cfset local.action = "forms/#local.formHash#/webhooks.json" /> 

<cfset local.request = {"url" : local.webHookURL, "handshakeKey" : local.webHookKey} /> 

<cfset local.request["handshakeKey"] = local.webHookKey /> 

<cfhttp url="#local.baseURL##local.action#" method="put" username="#local.apiKey#" password="#local.apiPass#"> 
    <cfhttpparam type="header" name="Content-Type" value="application/json; charset=UTF-8" /> 
    <cfhttpparam type="body" value="#SerializeJSON(local.request)#" /> 
</cfhttp> 

同樣的錯誤使用file時:

<cfset local.action = "forms/#local.formHash#/webhooks.json" /> 

<cfset local.request = {"url" : local.webHookURL, "handshakeKey" : local.webHookKey} /> 

<cffile action="write" file="#GetTempDirectory()#webhook.json" output="#SerializeJSON(local.request)#"> 

<cfhttp url="#local.baseURL##local.action#" method="put" username="#local.apiKey#" password="#local.apiPass#"> 
    <cfhttpparam type="header" name="Content-Type" value="application/json; charset=UTF-8" /> 
    <cfhttpparam type="file" mimetype="application/json" name="json" file="#GetTempDirectory()#webhook.json" /> 
</cfhttp> 

UPDATE:

爲了使代碼在ACF的工作(我的代碼在只有Railo)使用這個語法要求:

<cfset local.request = {} /> 
<cfset local.request["url"] = local.webHookURL /> 
<cfset local.request["handshakeKey"] = local.webHookKey /> 

兩種方法應該產生區分大小寫鍵相同JSON。


而且我已經試過了XML數據類型:

<cfset local.action = "forms/#local.formHash#/webhooks.xml" /> 

<cfsavecontent variable="putXML"> 
<cfoutput> 
<?xml version="1.0" encoding="UTF-8"?> 
<WebHookPutRequest> 
<url>#XMLFormat(local.webHookURL)#</url> 
<handshakeKey>#XMLFormat(local.webHookKey)#</handshakeKey> 
</WebHookPutRequest> 
</cfoutput> 
</cfsavecontent> 

<cffile action="write" file="#GetTempDirectory()#webhook.xml" output="#Trim(putXML)#"> 

<cfhttp url="#local.baseURL##local.action#" method="put" username="#local.apiKey#" password="#local.apiPass#"> 
    <cfhttpparam type="header" name="Content-Type" value="application/xml; charset=UTF-8" /> 
    <cfhttpparam type="body" value="#putXML#" /> 
</cfhttp> 

在這裏我不知道如果我的XML是正確的,但對於JSON一切都應該罰款。

任何想法我的代碼有什麼問題?

在此先感謝。

回答

3

Wufoo asks for要將參數作爲後置參數傳遞給Web Hook API。嘗試使用application/x-www-form-urlencoded編碼作爲請求的主體。在ColdFusion中,您可以使用<cfhttpparam type="FormField" />執行此操作。

<cfhttpparam type="FormField" name="url" value="#local.webHookURL#" /> 
<cfhttpparam type="FormField" name="handshakeKey" value="#local.webHookKey#" /> 

但是,ColdFusion用PUT方法拒絕了這種技術。您可以使用自己的身體編碼:

<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded; charset=UTF-8" /> 
<cfhttpparam type="body" value="url=#UrlEncode(local.webHookURL)#&handshakeKey=#UrlEncode(local.webHookKey)#" /> 
+0

第二個建議工作!非常感謝,正義! – Sergii 2010-10-20 16:59:16

+0

相關問題:我將如何發送帶'DELETE' reqest的'hash'屬性? 'body'類型不適用於DELETE,無法使'formField'工作。看到這個文檔http://wufoo.com/docs/api/v3/webhooks/delete/ – Sergii 2010-10-20 17:19:17

+0

ColdFusion理解'type =「FormField」'僅適用於'POST'請求​​。可以在'DELETE'請求中包含實體,就像'PUT'請求一樣(參見http://stackoverflow.com/questions/299628/is-an-entity-body-allowed-for-an-http-delete-請求),但是您將不得不使用相同的技術來包含主體,因爲您需要將主體包含在「PUT」請求中。如果您需要'application/x-www-form-urlencoded'類型的主體,那麼您應該(在ColdFusion中)使用本答案中描述的技術。 – yfeldblum 2010-10-20 18:25:19

0

在ColdFusion中,通常,變量名稱不區分大小寫,也不區分大小寫。

<cfset local.request = { 
    url = local.webHookURL, 
    handshakeKey = local.webHookKey 
} /> 

這給你的鑰匙URLHANDSHAKEKEY一個結構。

在Web上,可能包含Wufoo REST API,密鑰區分大小寫。在這種情況下,Wufoo acceptsurl,handshakeKeymetadata-在那個外殼

在ColdFusion中,使用struct puts(assignments)的關聯數組表示法可讓您保持所需的精確外殼。

<cfset local.request = { } /> 
<cfset local.request["url"] = local.webHookURL /> 
<cfset local.request["handshakeKey"] = local.webHookKey /> 

這給你的鑰匙urlhandshakeKey一個結構。

+0

此建議在這裏並不適用。請參閱更新的帖子 - 有關Railo與ACF的筆記。 – Sergii 2010-10-20 16:43:25

0

不熟悉這個API,但應該的URL,handshakekey等形式後params?

The following parameters must be passed as post parameters to the Web Hook API

url - this required parameter represents the URL on your server that the Web Hook will call when a new entry is submitted. We do validate the URL and reject malformed URLs.

handshakeKey - this optional parameter is described in the Web Hook integration getting started documentation.

metadata=true - this optional value parameter the Web Hook to send along form/field

我讀的方式,它看起來像他們所要求 每個PARAMS的。

錯誤是暗示它找不到URL參數,也許就是這樣。

+0

當使用' Sergii 2010-10-20 16:47:46