Php 从服务器端将参数发布到API URL后未发生API回调

Php 从服务器端将参数发布到API URL后未发生API回调,php,api,curl,httprequest,httpresponse,Php,Api,Curl,Httprequest,Httpresponse,API集成说明 API需要将一个表单发布到API URL,其中包含一些输入字段和一个客户令牌。API处理并将响应发布到我的服务器上的callback.php文件。我可以使用该文件中的$\u POST访问已发布的VAL。这就是现有方法的全部内容,而且效果很好 要求 隐藏客户令牌值,使其不被客户端看到。所以我从发送服务器端post请求开始 问题 我尝试了很多选择,但回调没有发生- 1) 旋度法 $ch = curl_init(API_URL); $encoded = ''; $_postArray[

API集成说明
API需要将一个表单发布到API URL,其中包含一些输入字段和一个客户令牌。API处理并将响应发布到我的服务器上的callback.php文件。我可以使用该文件中的$\u POST访问已发布的VAL。这就是现有方法的全部内容,而且效果很好

要求
隐藏客户令牌值,使其不被客户端看到。所以我从发送服务器端post请求开始

问题
我尝试了很多选择,但回调没有发生-

1) 旋度法

$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\u setopt($ch,CURLOPT\u RETURNTRANSFER,true),则$resp回显1已删除,但不会发生回调。我在回调脚本中设置了一个会话变量进行验证。为了使用curl方法,API是否需要同步,以便curl\u exec返回响应

2) 没有如中所给出的卷曲

但回调没有发生

我也尝试了以下代码,但我的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)
}

请帮帮我!我只需要简单地发送服务器端post请求并在回调文件中获取响应。

尝试使用curl\u get\u info()函数调试您的请求:

$header = curl_getinfo($ch);
print_r($header);
您的请求可能没有问题,但它会导致错误404

编辑:如果要执行post请求,请将其添加到代码中:

curl_setopt($ch, CURLOPT_POST, true);
编辑:我在代码中提到的其他内容:您在“CURLOPT_RETURNTRANSFER”中使用了“1”,但它应该是“true”:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
至少我通常是这样做的,你永远不知道函数是否也会将“1”理解为“true”

编辑:真正的问题是:我复制粘贴了你的源代码,并在我的一个页面上使用了它,出现以下错误:

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) 
$\u postArray是一个数组,其中一个值包含其他值,您需要另一个foreach,或者使用以下方法:

foreach($_postArray['customer_token'] as $name => $value) 
如中所述,回调与您的请求是完全不同的。回调也不会有会话变量,因为远程API充当回调脚本的客户端,并且有自己的会话


您应该在这里展示一些API文档。也许我们彼此误解了,但据我所知,您试图做的事情(在初始CURL请求中获取回调值)是徒劳的,两次询问也不会变得更徒劳。

我想问题出在其他地方。回调完全是API的责任,只要方法1(cURL)返回
1
(我猜这是预期的输出),问题就不在这里。
cURL\u getinfo($ch)
的输出提供-Array([url]=>http://[content\u type]=>text/html[http\u code]=>200[header\u size]=>163[request\u size]=>743[filetime]=>1[ssl\U验证\U结果]=>0[redirect\U count]=>0[total\U time]=>0.183987[namelookup\U time]=>0.175189[connect\U time]=>0.175267[pretransfer\U time]=>0.175276[size\U upload]=>586[size\U download]=>0[speed\U download]=>0[speed\U upload]=>3185[download\U content\U length]=>1[upload\U内容\U长度]=>1[starttransfer\U时间]=>0.932[redirect_time]=>0)`So
http_code
是200(看起来没有错误)。您的请求只是空的。但我刚才看到,您正在尝试发出post请求。您还必须告诉CURL这一点。请参阅我的编辑。我没有编写
CURL_setopt($ch,CURLOPT_post,true)
在我的问题中错了。现在添加了。谢谢,但是我显示的数组输出是针对
curl\u setopt($ch,CURLOPT\u POST,true)的情况的
存在于代码中。好的,我在代码和我的问题中替换了0和1,但没有成功。CURLOPT_RETURNTRANSFER
应该是真的还是假的?如果我保持为真的话,
echo$resp;
不会给出1。我认为这只是为了得到响应。它一定是真的。但我认为我发现了你请求的真正问题,请参阅我的last编辑。在同意您的解释后,我在上一个问题中尝试在初始CURL请求中获取回调值。现在我只是尝试在回调文件中设置会话值,但没有发生。@Sandepan是的,在回调文件中,API充当“浏览器”因此,它将有一个不同于当前会话的会话。通常,API应该在回调中返回一个唯一的键,这样您就可以知道它属于哪个请求(如果该键是会话ID,甚至可以继续会话)。你的API中真的没有这样的效果吗?那会很奇怪。这个API有很多奇怪的地方,我为此付出了很多努力。这是一个仍在修复的bug,当我们发现bug时,他们会进行更改。