一杯茶一盒烟一个BUG调一天
今天调用了一个行业内的接口通过POST提报数据,无奈非研发人员,只好使用”世界上最好的编程语言”PHP去实现了
接口文档要求请求头为“Content-type:application/json;charset=utf-8”,于是乎使用了PHP的file_get_contents函数去实现
功能实现如下:
function Send_Post_PHP($url, $post_data) {
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type:application/json;charset=utf-8',
'content' => http_build_query($post_data),
'timeout' => 15 * 60
),
'ssl' => array(
//验证ssl证书
'verify_peer'=>false,
'verify_peer_name'=>false,
)
);
$result = file_get_contents($url, false, stream_context_create($options));
return $result;
}
根据开发文档对接接口提报后,报错信息为“Required request body is missing”,故以报错信息为关键词查询发现CSDN中有篇文章《Required request body is missing 错误的解决》中提到:
“我的请求体是使用 @RequestParam 拼接出来的,而 @RequestParam 一般是用于处理Content-Type = application/x-www-form-urlencoded的请求。真正需要的是Content-Type = application/json 格式,所以换用 @RequestBody 问题就解决了”
看到这句话恍然大悟,虽然php会自动对json进行编码,而其他语言实现的接口,不一定支持自动编码,于是我想,如果PHP直接对json进行编码后再进行发送,岂不是无需接口进行编码了?
于是对数组进行了一些改动,将
'content' => http_build_query($post_data),
改为
'content' => json_encode($post_data),
终于见到了久违的{“msg”:”success”,”code”:0}
发表回复