我正在尝试构建一些示例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代码构建的数组正在绊倒我。我尝试了很多变化,例如:
我总是得到这个结果:
{ “状态”:“错误”, “消息”:“'动作'不是数组”, “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” }
答案 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
...所以整个网址只是
但是,鉴于它是作为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