如何将创建患者的cURL API请求转PHP?qas JSON无效报错如何解决?
问题原因及修复方案
问题原因
- qas参数的JSON结构不匹配
原cURL请求中qas对应的JSON为包含q、a两个一级键的对象,每个键下是以问题ID为键的键值对结构:
{ "q": { "1": "Can you speak?", "2": "Can you hear?" }, "a": { "1": "Yes", "2": "Yes " } }
你定义的$myArray是二维索引数组,json_encode后输出的是[["Can you speak?","Can you hear?"],["Yes","Yes"]],和接口要求的结构完全不一致,因此触发JSON格式校验错误。
- 提交格式不匹配(次要影响项)
原cURL使用--form参数提交,对应multipart/form-data格式的POST请求;你使用http_build_query处理参数后提交的是application/x-www-form-urlencoded格式,和原请求逻辑不一致,部分接口会因此出现参数解析异常。
修复方案
调整qas的数组结构,同时对齐原请求的提交方式即可,修复后的完整代码如下:
<?php $ch = curl_init(); // 调整为接口要求的qas结构 $qasArr = [ 'q' => [ '1' => 'Can you speak?', '2' => 'Can you hear?' ], 'a' => [ '1' => 'Yes', '2' => 'Yes ' ] ]; $jsonQas = json_encode($qasArr); $url = "https://www.b2bmd.app/api.php?fn=patient-info"; $dataarr = [ "firstname" => "John", "lastname" => "Mike", "email" => "John20124@yahoo.com", "phone" => "(781) 921-4790", "address1" => "7231 street 4", "qas" => $jsonQas ]; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); // 直接传数组,CURL会自动设置为multipart/form-data格式,和原cURL逻辑一致 curl_setopt($ch, CURLOPT_POSTFIELDS, $dataarr); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $resp = curl_exec($ch); if($e = curl_error($ch)) { echo $e; } else { $decode = json_decode($resp, true); print_r($decode); } curl_close($ch); ?>
如果接口明确要求用urlencoded格式提交,保留http_build_query也可以,只要qas结构正确就不会报JSON错误。
内容的提问来源于stack exchange,提问作者John Dang
相关产品推荐
相关产品推荐

