我需要使用嵌套数组

时间:2018-03-31 20:03:15

标签: php url filemaker

我正在尝试构建一些示例PHP代码所产生的URL。代码是:

<?php

$ch = curl_init();
// CONNECT TO API, VERIFY MY API KEY AND PASSWORD AND GET THE LEAD DATA
curl_setopt($ch, CURLOPT_URL,"https://app.kartradev.com/api");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'app_id' => 'AIm863DwsOW',
            'api_key' => 'QG9GPLW8G',
            'api_password' => 'kdwFAfwrfVS',
            'get_lead' => array(
                'email' => 'JoeSmith@domain.com',
            ),
        )
    )
);

我正在使用FileMaker制作和发送网址。如果我使用错误的密码发送此字符串:

https://app.kartra.com/api?app_id=BnFTjKPVdrGO&api_password=eMEaKWSfUQXu&api_key=YnvDR

我收到此回复表明我成功查询了API:

  

{     “message”:“API凭据无效。请先获取API密钥和API密码”,     “状态”:“错误”,     “type”:“203”   }

由php代码构建的数组正在绊倒我。我尝试了很多变化,例如:

https://app.kartra.com/api?app_id=BnFTjKPVO&api_password=eMEaK&api_key=YnvGdT&getlead[email]=rk@somewhere.com

我总是得到这个结果:

  

{     “状态”:“错误”,     “消息”:“'动作'不是数组”,     “type”:“224”   }

我已经向api技术支持人员请求了帮助,但这是一个全新的API,他们还没有回复(他们正在周一推出他们的网站并且非常忙碌)。

我的问题:鉴于上面的代码,结果网址会是什么样的?

编辑:

以下是我在4月1日18日提出的Matt建议的完整json回应:

谢谢,@ MattGibson!我尝试了你的建议,得到了和以前一样的错误。我也试过tex / plain和application / json。以下是我总是得到的完整JSON响应:{    “body”:“{\”status \“:\”Error \“,\”message \“:\”'actions'不是数组\“,\”type \“:\”224 \“}”,    “代码”:200,    “标题”:{       “CF-RAY”:4.054e + 96,       “缓存控制”:“无存储,无缓存,必须重新验证”,       “连接”:“保持活力”,       “Content-Encoding”:“gzip”,       “Content-Type”:“text / html; charset = UTF-8”,       “日期”:“星期一,2018年4月2日17:10:49 GMT”,       “Expect-CT”:“max-age = 604800,report-uri = \”https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct \“”,       “Expires”:“Thu,1981年11月19日08:52:00 GMT”,       “Pragma”:“no-cache”,       “服务器”:“cloudflare”,       “Set-Cookie”:“ci_session = d47fe563bbbe215ab4f936ce1a951e0d28d39d57; expires = Mon,02-Apr-2018 20:10:49 GMT; Max-Age = 10800; path = /; secure; HttpOnly”,       “Strict-Transport-Security”:“max-age = 31536000; includeSubDomains”,       “转移编码”:“分块”,       “变化”:“接受编码”    },    “status”:“HTTP / 1.1 200 OK” }

2 个答案:

答案 0 :(得分:0)

您应该将GET参数添加到查询URL,而不是POST字段。

curl_setopt($ch, CURLOPT_URL,"https://app.kartradev.com/api?".http_build_query($params));

答案 1 :(得分:0)

http_build_query的PHP结果将是:

APP_ID = AIm863DwsOW&安培; API_KEY = QG9GPLW8G&安培; api_password = kdwFAfwrfVS&安培; get_lead%5Bemail%5D =为JoeSmith%40domain.com

...所以整个网址只是

https://app_id=AIm863DwsOW&api_key=QG9GPLW8G&api_password=kdwFAfwrfVS&get_lead%5Bemail%5D=JoeSmith%40domain.com

但是,鉴于它是作为POST请求(CURLOPT_POST = 1)发送的,这并不是真正发送到服务器的内容。实际上,您实际上已经点击了基本网址https://app.kartradev.com/api,您的参数以application/x-www-form-urlencoded格式在POST请求正文中发送。

所以要在Filemaker中复制你的示例代码,你需要做任何Filemaker需要发送请求作为POST,并在正文中使用适当格式的参数。

总的来说,给定PHP代码,结果将是HTTP POST请求,如下所示:

POST /api HTTP/1.1
Host: app.kartradev.com
Content-Type: application/x-www-form-urlencoded

app_id=AIm863DwsOW&api_key=QG9GPLW8G&api_password=kdwFAfwrfVS&get_lead%5Bemail%5D=JoeSmith%40domain.com