首页 > 解决方案 > 使用 PHP 将从第三方接收到的数据存储在端点 URL 中

问题描述

我正在尝试使用 PHP 从第三方 API 系统接收到我的 URL 端点的数据响应。所以第三部分是向我的端点(我在他们的 API 面板中填写的 url)发送一个发布请求,只要他们有新的数据响应给我。基本上,当他们从系统收到新的提交时,他们只会发送最后的响应数据。我已经在我的端点 URL 上添加了这个,看看我是否可以看到收到的数据响应:

$request_data = file_get_contents('php://input');

var_dump($request_data);

在他们的面板上,我可以测试端点 url 结果,在他们的面板上,当我单击测试请求按钮时,我得到了这个结果,这基本上是我的结果var_dump

导致他们的 API 面板

但在我这边,输出就像一个完整的字符串,但在我的端点 URL 上我什么也得不到。

我的端点 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": ""
    }
}

有没有办法:

标签: phpapiendpoint

解决方案


我使用 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_pa​​rams = json_decode($request_data); => $decoded_pa​​rams = json_decode($request_data,true);


推荐阅读