天道酬勤,学无止境

Create Wufoo webhook with PUT request in ColdFusion

I'm having troubles with building correct PUT request to the Wufoo.

In all my attempts I see the same error:

404 A WebHook must contain a url parameter.

Here is the version with JSON data type:

<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>

Same failure when using 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:

To make the code working in ACF (my code works in Railo only) use this syntax for request:

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

Both methods should produce same JSON with case-sensitive keys.


Also I've tried the XML data type:

<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>

Here I'm not sure if my XML is correct, though for JSON everything should be fine.

Any ideas what's wrong with my code?

Thanks in advance.

评论

Wufoo asks for the parameters to be "be passed as post parameters to the Web Hook API". Try using the application/x-www-form-urlencoded encoding for the body of the request. In ColdFusion, you can do this with <cfhttpparam type="FormField" />.

<cfhttpparam type="FormField" name="url" value="#local.webHookURL#" />
<cfhttpparam type="FormField" name="handshakeKey" value="#local.webHookKey#" />

However, ColdFusion rejects this technique with PUT methods. You can encode the body yourself using:

<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)#" />

In ColdFusion, generally, variable names are case-insensitive and uppercase.

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

This gives you a struct with keys URL and HANDSHAKEKEY.

On the Web, presumably including with the Wufoo REST API, keys are case-sensitive. In this case, Wufoo accepts keys url, handshakeKey, and metadata - in that casing.

In ColdFusion, associative-array notation with struct puts (assignments) lets you keep the precise casing you want.

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

This gives you a struct with keys url and handshakeKey.

Not familiar with this api but should the url, handshakekey, etc be form post params?

The following parameters must be passed as post parameters to the Web Hook API

url - this required parameter represents the URL on your server that the Web Hook will call when a new entry is submitted. We do validate the URL and reject malformed URLs.

handshakeKey - this optional parameter is described in the Web Hook integration getting started documentation.

metadata=true - this optional value parameter the Web Hook to send along form/field

The way I read that, it looks like they are asking for each of the params.

