Создание вебфука Wufoo с запросом PUT в ColdFusion - PullRequest
1 голос
/ 20 октября 2010

У меня проблемы со сборкой правильного запроса PUT для Wufoo.

Во всех моих попытках я вижу ту же ошибку:

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 ]

3 голосов
/ 20 октября 2010

Wufoo запрашивает параметров, которые «будут переданы как параметры публикации в API Web Hook».Попробуйте использовать кодировку 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 голос
/ 20 октября 2010

Как правило, в ColdFusion имена переменных нечувствительны к регистру и прописными.

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

Это дает вам структуру с ключами URL и HANDSHAKEKEY.

В Интернете, по-видимому, включая API-интерфейс Wufoo REST, ключи чувствительны к регистру. В этом случае Wufoo принимает ключи url, handshakeKey и metadata - в этом корпусе .

В ColdFusion нотация ассоциативного массива со структурированными (присваиваниями) позволяет вам сохранять именно тот регистр, который вам нужен.

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

Это дает вам структуру с ключами url и handshakeKey.

0 голосов
/ 20 октября 2010

Не знаком с этим API, но должен ли URL-адрес, рукопожатие и т. Д. Быть формами post-параметров?

Следующие параметры должны быть переданы в качестве параметров записи в API веб-хука

url - этот обязательный параметр представляет URL-адрес на вашем сервере, который Web Hook будет вызывать при отправке новой записи.Мы проверяем URL-адрес и отклоняем неверно сформированные URL-адреса.

handshakeKey - этот необязательный параметр описан в документации по началу работы с интеграцией веб-хука.

metadata = true - этот необязательный параметр-значение веб-хука дляотправить по форме / полю

То, как я это прочитал, похоже, что они запрашивают каждый из параметров.

Ошибка говорит о том, что не удается найти параметр URL, может быть, это так.

...