这篇整理一个 PHP 调用 JSON API 的通用模板,适合对接短信、支付、AI、站长工具、第三方接口。复制后改 URL 和参数就能运行。
完整代码
<?php
function post_json($url, array $data, array $headers = []) {
$payload = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => array_merge([
'Content-Type: application/json; charset=utf-8',
'Accept: application/json',
'Content-Length: ' . strlen($payload),
], $headers),
]);
$body = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($errno) {
return ['ok' => false, 'status' => 0, 'error' => $error, 'data' => null];
}
$json = json_decode($body, true);
return [
'ok' => $status >= 200 && $status < 300,
'status' => $status,
'error' => $status >= 200 && $status < 300 ? '' : $body,
'data' => $json === null ? $body : $json,
];
}
$result = post_json('https://example.com/api/demo', [
'name' => '侠客岛',
'type' => 'demo',
]);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);常见错误
1. Header 少了 Content-Type,服务端拿不到 JSON。2. 没设置超时,接口卡住会拖慢页面。3. 只判断 curl 是否成功,没有判断 HTTP 状态码。
关键词:PHP curl POST JSON、PHP 请求 API、PHP 接口错误处理。