Отправка данных JSON в API с помощью CURL
Когда я отправляю json
данные в API с помощью curl
- я не получаю никаких выходных данных. Я хотел бы отправить получателю приглашение по электронной почте.
$url_send ="http://api.address.com/SendInvitation?";
$str_data = json_encode($data);
function sendPostData ($url, $post) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
return curl_exec($ch);
}
И вот JSON
$str_data
[
{
"authorizedKey" : "abbad35c5c01-xxxx-xxx",
"senderEmail" : "[email protected]",
"recipientEmail" : "[email protected]",
"comment" : "Invitation",
"forceDebitCard" : "false"
}
]
И вызывающая функция:
$response = sendPostData($url_send, $str_data);
Это API: https://api.payquicker.com/Help/Api/POST-api-SendInvitation
3 answers
Попробуйте добавить curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
И изменив http_build_query($post)
на $post
Реализация:
<?php
$data = array(
"authorizedKey" => "abbad35c5c01-xxxx-xxx",
"senderEmail" => "[email protected]",
"recipientEmail" => "[email protected]",
"comment" => "Invitation",
"forceDebitCard" => "false"
);
$url_send ="http://api.payquicker.com/api/SendInvitation?authorizedKey=xxxxx";
$str_data = json_encode($data);
function sendPostData($url, $post){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch); // Seems like good practice
return $result;
}
echo " " . sendPostData($url_send, $str_data);
?>
Ответ, который я получаю, таков:
{"success":false,"errorMessage":"Object reference not set to an instance of an object.","status":"N/A"}
Но, возможно, это будет работать с действительными данными....
Редактировать: Для публикации xml это то же самое, что и на их сайте, за исключением строки:
$xml = '
<SendInvitationRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/PQApi.Models">
<authorizedKey>80c587b9-caa9-4e56-8750-a34b17dba0a2</authorizedKey>
<comment>sample string 4</comment>
<forceDebitCard>true</forceDebitCard>
<recipientEmail>sample string 3</recipientEmail>
<senderEmail>sample string 2</senderEmail>
</SendInvitationRequest>';
Затем:
sendPostData($url_send, $xml)
Вы должны добавить заголовок:
$headers= array('Accept: application/json','Content-Type: application/json');
И:
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
В противном случае...
Статус HTTP 415 - Неподдерживаемый тип носителя
... может случиться.
Вам не нужно добавлять заголовки, как вы уже делаете json_encode
.
просто print_r (curl_getinfo($ch));
и посмотрите информацию о типе контента в нем.