PHP向REST API POST数据时混合数组与对象构造校验失败问题
问题根源
Postman示例JSON中addresses下的billing字段是包含单个地址对象的索引数组(被[]包裹),但你现有PHP代码中billing直接绑定了单个关联数组,序列化为JSON后会生成对象而非数组,不符合API的结构要求,因此触发地址校验失败。
修正后的PHP代码
$billingAddr = array( "supplement" => $billingAddress["streetDetails"] ?? null, // 空值兜底,匹配示例中null的取值要求 "street" => $billingAddress["street"], "zip" => $billingAddress["zipCode"], "city" => $billingAddress["city"], "countryCode" => $billingAddress["country"], ); $params = [ "version" => 0, "roles" => $roles, "person" => $person, "emailAddresses" => $emailAddresses, "addresses" => [ // 把地址对象放在索引数组里,匹配API要求的结构 "billing" => [$billingAddr] ] ];
额外校验建议
- 调用
json_encode序列化参数时,不要添加JSON_FORCE_OBJECT参数,否则会把PHP的索引数组强制转为JSON对象,破坏billing的数组结构 - 可以把序列化后的JSON字符串和Postman中正常请求的JSON做逐行对比,快速定位其他可能的结构差异
内容的提问来源于stack exchange,提问作者Helio Felix
相关产品推荐
相关产品推荐

