php - 使用 PHP 将从第三方接收到的数据存储在端点 URL 中
问题描述
我正在尝试使用 PHP 从第三方 API 系统接收到我的 URL 端点的数据响应。所以第三部分是向我的端点(我在他们的 API 面板中填写的 url)发送一个发布请求,只要他们有新的数据响应给我。基本上,当他们从系统收到新的提交时,他们只会发送最后的响应数据。我已经在我的端点 URL 上添加了这个,看看我是否可以看到收到的数据响应:
$request_data = file_get_contents('php://input');
var_dump($request_data);
在他们的面板上,我可以测试端点 url 结果,在他们的面板上,当我单击测试请求按钮时,我得到了这个结果,这基本上是我的结果var_dump
:
但在我这边,输出就像一个完整的字符串,但在我的端点 URL 上我什么也得不到。
这是post_max_size
在我的 phpinfo 文件中,所以我的 $_POST 变量不应该为空:
我应该期望接收到我的 URL 端点的提交数据的格式如下:
{
"data": {
"id": "",
"name": "",
"email": "",
"phone": "",
"description": "",
"street": "",
"housenumber": "",
"postcode": "",
"city": "",
"questions": {
"Type opdracht": "",
"Wat wil je laten opstellen?": ""
},
"questions_unmapped": {
"114": "",
"187": ""
},
"date": "",
"notes": ""
}
}
有没有办法:
- 将此字符串转换为 PHP 对象
- 在我这边打印/存储这些数据(我的端点 URL)
解决方案
我使用 Curl 脚本模拟了您发布的第 3 方 API,如下所示
$data_string = '{
"operacion": {
"tok": "[generated token]",
"shop_id": "12313",
"respuesta": "S",
"respuesta_details": "respuesta S",
"extended_respuesta_description": "respuesta extendida",
"moneda": "PYG",
"monto": "10100.00",
"authorization_number": "123456",
"ticket_number": "123456789123456",
"response_code": "00",
"response_description": "Transacción aprobada.",
"security_information": {
"customer_ip": "123.123.123.123",
"card_source": "I",
"card_country": "Croacia",
"version": "0.3",
"risk_index": "0"
}
}}';
$ch = curl_init('http://localhost/test/index.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
echo $result;
在我的 index.php 中,我模拟了您的 URL 端点,如下所示
$request_data = file_get_contents('php://input');
$decoded_params = json_decode($request_data,true);
var_dump($decoded_params);
我得到的输出就是这个。
Array
(
[operacion] => Array
(
[tok] => [generated token]
[shop_id] => 12313
[respuesta] => S
[respuesta_details] => respuesta S
[extended_respuesta_description] => respuesta extendida
[moneda] => PYG
[monto] => 10100.00
[authorization_number] => 123456
[ticket_number] => 123456789123456
[response_code] => 00
[response_description] => Transacción aprobada.
[security_information] => Array
(
[customer_ip] => 123.123.123.123
[card_source] => I
[card_country] => Croacia
[version] => 0.3
[risk_index] => 0
)
)
)
我刚刚对您的端点代码进行了以下更改
$decoded_params = json_decode($request_data); => $decoded_params = json_decode($request_data,true);
推荐阅读
- amazon-web-services - 如何为 AWS 备份虚拟 MFA
- angular - 在 mat-table 父级中使用 ngif 时,mat-filtering/mat-sort 无法正常工作
- r - 在R中的组内绑定行
- javascript - 在显示/隐藏时使用多个 div
- java - Java 核心转储了 safepoint.cpp:310 错误
- json - 从 google protobuff 对象中提取数据的正确方法是什么?
- bash - 提取 rpm 包并将输出分配给变量
- javascript - 在 react.js 中使用 ref 显示/隐藏多个按钮
- javascript - 为什么 JavaScript 中的 "1" + + "1" = "11" 但 "1" - - "1" = 2
- javascript - Instafeed JS 未加载