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)
}
请帮帮我!我只需要轻松发送服务器端发布请求并在回调文件中获取响应。
答案 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请求中得到回调值)是徒劳的,并且通过问两次也不会变得徒劳无功。