请求后php-curl
我写了这段代码:请求后php-curl,php,httprequest,php-curl,Php,Httprequest,Php Curl,我写了这段代码: $data = array( 'user' => '*****', 'password' => '****', 'terminal' => '******', 'GoodURL' => '********', 'Total' => *******, ); $jsonData = json_encode($data); $ch = curl_init(); curl
$data = array(
'user' => '*****',
'password' => '****',
'terminal' => '******',
'GoodURL' => '********',
'Total' => *******,
);
$jsonData = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gateway20.pelecard.biz/PaymentGW/init");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;','Content-Length: ' . strlen($jsonData)));
if ($call == 'pay') {
$result = curl_exec($ch);
$serverData = json_decode($result, true);
echo $serverData['URL'];
}
数据
数组中的参数很好,但我总是得到result=false
。
有人能告诉我我做错了什么吗?谢谢您应该实现错误处理,而cURL本身可以告诉您这个问题。 使用,您可以执行以下操作:
print __LINE__;
if ($call == 'pay') {
$err = curl_error($ch);
print __LINE__;
if (!empty($err)) {
throw new Exception($err);
}
$result = curl_exec($ch);
print serialize($result);
$serverData = json_decode($result, true);
print_r($serverDATA);
echo $serverData['URL'];
}
然后你就能看到失败的原因。根据代码的其他部分,您可能希望将其打印出来,放入日志数据库,等等,抛出异常并不总是正确的处理方法。您应该实现错误处理,而cURL本身可以告诉您这个问题。 使用,您可以执行以下操作:
print __LINE__;
if ($call == 'pay') {
$err = curl_error($ch);
print __LINE__;
if (!empty($err)) {
throw new Exception($err);
}
$result = curl_exec($ch);
print serialize($result);
$serverData = json_decode($result, true);
print_r($serverDATA);
echo $serverData['URL'];
}
然后你就能看到失败的原因。根据代码的其他部分,您可能希望将其打印出来,放入日志数据库,等等,抛出异常并不总是正确的处理方式。我尝试使用您的代码,但没有收到任何错误。这是发送请求的正确方式吗?通常是的,这似乎是合法的请求。我更新了调试版本,你能再试一次吗?我发现serialize()仍然无法处理资源类型。这很有趣,
curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,true)代码>应防止curl_exec()返回资源。因此,让我们试着用:print\r(curl\u getinfo($ch))代码>当我打印我得到的curl\u getinfo($ch)时,在代码段的底部:数组([url]=>[content\u type]=>[http\u code]=>0[header\u size]=>0[request\u size]=>0[filetime]=>1[ssl\u verify\u result]=>0[redirect\u count]=>0[total\u time]=>0.047[namelookup\u time]=>0[connect\u time]=>0[pretransfer\u time]=>0[size\u upload]=>0[size\u download]=>0[speed\u download]=>0[speed\u upload]=>0[download\u content\u length]=>-1[upload\u content\u length]=>-1[startttransfer\u time]=>0[redirect\u time]=>0[certinfo]=>Array()[redirect\u url]=>我尝试使用您的代码,但没有收到任何错误。这是发送请求的正确方式吗?通常是的,它似乎是合法的请求。我更新了调试版本,您可以再试一次吗?我发现,serialize()不处理资源类型。这很有趣,curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,true)
应该防止curl\u exec()返回资源。因此,让我们尝试使用以下内容检查您的请求:print\r(curl\u getinfo($ch));
当我打印curl\u getinfo($ch)时,在代码段的底部打印curl\u getinfo($ch)我得到:数组([url]=>[content\u type]=>[http\u code]=>0[header\u size]=>0[request\u size]=>0[filetime]=>-1[ssl\u verify\u result]=>0[redirect\u count]=>0[total\u time]=>0.047[namelookup\u time]=>0[connect\u time]=>0[size\u upload]=>0[size\u download]=>0[speed\u download]=>0[speed\u upload]=>0[download\u content\u length]=>-1[upload\u content\u length]=>1[starttransfer\u time]=>0[redirect\u time]=>0[redirect\u time]=>0[redirect\u time]=>0[redirect\uURL]=>