Как запросить shopify graphql-admin-api из API?
Я пытаюсь запросить shopify graphql-admin-api из моего api. Я делаю это в соответствии с документацией, предоставленной graphql-admin-api, но все равно выдает ошибки авторизации.
2 ответа
Перейдите в Приложения -> Управление приложениями внизу, а затем: Создайте частное приложение в Shopify, которое будет подключаться к вашему приложению. Убедитесь, что вы управляете разрешением на то, что хотите запросить
После создания частного приложения вы получите пароль , который вы можете использовать в качестве маркеров для HTTP - запросов с заголовком «X-Shopify-Access-токен» значением : пароль
curl -X POST \
https://{shop}.myshopify.com/admin/api/2021-04/graphql.json \
-H 'Content-Type: application/graphql' \
-H 'X-Shopify-Access-Token: {password}' \
-d '
{
products(first: 5) {
edges {
node {
id
handle
}
}
pageInfo {
hasNextPage
}
}
}
'
Для получения дополнительной информации посетите: https://shopify.dev/docs/admin-api/getting-started#authentication
В NodeJS я использую пакет "graphql-request" для выполнения запросов и
const mutation = gql`
mutation createProduct(
$input: ProductInput!
$media: [CreateMediaInput!]
) {
productCreate(input: $input, media: $media) {
userErrors {
field
message
}
product {
id
metafields(first: 1) {
edges {
node {
id
}
}
}
}
}
}
`;
//const input = form your own input
const res = await graphQLClient.rawRequest(mutation, input);
Пользователи PHP могут выполнить эту функцию, чтобы сделать запрос в Shopify Admin API с помощью GraphQL.
Я использую GuzzleHttp (клиент PHP HTTP) для создания запроса
public function graph($query , $variables = []){
$domain = 'xxx.myshopify.com';
$url = 'https://'.$domain.'/admin/api/2019-10/graphql.json';
$request = ['query' => $query];
if(count($variables) > 0) { $request['variables'] = $variables; }
$req = json_encode($request);
$parameters['body'] = $req;
$stack = HandlerStack::create();
$client = new \GuzzleHttp\Client([
'handler' => $stack,
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'X-Shopify-Access-Token'=>$this->token // shopify app accessToken
],
]);
$response = $client->request('post',$url,$parameters);
return $body = json_decode($response->getBody(),true);
}
$query = "{ shop { name email } }"; // this is example graphQL query
$response = graph($query) // call this function
Код ниже может помочь вам проверить, сколько стоит этот запрос graphQL.
$calls = $response->extensions->cost;
$apiCallLimitGraph = [
'left' => (int) $calls->throttleStatus->currentlyAvailable,
'made' => (int) ($calls->throttleStatus->maximumAvailable - $calls->throttleStatus->currentlyAvailable),
'limit' => (int) $calls->throttleStatus->maximumAvailable,
'restoreRate' => (int) $calls->throttleStatus->restoreRate,
'requestedCost' => (int) $calls->requestedQueryCost,
'actualCost' => (int) $calls->actualQueryCost,
];