我在向吴佛建造正确的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,一切都应该没问题。
任何想法我的代码有什么问题?
提前致谢。
答案 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
} />
这为您提供了一个包含键URL
和HANDSHAKEKEY
的结构。
在Web上,可能包括Wufoo REST API,密钥区分大小写。在这种情况下,Wufoo accepts键url
,handshakeKey
和metadata
- 在该大写中。
在ColdFusion中,带有struct puts(赋值)的关联数组表示法可以让你保持你想要的精确套管。
<cfset local.request = { } />
<cfset local.request["url"] = local.webHookURL />
<cfset local.request["handshakeKey"] = local.webHookKey />
这为您提供了一个包含键url
和handshakeKey
的结构。
答案 2 :(得分:0)
不熟悉这个api但是url,handshakekey等是否应该形成post params?
必须具备以下参数 作为post参数传递给Web Hook API
url - 这个必需参数 表示服务器上的URL Web Hook会在新的时候调用 提交条目。我们确实验证了 网址并拒绝格式错误的网址。
handshakeKey - 此可选参数 在Web Hook中描述 整合入门 文档。
metadata = true - 此可选值 参数Web Hook要发送 形式/字段
我读到的方式,看起来像他们在问 对于每个参数。
该错误表明它无法找到URL参数,也许就是它。