PHP调用JSON API:curl请求头处理及订单总额统计问题
解决PHP对接JSON API的cURL请求头与结果处理问题
嘿,我来帮你搞定这个对接API的问题!你的思路是对的,不过有几个小细节需要调整,咱们一步步来:
一、先说说你原代码里的小问题
- 日期参数
2018-01-01没加引号,PHP会把它当成数值计算(2018减1减1=2016),这肯定不对,得改成字符串类型 - 没有设置API要求的请求头(对应curl命令里的
-H参数),API可能会直接拒绝你的请求 - 直接传数组给
CURLOPT_POSTFIELDS的话,cURL会把数据编码成application/x-www-form-urlencoded格式,但API要求的是application/json,所以得把数组转成JSON字符串
二、修正后的完整代码
// 1. 正确设置POST参数(日期要加引号!) $post = [ 'CustomerID' => '12345', // 建议用字符串,避免长ID出现类型问题 'StartDate' => '2018-01-01', 'EndDate' => '2018-12-31', ]; // 2. 初始化cURL会话 $ch = curl_init('https://urlofapp.com/API/GetTransaction'); // 3. 设置请求头(对应curl命令里的-H参数) $headers = [ 'APIKey:My:ApI;key;', 'Content-Type: application/json', // 这里填完整的MIME类型,比如application/json ]; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 4. 其他必要的cURL选项 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 让cURL返回内容而不是直接输出 curl_setopt($ch, CURLOPT_POST, true); // 明确设置为POST请求 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post)); // 把数组转成JSON字符串 // 5. 执行请求并获取响应 $response = curl_exec($ch); // 6. 检查是否有cURL错误 if(curl_errno($ch)){ echo 'cURL错误:' . curl_error($ch); } // 7. 关闭cURL会话 curl_close($ch); // 8. 把JSON响应转成PHP数组 $transactionData = json_decode($response, true); // 查看转换后的数组结构 var_dump($transactionData);
三、统计年度订单总额的方法
假设返回的JSON数组里,每个订单的金额字段是Amount(你需要根据实际API返回的字段名调整),可以这样统计:
if(is_array($transactionData) && !empty($transactionData)){ $totalAmount = 0; foreach($transactionData as $order){ // 确保金额字段存在且是数值 if(isset($order['Amount']) && is_numeric($order['Amount'])){ $totalAmount += $order['Amount']; } } echo '年度订单总额:' . $totalAmount; } else { echo '没有获取到有效的订单数据'; }
关键知识点解释
- 请求头设置:用
CURLOPT_HTTPHEADER选项,传入一个字符串数组,每个元素就是一个请求头(格式和curl的-H参数完全一致) - JSON格式POST:必须用
json_encode()把数组转成JSON字符串,同时设置Content-Type: application/json请求头,这样API才能正确解析你的请求 - JSON转数组:
json_decode($response, true)会把JSON字符串转换成关联数组,方便后续的数据处理
内容的提问来源于stack exchange,提问作者user3512531
相关产品推荐
相关产品推荐

