Как отформатировать POST-запрос, используя PHP curl методы? - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь отправить почтовый запрос с этой полезной нагрузкой:

$request_content = [
    "data" => [
        [
            "sku" => "0987",
            "price" => $price,
            "category" => "moveis",
            "brand" => "bartira",
            "zip_code" => "07400000",
            "affiliate" => "google-shopping"
        ]
    ]
];

Поскольку это сообщение, я установил для CURLOPT_POST значение true;

$encoded_request = json_encode($request_content);
$ch = curl_init("https://my-service/endpoint/");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Token my-token"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_request);

$encoded_request содержимое, показанное в print_r:

{
"data": [
    {
        "sku": "0987",
        "price": "5.99",
        "category": "moveis",
        "brand": "bartira",
        "zip_code": "07400000",
        "affiliate": "google-shopping"
    }
]
}

Если я использую это содержимое на Postman, я получаю правильный ответ от службы, которую запрашиваю, но в моем коде я получил ошибку ;

{"data": ["Это поле обязательно для заполнения."]}

Какая конфигурация отсутствует на curl_ для правильного форматирования полезной нагрузки?

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете попробовать установить CURLOPT_HTTPHEADER и изменить переменную $ request_content, примерно так:

//set your data
$request_content = [
    "data" => [
        "sku" => "0987",
        "price" => $price,
        "category" => "moveis",
        "brand" => "bartira",
        "zip_code" => "07400000",
        "affiliate" => "google-shopping"
    ]
];
$encoded_request = json_encode($request_content);

$ch = curl_init("https://my-service/endpoint/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_request);

// Set HTTP Header for POST request 
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Token my-token',
    'Content-Type: application/json',
    'Content-Length: ' . strlen($encoded_request)]
);
...