摘要: 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字符串。
最近在接第三方支付公司的一个支付通道,其他过程比较顺利。最后在接通道发送的交易通知的接口时发生了一些问题。期间为解决办法,网上也扒了很多帖子,但都没有解决问题,故而记录一下,以便为遇到类似问题的小伙伴抛砖引玉。
关于交易通知的接口文档,通道(第三方支付公司)写的比较简单,截图如下:
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"}