2

我正在看这个 activecampaign 事件跟踪的例子

curl_setopt($curl, CURLOPT_URL, "https://trackcmp.net/event");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
"actid" => "649587205",
"key" => "4a2f544b998d0107cd0341e799513c7eb94abde4",
"event" => "YOUR_EVENT",
"eventdata" => "ANY_DATA",
"visit" => json_encode(array(
        // If you have an email address, assign it here.
        "email" => "",
    )),
));

我知道我可以使用以下 CFHTTP 调用

<cfhttp url="https://trackcmp.net/event" method="POST">
<cfhttpparam type="FORMFIELD" name="actid" value="649587205">
<cfhttpparam type="FORMFIELD" name="key" value="4a2f544b998d0107cd0341e799513c7eb94abde4">
<cfhttpparam type="FORMFIELD" name="event" value="Watched">
<cfhttpparam type="FORMFIELD" name="eventdata" value="Video 101 - how to...">
<cfhttpparam type="FORMFIELD" name="visit" value="">

但是我该如何处理“访问”电话

"visit" => json_encode(array(
    // If you have an email address, assign it here.
    "email" => "",
)),

我对如何将其转换为 CF 标签逻辑感到困惑。谢谢。马特

4

2 回答 2

2

最好从PHP 手册开始,弄清楚这两个函数在做什么。

大批()

array()函数和数组类型的文档解释说,在这种情况下,它创建了一个关联数组,或者换句话说,一个 CF 结构。

PHP 中的数组实际上是一个有序映射。映射是将相关联的类型。

json_encode()

正如名称所暗示的,json_encode()将关联数组对象编码为 JSON 格式的字符串。

CF 代码

CF 等价物是创建一个结构。然后使用serializeJSON()将其转换为字符串。使用结构字面量语法,极其相似

 #serializeJSON( {"email":"abc@example.com"} )#

只需记住将键名用引号括起来,以防止 CF 在序列化时将键名转换为大写。此外,PHP 和 CF 之间的一大区别是 PHP 结构是默认排序的。CF 结构不是。在这个简单的示例中,顺序无关紧要,但在序列化时会有所不同。如果您确实需要有序结构,请参阅此线程:

“如何修复`删除 SerializeJSON() 的默认字母顺序`

于 2019-04-22T21:32:15.137 回答
1

PHP 在其表单字段中支持数组,而 ColdFusion 不支持。使用 ColdFusion,PHP“数组”基本上是看起来和行为都像数组的字符串,因此您可以“伪造”数组。您的visit表单字段将如下所示:

<cfhttpparam type="FORMFIELD" name="visit[email]" value="">
<cfhttpparam type="FORMFIELD" name="visit[whatever]" value="">
于 2019-04-22T21:22:39.940 回答