回调从服务器端

问题描述:

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

请帮我一把!我只需要轻松发送服务器端发布请求并在回调文件中获取响应。

+1

我猜这个问题在别处。回调完全是API的职责,只要方法1(cURL)返回'1'(我猜是输出结果),问题就不在这里。 – shamittomar 2010-08-31 12:54:22

尝试使用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) 
+0

'curl_getinfo($ ch)'的输出给出 - Array [url] => http:// [content_type] => text/html [http_code] => 200 [header_size] => 163 [request_size] = > 743 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.183987 [namelookup_time] => 0.175189 [connect_time] => 0.175267 [pretransfer_time] => 0.175276 [size_upload] => [size = red] 0> [0] [0] [0] [0] [0] [0] [0] [0] http_code'是200(看起来没有错误)。 – 2010-08-31 14:18:21

+0

比你的请求只是空的。但是我刚刚看到,您正在尝试发布帖子请求。比你还必须告诉CURL这件事。看我的编辑。 – 2ndkauboy 2010-08-31 14:21:35

+0

我没有写错'curl_setopt($ ch,CURLOPT_POST,true);'在我的问题中。现在添加。谢谢,但我展示的数组输出是针对'curl_setopt($ ch,CURLOPT_POST,true);'存在于代码中的情况。 – 2010-08-31 14:28:00

正如在previous question中讨论的那样,回调与您的请求完全是分开的。回调也不会有您的会话变量,因为远程API充当回调脚本的客户端,并且拥有自己的会话

你应该真的在这里展示一些API文档。也许我们彼此之间有误解,但据我所知,你试图做的事情(在最初的CURL请求中获得回调值)是徒劳的,并且通过询问两次并不会变得更加无用。

+0

在同意你的解释之后,我已经试图在我之前的问题中获得初始CURL请求中的回调值。现在我只是试图在回调文件中设置一个会话值,但这并没有发生。 – 2010-08-31 14:21:27

+0

@sandeepan是的,在回调文件中,API充当“浏览器”,因此它将具有与当前不同的会话。通常,API应该在回调中返回一个唯一的密钥,以便您可以知道它属于哪个请求(如果密钥是会话ID,甚至可以继续会话)。你的API真的没有这个效果吗?这很奇怪。 – 2010-08-31 14:25:25

+0

关于这个API有很多奇怪的事情,因此我挣扎了很多。它仍然在修正错误,并且当我们发现错误时它们会发生变化。 – 2010-08-31 14:30:53