有关PHP使用jeson_decode()转数组失败,json_last_error() 报4

本文记录了在PHP中使用json_decode()转换接口返回的JSON数据到数组时遇到的错误,错误码4表示Syntax error。问题原因是JSON数据中含有BOM头或者回车符/换行符。解决方案包括检查JSON格式、去除BOM头和清理报文中的回车符、换行符。
摘要由CSDN通过智能技术生成

摘要: php通过接口获取到json数据用json_decode($jsonStr,true)转数组失败 ,用json_last_error_msg()获取到错误信息:Syntax error 首先判断是不是json数据格式错误,可以在线json格式化http://json.cn/看看有无错误 如果没有错误,那么原因估计是,接口提供方那边输出了bom头造成或者报文body里有回车符/换行符造成的。有关bom头的处理,大家可以自行百度。回车符/换行符的处理:$post = str_replace(array("\r\n", "\r", "\n"), "", $post);//$post是待转为数组的json字符串。

最近在接第三方支付公司的一个支付通道,其他过程比较顺利。最后在接通道发送的交易通知的接口时发生了一些问题。期间为解决办法,网上也扒了很多帖子,但都没有解决问题,故而记录一下,以便为遇到类似问题的小伙伴抛砖引玉。
关于交易通知的接口文档,通道(第三方支付公司)写的比较简单,截图如下:
# 欢迎使用Markdown编辑器
OK,干就是了,代码如下:

            $post = file_get_contents("php://input");//接受通道参数
            $this->logger->info('post=>'.$post);//打印日志,记录接受参数
            $postResult = json_decode($post,true);//转数组
            //如果转失败就报错
            if(empty($postResult)){
   
                return $this->notifyResponse("FAIL",'无效报文');
            }

之所以用file_get_contents(“php://input”)接收参数,是因为我接收的是同事写一半的代码(他已奔向他的星辰大海),我用的tp5.0的框架,测试用tp的$request->param()是收不到通道的参数的,后来问了下通道,说是采用的Content-type: application/json 形式的报文,具体的各种接收方式,大家可以自行百度。OK,继续调接口,日志如下:

[2020-05-12 08:56:37] paynotify.INFO: post=>{
   "data":"TeqD8BXaWyzWJj3+bahWIffqG09r+RgEPiD74ck2CNsYxwMC9GtOnVChGN1i8ClRNlFBYlAq6o+w +wu4+cZe2dXHTVyad0mEEd8P5pknfy0Cf9hrPz"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值