The error is suggesting it can't find the URL param, maybe that is it.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Only Allow POST Requests and Deny all other REQUEST_METHOD using .htaccess
    I have some email PHP Scripts which I do not want the user to have a look by a GET, but I am using it to send as an email, using wufoo's webHook if anyone knows about it, so it uses POST so I just want POST Requests to be allowed otherwise, 403 or 404 how do I do that? I tried some answers given on SO and browsed documentation of apache web server, the best answer I found was this: RewriteEngine On RewriteCond %{REQUEST_METHOD} !=GET RewriteRule ^.*$ /path/to But I suppose this should be written in the directory where I have PHP Script, I just want use one .htaccess in root. Folder Structure
  • 如何捕获 Shopify Webhook 发送的 HTTP POST 请求(How to catch the HTTP POST request sent by a Shopify Webhook)
    问题 我有点菜鸟,并且不怕承认这一点,我正在将这个项目作为一种学习经验,以便更好地处理 php 和服务器端脚本/ing 处理。 我正在尝试想出一种使用 Shopify 的方法,并在每次从 Shopify 购物车完成订单时同时更新服务器外数据库。 例如,有人从我的在线商店购买了一些东西,我希望它更新我的家庭数据库库存以显示它现在少了一件。 我得出的结论是,最好的方法是设置一个 webhook 通知,将 HTTP POST 请求发送到我的服务器,然后我让我的服务器捕获 POST 并将其解析为 XML。 然后我将通过将更新我的数据库的 php 脚本读取 XML。 我的 php 没有问题,但我似乎无法弄清楚如何在我的服务器上捕获 webhook。 Webhook 要求我提供一个 URL 来发送 POST 请求,我的问题是; 网址是什么? 我做了一些研究,发现你可以通过 html、php、Access-Control-Allow-Origin 等多种方式来捕获 POST 请求。但是,由于我还是个新手,所以我不知道真正了解如何做到这些。 我尝试过使用 HTML 隐藏操作表单,但似乎无法让它捕获 XML。 我想要做的就是让 webhook 发送其 POST 请求,并将其捕获为 .xml。 这样我就可以在每天结束时读取 xml,并相应地更新数据库。 如果您能想到更好或更简单的方法来做到这一点
  • Create a webhook using API in shopify
    Here I stuck in shopify creating webhook through API I am using cake php for creating public shopify app Now I would like to create carts/update hook for my app using API here is my code Cake php library : https://github.com/cmcdonaldca/CakePHP-Shopify-Plugin File : ShopifyApiComponent.php CODE : public function createwebhook($shop_domain, $access_token){ $method = "POST"; $path = "/admin/webhooks.json"; $params = array("webhook" => array( "topic"=>"carts/create", "address"=> $this->site_url."users/upUpdateCart", "format"=> "json")); $password = md5($this->secret.$access_token);//If your
  • Facebook 向 webhook 发送空的 POST(Facebook sends empty POST to a webhook)
    问题 我正在尝试通过 facebook 应用程序为我的页面安装用于 Leadgen 事件的 webhook。 所以我有: 潜在客户来自的 Facebook 页面脸书应用我想保存潜在客户的网络服务器 我相信应用程序和网络服务器连接良好。 Webhook 显示在应用程序页面等处。但是当我尝试使用此工具 https://developers.facebook.com/tools/lead-ads-testing 创建测试主管时,我收到了一个没有数据的 POST 请求。 我怀疑权限问题,但我可以直接使用 PHP SDK 检查页面中的潜在客户(通过 Leadgen_id),并且 POST 请求仅通过 URL 从 Facebook 发送,因此他们还不知道令牌。 UPD对同一 url ( curl -d "param=value" https://..url.. ) 的普通 POST 请求按预期工作。 回答1 Facebook 在请求正文中发送潜在客户数据。 如果您使用的是框架,请检查您是否有权访问请求正文。 尝试使用 Runscope 等第三方中间服务查看完整请求,非常有用 回答2 Facebook 将 webhook 数据作为Content-Type: application/json ,而不是作为…: application/x-www-form-urlencoded (作为带有
  • 文字轮廓效果(Outline effect to text)
    问题 CSS中有什么方法可以为不同颜色的文本提供轮廓? 我想突出显示文本的某些部分以使其更直观-例如名称,链接等。更改链接颜色等现在很普遍,因此我需要一些新的东西。 回答1 CSS3中有一个实验性的webkit属性,称为text-stroke,我一直在尝试使其工作一段时间,但到目前为止仍未成功。 相反,我所做的是使用已经受支持的text-shadow属性(我相信在Chrome,Firefox,Opera和IE 9中受支持)。 使用四个阴影来模拟描边文本: .strokeme { color: white; text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; } <div class="strokeme"> This text should have a stroke in some browsers </div> 我在这里为你做了一个演示 这里有一个悬停的例子 正如Jason C在评论中提到的那样,除Opera Mini之外,所有主流浏览器现在都支持text-shadow CSS属性。 在哪里可以使用此解决方案以实现向后兼容性(与自动更新的浏览器无关),我相信应该使用text-stroke CSS。 回答2 编辑: text-stroke现在已经相当成熟
  • 为什么Laravel API在POST和PUT方法上返回419状态代码?(Why does the Laravel API return a 419 status code on POST and PUT methods?)
    问题 我正在尝试通过使用Laravel创建RESTful API。 我已经使用php artisan make:controller RestController创建了我的控制器,这是我的控制器代码: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class RestController extends Controller { private $arr = array( array("name"=>"jon", "family"=>"doe"), array("name"=>"jhon", "family" => "doue") ); public function index(){ return json_encode($this->arr); } public function store(Request $request){ return "oops!!"; } public function update (Request $request, $id){ return "test"; } } 我在我的routes / web.php文件中添加了以下代码行来创建此路由: Route::resource('person', 'RestController'); 当我尝试在GET /
  • IIS7同时显示自己的404消息和CF9消息; 应该只显示自己的(IIS7 Displays BOTH Its Own 404 Message & CF9 Message; Should Display Just Its Own)
    问题 我的目标似乎很简单。 我希望IIS 7.5处理静态或动态(ColdFusion 9)内容的所有404未找到文件请求,并将用户定向到其自定义404 HTML页面。 我相信我需要的IIS设置是existingReponse=Replace , errorMode=Custom和为404指定的文件路径。这就是我所做的。 安装ColdFusion 10后,它可以工作。 使用ColdFusion 9,由于某种原因,静态IIS 404响应和ColdFusion 404响应都发送到客户端并显示。 很奇怪。 我尝试了所有方式的备用配置,每种方法似乎都存在一些问题。 有什么想法为什么IIS无法替换ColdFusion的404消息? ColdFusion是否无法通过适当的标头与IIS通信(发送适当的404)? IIS固执吗? 为什么ColdFusion 10和ColdFusion 9会有所不同? 通过CFAdmin的ColdFusion 9 Global Settings - Missing Template Handler = [no path specified] IIS 7,IIS管理器 Configuration Editor -> system.webServer/httpErrors - allowAbsolutePathWhenDelegated = false -
  • 如何创建一个Gitlab Webhook来更新Github上的镜像仓库?(How to create a Gitlab webhook to update a mirror repo on Github?)
    问题 我想在Gitlab中创建一个Webhook,以便在每次push事件发生时自动更新Github上的镜像存储库。 我已经检查了此页面,但是我不知道它是如何完成的。 我的Gitlab版本是6.5。 这是配置页: 我应该在URL中输入什么? 我需要在哪里放置脚本来更新存储库? 回答1 您不需要为此的一个webhook。 常规的接收后挂钩会很好地工作。 要创建和使用这样的钩子,您只需登录安装了gitlab的服务器,并为git用户创建ssh密钥。 sudo -u git ssh-keygen -f /home/git/.ssh/reponame_key (在出现提示时,请不要输入任何密码) 转到您的github帐户,并将公共密钥(已创建为/home/git/ssh/reponame_key.pub )添加为您的项目,作为部署密钥。 如果您需要帮助,请查看https://help.github.com/articles/managing-deploy-keys。 一旦完成,您只需要配置git服务器和github之间的连接:向git用户的ssh配置添加别名(向/home/git/.ssh/config添加以下行-如果不存在则创建它) Host reponame IdentityFile /home/git/.ssh/reponame_key HostName github.com User
  • 在 Rails 中创建 WYSIWYG 表单构建器 (á la Wufoo)(Creating WYSIWYG form builder (á la Wufoo) in Rails)
    问题 我必须将类似 Wufoo 的 WYSIWYG 表单构建器功能添加到 Rails webapp。 有没有人知道有帮助的好资源(gems/engines/plugins/example code)? 回答1 这不是您问题的真正答案,但不幸的是,由于我的声誉级别,我仍然无法添加评论,抱歉:) 在 Drupal(php) http://drupal.org/project/webform 中有完全等同的功能,对于联系表单特别有用,即客户很高兴并且每次他们想要调整甚至添加新查询时都不会打扰我形式 :) 如果有这样的宝石/插件会很好吗? :P 谢谢。 回答2 我认为在 Rails 中创建这样的应用程序不是一个好主意。 使用 AR,这样的应用程序将动态创建迁移 - 这听起来不是一件好事。 AFAIK,wufoo 使用 php。
  • Possible race conditions when creating and updating a struct in the same request - coldfusion
    About a year ago I asked a question about errors I was getting in an app, that indicated a possible race condition: Possible race condition creating Structs in ColdFusion A year on, I'm still having issues with this and other apps where the same technique is employed and it seems that frankly, you cannot create and update a struct reliably in the same request. This of course seems ludicrous, so I must be doing something wrong - but I'd appreciate some help. Here's an explanation of what's going on: I have a function, instantiated in the Application scope, that accepts a comma separated list of
  • FB Messenger Bot: Webhook updates not being delivered
    i am working with Facebook Checkbox Plugin everything is working fine except facebook is not sending request to my webhook url when Confirming Opt-in. in facebook docs it is mentioned that After the opt-in event, we will post a webhook event to your server if the checkbox state was checked. This callback has the same format as the opt-in callback, but instead of a sender field, it has an optin object with a user_ref field. But it is not sending any data. here is my webhook code if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] ==
  • 如何创建匹配的 HMAC 值来验证 .NET 中的 Shopify WebHook?(How can I create a matching HMAC value to verify a Shopify WebHook in .NET?)
    问题 我已经设置了一个端点来接收来自 Shopify 的 webhook 请求。 来自 Shopify 的请求包括根据共享密钥创建的 HMAC 标头和请求正文。 我需要在我的服务器上计算 HMAC 并将其与请求标头中的值进行匹配,以确保请求是真实的。 我似乎无法在 .NET 中创建适当的机制来创建匹配的 HMAC 值。 此时我的算法如下: public static string CreateHash(string data) { string sharedSecretKey = "MY_KEY"; byte[] keyBytes = Encoding.UTF8.GetBytes(sharedSecretKey); byte[] dataBytes = Encoding.UTF8.GetBytes(data); //use the SHA256Managed Class to compute the hash System.Security.Cryptography.HMACSHA256 hmac = new HMACSHA256(keyBytes); byte[] hmacBytes = hmac.ComputeHash(dataBytes); //retun as base64 string. Compared with the signature passed in the
  • 【DevOps】git + gitee + flask + webhooks完成 代码管理 与 服务器自动化同步
    文章目录 理想方案git基础关于git概念三种状态流程常用命令删除文件重命名文件清空本地仓库使用 ignore 忽略不想跟踪的 文件 或 文件夹Tipsgit 学习资料 Git 的新机部署与使用新机部署(必备步骤)上传本地项目到远程仓库从gitee上把项目克隆到本地本地代码 与 远程代码的 同步; gitpython 实现程序控制 pull 与 pushFlask 实现 WebHooks 方式 自动 同步 gitee 代码到 服务器FlaskWebHooks实现运行流程 理想方案 代码在家里和公司的机器上,在所有的服务器上,均实现同步功能 git基础 关于git git是一个开源分布式的版本控制系统; 概念 工作区:存放代码的目录; 暂存区:又叫 stage 或 index,是一个名为 index 的文件,在 .git 目录下; Git 仓库目录:是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。 分支:解决开发版本和线上稳定版本的冲突问题;默认只有master分支,新加功能时,一般创建一个新的分支,修改后再合并到master分支; 三种状态 已修改(modified):工作区有文件已修改,但未添加到暂存区; 已暂存(staged):已修改的文件已经添加到暂存区,执行 commit 时可以提交到本地分支
  • Kubernetes准入控制Admission Controller介绍
    1.什么是Admission ControllerAdmission Controller(准入控制)是Kubernetes API Server用于拦截请求的一种手段。Admission可以做到对请求的资源对象进行校验,修改。service mesh最近很火的项目Istio天生支持Kubernetes,利用的就是admission对服务实例自动注入sidecar。假如对Kubernetes有一定的了解的话,应该会知道在Kubernetes中还有authn/authz,为什么还会引入admission这种机制?1)authn/authz 是Kubernetes的认证鉴权,运行在filter中,只能获取http请求header以及证书,并不能获取请求的body。所以authn/authz只能对客户端进行认证和鉴权,不可以对请求的对象进行任何操作,因为这里根本还获取不到对象。2)Admission运行在API Server的增删改查handler中,可以自然地操作API resource。下面将对Admission Controller工作流做一番详解。 API Server接收到客户端请求后首先进行认证鉴权,认证鉴权通过后才会进行后续的endpoint handler处理。1)当API Server接收到对象后首先根据http的路径可以知道对象的版本号,然后将request
  • 在 Braintree 中的 localhost 上测试 Webhook(Test Webhook at localhost in braintree)
    问题 我正在开发 Braintree,我想在处理定期计费时向我的客户发送自定义电子邮件通知,因此每个月都应将这些自定义通知发送给所有用户。 为此,我必须使用 webhooks 来检索当前发生的事件,然后根据 webhook 的响应发送电子邮件通知。 (我认为这只是在这种情况下的解决方案,如果有人知道另一种可能的解决方案,请提出建议)。 我想首先在我的本地主机上测试 webhooks,并且我尝试创建一个新的 webhook 并指定本地主机路径作为检索 webhooks 的目的地。 但这显示错误“目的地未验证”........ 我的路径是:“http://127.0.0.1:81/webhook/Accept” 回答1 这些是一些可以在 webhooks 开发过程中使用的工具: 1)邮政捕手, 2) RequestBin, 3)恩格罗克, 4) PageKite 和 5) 本地隧道 http://telerivet.com/help/api/webhook/testing https://www.twilio.com/blog/2013/10/test-your-webhooks-locally-with-ngrok.html 回答2 另一种测试它的方法是创建一个 WebAPI 并通过 Postman 将数据 POST 到您的 POST 方法。 为此,只需在 Visual Studio
  • zabbix配置钉钉告警
    首先在钉钉创建群组 选择场景 选择群组类型 创建群组 点击智能群助手 点击添加机器人 选择自定义机器人 自定义机器人名称,webhook码是告警脚本只会用到的 添加关键词,这里很关键,很关键,关键,重要的事情说三遍,这里的关键词取决于你的信息是否发送成功,后面会讲到。 点击完成即可 你会收到来自机器人的问候 添加好机器人后在编辑python脚本 首先要进入以下路径因为zabbix会执行该目录下脚本放到其他位置无效。 cd /usr/lib/zabbix/alertscripts 没有python要下载python不低于2.6版本之一直接yum安装这里用到了之前机器人的webhook代码,将代码复制到webhook=””,只修改这一个位置没有这个路径和文件需要创建/usr/local/zabbix/logs/dingding.log mkdir -p /usr/local/zabbix/logs touch /usr/local/zabbix/logs/dingding.log vi dingding.py #!/usr/bin/env python #coding:utf-8 import requests,json,sys,os,datetime webhook="这里写机器人代码" user=sys.argv[1] text=sys.argv[3] data={
  • How can I create a matching HMAC value to verify a Shopify WebHook in .NET?
    I have set up an endpoint to receive webhook requests from Shopify. The requests from Shopify include an HMAC header that is created from a shared secret key and the body of the request. I need to calculate the HMAC on my server and match it to the value in the request header to ensure that the request is authentic. I can't seem to create the appropriate mechanism in .NET to create a matching HMAC value. My algorithm at this point is as follows: public static string CreateHash(string data) { string sharedSecretKey = "MY_KEY"; byte[] keyBytes = Encoding.UTF8.GetBytes(sharedSecretKey); byte[]
  • ColdFusion 10 + IIS: Non-existant URLs that are CFM files. Retrieving original URL after executing 404 page
    We have a server setup as follows: Windows 2012 R2 Coldfusion 10, Enterprise IIS, configure with custom 404 page (execute on server) The custom 404 page (a CFM file) handles missing URLs and checks them against custom URLs in the database. If it finds a match, it will display the relevant data. The problem occurs when the custom URL maps to a non-existant CFM file; for example. /home/map.cfm (not a real file or directory) Now, when a user requests this URL, the server sees that it is a CFM file and correctly passes it to ColdFusion (via the ISAPI redirect). Tomcat sees that this file does not
  • 我正在尝试将 Bitbucket 集成到 AWS Code Pipeline 中? 最好的方法是什么?(I'm trying to integrate Bitbucket into AWS Code Pipeline? What is the best approach?)
    问题 我想将 Bitbucket 中的代码集成到 AWS Code Pipeline 中。 我无法找到正确的例子。 我的源代码在 .Net 中。 有人可以指导我。 谢谢。 回答1 您可以使用调用 AWS API 网关的 Webhook 将 Bitbucket 与 AWS CodePipeline 集成,该网关调用 Lambda 函数(调用 CodePipeline)。 有一个 AWS 博客可以引导您完成此操作:将 Git 与 AWS CodePipeline 集成 回答2 BitBucket 有一项名为PipeLines的服务,可以将代码部署到 AWS 服务。 使用管道将更新从主分支打包并推送到连接到CodePipeline的 S3 存储桶 笔记: 您必须在存储库中启用PipeLines PipeLines 需要一个名为bitbucket-pipelines.yml的文件,该文件必须放置在您的项目中确保在 BitBucket Pipelines UI 中设置您的账户 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。 这带有一个加密选项,因此一切都是安全的 这是一个示例bitbucket-pipelines.yml ,它将名为 DynamoDb 的目录的内容复制到 S3 存储桶 pipelines: branches: master: - step
  • How can I create a python webhook sender app?
    This is a follow up question to this post. I have a data warehouse table exposed via xxx.com\data API endpoint I have been querying this table using the following code and parsing it into a dataframe as follows; import requests import json import http.client import pandas as pd url = "xxx.com\data?q=Active%20%3D1%20and%20LATITUDE%20%3D%20%20%220.000000%22%20and%20LONGITUDE%20%3D%20%220.000000%22&pageSize =300" payload = {} headers = {'Authorization': access_token} response = requests.request("GET", url, headers=headers, data = payload) j=json.loads(response.text.encode('utf8')) df = pd.json