Публикация в API с curl не работает - PullRequest
0 голосов
/ 18 мая 2018
$headers = array();
$headers[] = 'Authorization: hmac ' .$websiteKey.':'.$hmac .':'.$nonce . ':'.$time;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl,CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);    
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);

var_dump($result);


curl_close($curl);

У меня есть код выше, я хочу опубликовать в API.Как-то не работает.Я попытался использовать var_dump для переменной результата.Результат:

string(117) "{"Message":"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."}"

Есть идеи, почему его не публиковать в API?

Значение $ post =

{"AmountDebit":10,"Currency":"EUR","Invoice":"testinvoice 123","Services":{"ServiceList":[{"Action":"Pay","Name":"ideal","Parameters":[{"Name":"issuer","Value":"ABNANL2A"}]}]}}

Заголовки:

$headers[] = 'Authorization: hmac ' .$websiteKey.':'.$hmac .':'.$nonce . ':'.$time;

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы установили curl перед его использованием.Если он не установлен, попробуйте google для установки Curl и используйте мою функцию curl для пост-запроса, он работает на 100% -

public function curlPostJson() {
    $headers = [];
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Content-Length: ' .strlen(json_encode($paramdata));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($paramdata));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
    $server_output = curl_exec($ch);
    curl_close($ch);
    return json_decode($server_output);
}
0 голосов
/ 18 мая 2018

Если вы не укажете заголовок Content-Type при выполнении POST-вызова с помощью Curl, он добавит его со значением application/x-www-form-urlencoded.

Из Все для скручивания book :

POSTing с опцией curl -d заставит включить заголовок по умолчанию, который выглядит как Content-Type: application / x-www-form-urlencoded.Это то, что ваш обычный браузер будет использовать для простого POST.

Многие получатели данных POST не заботятся или не проверяют заголовок Content-Type.

Если этот заголовок недостаточно хорош дляВы, конечно, должны заменить это и вместо этого предоставить правильный.

Судя по вашему запросу, я полагаю, вам нужно добавить следующее в начало вашего скрипта:

$headers[] = 'Content-Type: application/json';

Но в зависимости от того, к какому API вы отправляете сообщение, это может отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...