回调从服务器端
API集成说明
的API需要被张贴到一些输入字段和客户令牌API URL形式发布参数API URL后没有发生。 API处理,然后在我的服务器上发布对callback.php文件的响应。我可以在该文件中使用$ _POST访问发布的val。这就是现有的方法,它工作正常。回调从服务器端
要求
隐藏客户端的客户令牌值。所以我开始发送服务器端发布请求。
问题
我试着用很多的选择,但回调并未出现 -
1)CURL方法
$ch = curl_init(API_URL);
$encoded = '';
$_postArray['customer_token'] = API_CUSTOMER_TOKEN;
foreach($_postArray as $name => $value)
{
$encoded .= urlencode($name).'='.urlencode($value).'&';
}
// chop off last ampersand
$encoded = substr($encoded, 0, strlen($encoded)-1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded);
$resp = curl_exec($ch);
curl_close($ch);
echo $resp;
$ RESP呼应1,如果该行curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
被删除,但回调不不会发生。我在回调脚本中设置了一个会话变量进行验证。它是否需要该API同步才能使用curl方法,以便curl_exec返回响应?
2)无卷曲在Posting parameters to a url using the POST method without using a form
给出,但回调没有发生。
我也尝试了以下代码,但看起来像我的pecl未正确安装,因为HttpRequest()未定义。
$req = new HttpRequest($apiUrl, HttpRequest::METH_POST);
$req->addQueryData($params);
try
{
$r->send();
if ($r->getResponseCode() == 200)
{
echo "success";
// success!
}
else
{
echo "failure";
// got to the API, the API returned perhaps a RESTful response code like 404
}
}
catch (HttpException $ex)
{
// couldn't get to the API (probably)
}
请帮我一把!我只需要轻松发送服务器端发布请求并在回调文件中获取响应。
尝试使用curl_get_info()函数来调试您的要求:
$header = curl_getinfo($ch);
print_r($header);
你的要求可能是好的,但我将导致错误404。
编辑:如果要执行POST请求,将它添加到您的代码:
curl_setopt($ch, CURLOPT_POST, true);
编辑:别的东西,我在你的代码中提到:您在使用一个“1” “CURLOPT_RETURNTRANSFER”,但应该是“真”:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
至少这是如何我通常做它,你永远不知道,如果该功能也就会明白“1”为“真”;
编辑:真正的问题:我复制粘贴源,并用它在我的网页收到此错误之一:
Warning: urlencode() expects parameter 1 to be string, array given in C:\xampp\htdocs\phptests\test.php on line 8
的错误是在这一行:
foreach($_postArray as $name => $value)
$ _postArray是一个数组,其中一个值保存其他值,您需要另一个foreach或者您可以简单地使用它:
foreach($_postArray['customer_token'] as $name => $value)
'curl_getinfo($ ch)'的输出给出 - Array [url] => http://
比你的请求只是空的。但是我刚刚看到,您正在尝试发布帖子请求。比你还必须告诉CURL这件事。看我的编辑。 – 2ndkauboy 2010-08-31 14:21:35
我没有写错'curl_setopt($ ch,CURLOPT_POST,true);'在我的问题中。现在添加。谢谢,但我展示的数组输出是针对'curl_setopt($ ch,CURLOPT_POST,true);'存在于代码中的情况。 – 2010-08-31 14:28:00
正如在previous question中讨论的那样,回调与您的请求完全是分开的。回调也不会有您的会话变量,因为远程API充当回调脚本的客户端,并且拥有自己的会话。
你应该真的在这里展示一些API文档。也许我们彼此之间有误解,但据我所知,你试图做的事情(在最初的CURL请求中获得回调值)是徒劳的,并且通过询问两次并不会变得更加无用。
在同意你的解释之后,我已经试图在我之前的问题中获得初始CURL请求中的回调值。现在我只是试图在回调文件中设置一个会话值,但这并没有发生。 – 2010-08-31 14:21:27
@sandeepan是的,在回调文件中,API充当“浏览器”,因此它将具有与当前不同的会话。通常,API应该在回调中返回一个唯一的密钥,以便您可以知道它属于哪个请求(如果密钥是会话ID,甚至可以继续会话)。你的API真的没有这个效果吗?这很奇怪。 – 2010-08-31 14:25:25
关于这个API有很多奇怪的事情,因此我挣扎了很多。它仍然在修正错误,并且当我们发现错误时它们会发生变化。 – 2010-08-31 14:30:53
我猜这个问题在别处。回调完全是API的职责,只要方法1(cURL)返回'1'(我猜是输出结果),问题就不在这里。 – shamittomar 2010-08-31 12:54:22