代码之家  ›  专栏  ›  技术社区  ›  Sergey Galashyn

在ColdFusion中使用Put请求创建Wufoo Webhook

  •  1
  • Sergey Galashyn  · 技术社区  · 14 年前

    我在建筑方面遇到了麻烦 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 回复  |  直到 14 年前
        1
  •  3
  •   yfeldblum    14 年前

    武福 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)#" />
    
        2
  •  1
  •   yfeldblum    14 年前

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

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

    这将为您提供一个带有键的结构 URL HANDSHAKEKEY .

    在Web上,可能包括Wufoo REST API,密钥区分大小写。在这种情况下,Wufoo accepts 钥匙 url , handshakeKey metadata - 在那个套管里 .

    在ColdFusion中,带有结构放置(赋值)的关联数组表示法允许您保留所需的精确大小写。

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

    这将为您提供一个带有键的结构 网址 手摇键 .

        3
  •  0
  •   Joshua Cyr    14 年前

    不熟悉这个API,但是URL、握手键等应该是表单发布参数吗?

    以下参数必须是 作为发布参数传递到Web 钩子API

    url-此必需参数 表示服务器上的URL 当一个新的 条目已提交。我们确实验证了 并拒绝格式错误的URL。

    握手键-此可选参数 在Web钩子中描述 集成入门 文档。

    元数据=真-此可选值 参数要发送的Web挂钩 表单/字段

    我读到的时候,他们好像在问 对于每个参数。

    错误表明它找不到URL参数,可能就是它。