1

我在向 Wufoo构建正确的PUT 请求时遇到了麻烦。

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

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,一切都应该没问题。

任何想法我的代码有什么问题?

提前致谢。

4

3 回答 3

3

Wufoo要求将参数“作为发布参数传递给 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)#" />
于 2010-10-20T16:53:00.440 回答
1

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

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

这为您提供了一个带有键URLHANDSHAKEKEY.

在 Web 上,可能包括 Wufoo REST API,键是区分大小写的。在这种情况下,Wufoo接受该 case的键url,handshakeKeymetadata- 。

在 ColdFusion 中,带有 struct puts(赋值)的关联数组表示法可让您保持所需的精确大小写。

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

这为您提供了一个带有键urlhandshakeKey.

于 2010-10-20T16:35:52.910 回答
0

不熟悉这个api,但url、handshakekey等应该是post params吗?

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

url - 此必需参数表示提交新条目时 Web Hook 将调用的服务器上的 URL。我们会验证 URL 并拒绝格式错误的 URL。

handshakeKey - Web Hook 集成入门文档中描述了此可选参数。

metadata=true - 这个可选值参数是 Web Hook 沿表单/字段发送

按照我的阅读方式,看起来他们正在要求每个参数。

该错误表明它找不到 URL 参数,也许就是这样。

于 2010-10-20T16:45:04.513 回答