Я пытаюсь вызвать API с именем Волна. Раньше я использовал cURL, но никогда не использовал запросы GRAPHQL. Мне интересно, что не так с приведенным ниже при использовании cURL. Я получаю сообщение об ошибке Неверный запрос Ниже приведен пример моего кода.
Вот что такое API cURL
curl -X POST "https://reef.waveapps.com/graphql/public" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "query": "query { user { id defaultEmail } }" }'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://reef.waveapps.com/graphql/public');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{ "query": "query { user { id defaultEmail } }');
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer 1212121';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
var_dump($result);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
Любая помощь будет полезна.






Я могу порекомендовать использовать https://github.com/softonic/graphql-клиент, он отлично сработал для нас.
С аутентификацией пока не разобрались, так как наш API только внутренний.
В этой библиотеке есть вспомогательный конструктор, использующий промежуточное ПО OAuth2 guzzle. Тем не менее, вы можете использовать свое собственное промежуточное ПО таким же образом: github.com/softonic/graphql-client/blob/master/src/…
Вы можете создать свой собственный клиент, используя любое промежуточное ПО, которое вам нужно:
$clientWithMiddleware = \MyGuzzleClientWithMiddlware::build();
$graphQLClient = new \Softonic\GraphQL\Client(
$clientWithMiddleware,
new \Softonic\GraphQL\ResponseBuilder()
);
В качестве примера того, как создать клиент Guzzle с промежуточным программным обеспечением, вы можете проверить это: https://github.com/softonic/guzzle-oauth2-middleware/blob/master/src/ClientBuilder.php
Для тех, кто хочет запрашивать службу GraphQL БЕЗ сторонней библиотеки, я в основном взял код Брайана и протестировал службу GraphCMS, для которой я уже написал код Node.js. Итак, я знал, что URL-адрес, токен авторизации и запрос работают.
<?php
$endpoint = "https://api-euwest.graphcms.com/v1/[[your id number here]]/master";//this is provided by graphcms
$authToken = "[[your auth token]]";//this is provided by graphcms
$qry = '{"query":"query {products(where:{status:PUBLISHED}){title,img,description,costPrice,sellPrice,quantity,sku,categories {name},brand {name}}}"}';
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer '.$authToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $qry);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
var_dump($result);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
?>
Все работало нормально. Токен аутентификации представляет собой большую длинную строку символов, предоставляемую GraphCMS, и ее нужно передать только в заголовке. Так что никакого сложного процесса аутентификации — пока у вас есть токен.
Если нет аутентификации
Вы можете использовать file_get_contents вместо curl
$url = http://myapi/graphql?query = {me{name}}
$html =file_get_contents($url);
echo $html;
использовать json в параметре запроса для graphql;
Более простой способ сделать это — использовать платформу API. Я часто использую Postman, платформа имеет функциональные возможности, чтобы предоставить вам код PHP cURL для запроса GraphQL в части инструментов GraphQl приложения.
Он работает хорошо, но я использую токен доступа, и он не требует OAuth2. Не уверен, что у вас есть процесс sem?