从服务器端向API URL发布参数后,API没有发生回调

时间:2010-08-31 12:47:11

标签: php api curl httprequest httpresponse

API集成说明
API需要使用一些输入字段和客户令牌将表单发布到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;
如果删除了行curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);但回调未发生,则

$ resp回显1。我在回调脚本中设置一个会话变量来验证。它是否需要API同步才能使用curl方法,以便curl_exec返回响应?

2)没有Posting parameters to a url using the POST method without using a form

中给出的CURL

但回调没有发生。

我也尝试使用以下代码,但看起来我的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)
}

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

2 个答案:

答案 0 :(得分:0)

尝试使用curl_get_info()函数调试您的请求:

$header = curl_getinfo($ch);
print_r($header);

您的请求可能没问题,但我的结果是错误404.

编辑:如果您要执行发布请求,请将其添加到您的代码中:

curl_setopt($ch, CURLOPT_POST, true);

编辑:我在您的代码中提到的其他内容:您在'CURLOPT_RETURNTRANSFER'处使用了'1',但应该是'true':

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) 

答案 1 :(得分:0)

正如previous question中所讨论的,回调与您的请求完全不同。回调也没有会话变量,因为远程API充当回调脚本的客户端,有自己的会话

你应该在这里展示一些API文档。也许我们彼此误解,但据我所知,你想要做什么(在初始CURL请求中得到回调值)是徒劳的,并且通过问两次也不会变得徒劳无功。