
本文详解 php 中 curl 请求的 `curlopt_postfields` 参数正确用法,重点纠正 json 数据传递时常见的语法错误(如误用花括号字面量),并提供安全、标准的数组→json编码实践。
在 PHP 中使用 cURL 发送 HTTP 请求时,curl_setopt($ch, CURLOPT_POSTFIELDS, ...) 是设置 POST 请求体的关键选项。初学者常误将 JavaScript 风格的对象字面量(如 { "key": "value" })直接写入 PHP 代码中,导致解析失败——正如问题中所示:unexpected '{' 错误,是因为 PHP 不支持 JSON 字面量语法,{} 在此处被解析为代码块而非数据结构。
✅ 正确做法是:先构造关联数组,再用 json_encode() 序列化为 JSON 字符串,并确保设置请求头以告知服务器内容类型:
// 1. 构建 PHP 关联数组(非 JSON 字面量!)
$data = [
"ShortCode" => "600981", // 注意:字符串值建议加引号,避免常量解析风险
"ResponseType" => "Completed",
"ConfirmationURL" => "https://mydomainx.com/confirmation",
"ValidationURL" => "https://mydomainx.com/validation"
];
// 2. 编码为 JSON 字符串
$json_payload = json_encode($data);
// 3. 设置 POST 数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_payload);
// ⚠️ 关键补充:必须设置 Content-Type 头,否则接收端可能无法正确解析
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($json_payload) // 可选,cURL 通常自动处理
]);? 注意事项:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
- 切勿直接写 {...}:PHP 中 {} 不是数据类型,而是代码块或数组短语法(PHP 5.4+ 的 []),JSON 必须通过 json_encode() 生成;
- 类型一致性:"ShortCode" 值应为字符串 "600981" 而非整数 600981,避免 API 因类型不匹配拒绝请求;
-
错误检查不可少:调用 json_encode() 后建议检查是否成功:
if ($json_payload === false) { throw new RuntimeException('JSON encode failed: ' . json_last_error_msg()); } - 若目标 API 接收的是 application/x-www-form-urlencoded(表单格式),则应传入 URL 编码字符串或关联数组(cURL 会自动编码),而非 JSON。
掌握这一模式,不仅能修复语法错误,更能确保数据格式、编码和传输头的一致性,大幅提升 API 集成的健壮性。
立即学习“PHP免费学习笔记(深入)”;










