【发布时间】:2020-12-29 20:46:51
【问题描述】:
该接口用于门禁设备上报人员通行记录,经我(第三方平台)调用该接口给人脸识别终端或人脸识别门禁终端。
调用方向:
人脸识别终端或人脸识别门禁终端向第三方平台调用API。
请求描述:
请求方式:POST 请求网址:/LAPI/V1.0/System/Event/Notification/PersonVerification 内容类型:text/plain
请求示例:
{
"Reference": "204.2.1.20:5118/LAPI/V1.0/System/Event/Subscription/0",
"Seq": 5,
"DeviceCode": "210235C3R13202000093",
"Timestamp": 1564735558,
"NotificationType": 1,
"FaceInfoNum": 1,
"FaceInfoList": [
{
"ID": 5,
"Timestamp": 1564707615,
"CapSrc": 1,
"FeatureNum": 0,
"FeatureList": [
{
"FeatureVersion": "",
"Feature": ""
},
{
"FeatureVersion": "",
"Feature": ""
}
],
“Temperature”: 36.5,
“MaskFlag”: 1,
"PanoImage": {
"Name": "1564707615_1_86.jpg",
"Size": 101780,
"Data": "…"
},
"FaceImage": {
"Name": "1564707615_2_86.jpg",
"Size": 35528,
"Data": "…"
},
"FaceArea": {
"LeftTopX": 4981,
"LeftTopY": 3744,
"RightBottomX": 8250,
"RightBottomY": 5583
}
}
],
"CardInfoNum": 0,
"CardInfoList": [ ],
"GateInfoNum": 0,
"GateInfoList": [ ],
"LibMatInfoNum": 1,
"LibMatInfoList": [
{
"ID": 5,
"LibID": 3,
"LibType": 4,
"MatchStatus": 2,
"MatchPersonID": 0,
"MatchFaceID": 0,
"MatchPersonInfo": {
"PersonName": "",
"Gender": 0,
"CardID": "",
"IdentityNo": ""
}
}
]
}
我正在使用 Laravel,尝试 $request->all() 时得到 [],下面是 dump( $request->getContent() );
dump
似乎我需要从请求的开头和结尾删除 "" 以便 json_decode(),但无论我使用什么字符串函数 - preg_replace、子字符串等 - 当我尝试 $content[0 时,没有任何改变] 我得到了{ 而不是",$content[-1] 我得到了\n,$content[-2] 我得到了}
谁能指出我错在哪里?
【问题讨论】:
-
Welcome to SO ... 如果这应该是 JSON,为什么它以文本/纯文本的内容类型发送?
-
“当我尝试 $content[0] 我得到 { 而不是 ", $content[-1] 我得到 \n, $content[-2] 我得到 }” i> - 听起来你的内容 是 实际上只是 JSON,而那些双引号实际上并不是它的一部分。
-
“我在尝试 $request->all() 时得到了 []” - 这是因为请求内容类型是
text/plain。字面意思是,这是没有任何定义的结构或固有含义的任意字符数据 - 因此 尝试 自动将其解析为任何内容,一开始没有多大意义。 -
我无法控制它是如何从第三方设备发送的,但我需要解析它
-
@rif 你可以在你的请求中使用 Content-Type: application/json 而不是 Content-Type: text/plain 吗?另外,这可能会有所帮助laravel.com/docs/7.x/http-client
标签: php json laravel string-parsing