在ColdFusion中使用PUT请求创建Wufoo webhook

时间:2010-10-20 16:20:56

标签: coldfusion cfhttp webhooks wufoo

我在向吴佛建造正确的PUT request时遇到了麻烦。

在我的所有尝试中,我都看到同样的错误:

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>

更新:

要使代码在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 个答案:

答案 0 :(得分:3)

Wufoo asks for参数“作为post参数传递给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)#" />

答案 1 :(得分:1)

在ColdFusion中,通常,变量名称不区分大小写,大写。

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

这为您提供了一个包含键URLHANDSHAKEKEY的结构。

在Web上,可能包括Wufoo REST API,密钥区分大小写。在这种情况下,Wufoo acceptsurlhandshakeKeymetadata - 在该大写中。

在ColdFusion中,带有struct puts(赋值)的关联数组表示法可以让你保持你想要的精确套管。

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

这为您提供了一个包含键urlhandshakeKey的结构。

答案 2 :(得分:0)

不熟悉这个api但是url,handshakekey等是否应该形成post params?

  

必须具备以下参数   作为post参数传递给Web   Hook API

     

url - 这个必需参数   表示服务器上的URL   Web Hook会在新的时候调用   提交条目。我们确实验证了   网址并拒绝格式错误的网址。

     

handshakeKey - 此可选参数   在Web Hook中描述   整合入门   文档。

     

metadata = true - 此可选值   参数Web Hook要发送   形式/字段

我读到的方式,看起来像他们在问  对于每个参数。

该错误表明它无法找到URL参数,也许就是它。