Как вернуть один актив OhMyBrew Laravel Shopify
Я пытаюсь получить объект в виде одного ресурса Shopify в Laravel, используя ohmybrew/laravel-shopify с этой строкой:
$asset = $shop->api()->rest('GET', '/admin/api/'.ShopifyApp::api()->getVersion().'/themes/80166092888/assets.json?asset[key]=snippets/collection-grid-item.liquid');
Я считаю, что результатом $asset должен быть актив Shopify, но когда я print_r($asset), я получаю следующее:
stdClass Object ([errors] => [response] => GuzzleHttp \ Psr7 \ Response Object ([reasonPhrase: GuzzleHttp \ Psr7 \ Response: private] => OK [statusCode: GuzzleHttp \ Psr7 \ Response: private] => 200 [заголовки:GuzzleHttp\Psr7\Response:private] => Array ( [Date] => Array ( [0] => Mon, 16 Dec 2019 13:28:09 GMT) [Content-Type] => Array ( [0] => text/html; charset=utf-8) [Transfer-Encoding] => Array ( [0] => chunked) [Connection] => Array ( [0] => keep-alive) [Set-Cookie] => " Массив ( [0] => __cfduid=db02a99a7bcc26406fd2df1c93df79a7e1576502889; истекает = среда, 15 января-20 13:28:09 по Гринвичу; путь = /; домен =.myshopify.com; HttpOnly [1] => _secure_afdmini_admini_admini_admin = 7db3d8e07d07d07d07dddb8db8db8ddb8db8dddb8d8d8db8d8db8d8 / admin; expires = Mon, 16 Mar 2020 13:28:09 -0000; secure; HttpOnly [2] =>_secure_admin_session_id_csrf = 7e198a5093ed7d91cfd87bda81a73126; путь = / админ; expires = Mon, 16 Mar 2020 13:28:09 -0000; безопасный; HttpOnly; SameSite = Lax [3] => _orig_referrer=; Срок действия истекает = Пн, 30 декабря-19 13:28:09 GMT; Путь = /; HttpOnly [4] => _landing_page=%2Fadmin%2Fauth%2Flogin; Срок действия истекает = Пн, 30 декабря-19 13:28:09 GMT; Путь =/; HttpOnly [5] => _master_udr=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWszTTJGbVl6VmlaaTA0TlRoa0xUUmtOemN0T0RZNU55MWxZV0l6WVRnM05HVmtObVlHT2daRlJnPT0iLCJleHAiOiIyMDIxLTEyLTE2VDEzOjI4OjA5LjU3OVoiLCJwdXIiOiJjb29raWUuX21hc3Rlcl91ZHIifX0%3D-e71a00abb5d0a41d5af672a647e68b4306ceea78; домен =.myshopify.com; путь = / админ; expires=Thu, 16 Dec 2021 13:28:09 -0000; безопасный; HttpOnly) [X-Sorting-Hat-PodId] => Массив ( [0] => 87) [X-Sorting-Hat-ShopId] => Массив ( [0] => 8865972324) [Vary] => Массив ( [0] => Accept-Encoding) [Referrer-Policy] => Array ( [0] => origin-when-cross-origin) [X-Frame-Options] => Array ( [0] => DENY) [X-ShopId] => Массив ( [0] => 8865972324) [X-ShardId] => Массив ( [0] => 87) [Cache-Control] => Массив ([0] => без кеша, без хранилища) [X-Shopify-Login-Required] => Массив ( [0] => true) [Shopify-Auth-Mechanisms] => Массив ([0] => пароль) [Strict-Transport-Security] => Массив ( [0] => max-age=7889238) [X-Shopify-Stage] => Массив ( [0] => production) [Content-Security-Policy] => Array ( [0] => default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval' https://* shopify-pos://8865972324) [X-ShardId] => Массив ( [0] => 87) [Cache-Control] => Массив ([0] => без кеша, без магазина) [X-Shopify-Login-Required] = > Массив ( [0] => true) [Shopify-Auth-Mechanisms] => Массив ([0] => пароль) [Strict-Transport-Security] => Array ( [0] => max-age=7889238) [X-Shopify-Stage] => Массив ([0] => производство) [Content-Security-Policy] => Массив ([0] => default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval'https: // * shopify-pos: //8865972324) [X-ShardId] => Массив ( [0] => 87) [Cache-Control] => Массив ([0] => без кеша, без магазина) [X-Shopify-Login-Required] = > Массив ( [0] => true) [Shopify-Auth-Mechanisms] => Массив ([0] => пароль) [Strict-Transport-Security] => Array ( [0] => max-age=7889238) [X-Shopify-Stage] => Array ([0] => production) [Content-Security-Policy] => Array ([0] => default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval'https: // * shopify-pos: //production) [Content-Security-Policy] => Array ([0] => default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval' https: // * shopify-pos: //production) [Content-Security-Policy] => Array ([0] => default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval' https: // * shopify-pos: //; блокировать все смешанное содержимое; child-src 'self' https:// shopify-pos://; connect-src 'self' wss:// https: // *; фрейм-предки 'none'; img-src 'собственные' данные: blob: https:; script-src https://cdn.shopify.com/ https://cdn.shopify.cn/ https://js-agent.newrelic.com/ https://bam.nr-data.net/ https://v.shopify.com/'unsafe-inline' 'unsafe-eval'; обновления-небезопасные-запросы; report-uri /csp-report?source%5Baction%5D=login&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Fauth&source%5Bsection%5D=admin&source%5Buuid%5D=8f3c44cc-7e32-48f5-a16018-809df3) [X-Content-Type-Options] => Массив ( [0] => nosniff) [X-Download-Options] => Массив ( [0] => noopen) [X-Permitted-Cross-Domain-Policies] => Массив ([0] => нет) [X-XSS-Protection] => Массив ( [0] => 1; mode=block; report=/xss-report? Source%5Baction%5D=login&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Fauth&source%5Bsection%5D=admin&source%5Buuid%5D=8f3c44cc-7e32-48f5-a018-80df31681bc9) [X-Dc] => Array ( [0] => gcp-us-east1,gcp-us-central1,gcp-us-central1) [NEL] => Массив ( [0] => {"report_to":"network-errors","max_age":2592000,"failure_fraction":0,01,"success_fraction":0,0001} [1] => {"report_to":"network-errors","max_age":2592000,"failure_fraction":0,01,"success_fraction":0.0001}) [Report-To] => Array ( [0] => {"group":"network-errors","max_age":2592000,"endpoints":[{"url":"url ":"url ":" https://monorail-edge.shopifycloud.com/v1/reports/nel/20190325/shopify"}]} [1] => {" group ":" network-errors "," max_age ": 2592000," endpoints ": [{"url": " https://monorail-edge.shopifycloud.com/v1/reports/nel/20190325/shopify"}]}) [X-Request-ID] => Массив ( [0] => 8f3c44cc-7e32-48f5-a018-80df31681bc9) [CF-Cache-Status] => Массив ([0] => ДИНАМИЧНЫЙ") [ Expect-CT] => Массив ([0] => max-age = 604800, report-uri = "https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct") [Сервер] => Массив ( [0] => cloudflare) [CF-RAY] => Массив ( [0] => 5460ffb34d00dc0b-LHR)) [headerNames:GuzzleHttp\Psr7\Response:private] => Array ( [date] => Дата [content-type] => Content-Type [transfer-encoding] => Transfer-Encoding [connection] => Connection [set-cookie] => Set-Cookie [x-sorting-hat-podid] => X-Sorting-Hat-PodId [x-sorting-hat-shopid] => X-Sorting-Hat-ShopId [различается] => Различная [политика-реферера] => Политика реферера [x-frame-options] => X- Параметры фрейма [x-shopid] => X-ShopId [x-shardid] => X-ShardId [cache-control] => Cache-Control [x-shopify-login-required] => X-Shopify-Login-Required [shopify-auth-sizes] => Shopify-Auth-Mechanisms [strict-transport-security] => Strict-Transport-Security [x-shopify-stage] => X-Shopify-Stage [content-security-policy] => Content-Security-Policy [x-content-type-options] => X-Content-Type-Options [x-download-options] => X-Download-Options [x-allowed-cross-domain-policies] => X-Permitted-Cross-Domain-Policies [x-xss-protection] => X-XSS-Protection [x-dc] => X-Dc [nel] => NEL [report-to] => Report-To [x-request-id] => X-Request-ID [cf-cache-status] => CF-Cache-Status [expect-ct] => Expect-CT [server] => Сервер [cf-ray] => CF-RAY) [протокол:GuzzleHttp\Psr7\Response:private] => 1.1 [поток:GuzzleHttp\Psr7\Response:private] => GuzzleHttp\Psr7\Stream Object ( [поток:GuzzleHttp\Psr7\Stream:private] => ID ресурса #15 [размер:GuzzleHttp\Psr7\Stream:private] => [seekable:GuzzleHttp\Psr7\Stream:private] => 1 [доступно для чтения:GuzzleHttp\Psr7\Stream:private] => 1 [доступно для записи:GuzzleHttp\Psr7\Stream:private] => 1 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array ())) [body] => [link] => [timestamps] => Array ( [0] => [1] => 1576502889.2041))GuzzleHttp \ Psr7 \ Stream: private] => Array ())) [body] => [link] => [timestamps] => Array ([0] => [1] => 1576502889.2041))GuzzleHttp \ Psr7 \ Stream: private] => Array ())) [body] => [link] => [timestamps] => Array ([0] => [1] => 1576502889.2041))
Я могу правильно получить список всех активов, используя:
$assets = $shop->api()->rest('GET', '/admin/api/'.ShopifyApp::api()->getVersion().'/themes/80166092888/assets.json');
но этот объект не содержит нужной мне информации - в частности, стоимости каждого актива.
В документации Shopify подробно описано, что это правильный способ получить один актив:
ПОЛУЧИТЬ /admin/api/2019-10/themes/#{theme_id}/assets.json?asset[keypting=templates/index.liquid&theme_id=828155753
и я могу успешно сделать запрос GET из браузера, чтобы получить нужную мне информацию.
Не уверен, что я делаю не так с PHP/Laravel/OhMyBrew.
1 ответ
Я нашел ответ в документации для ohmybrew/Basic-Shopify-API, который представляет собой оболочку API, реализованную в пакете laravel-shopify. Параметр url необходимо передать как отдельный параметр в метод rest, например:
$assets = $shop->api()->rest('GET', '/admin/api/'.ShopifyApp::api()->getVersion().'/themes/80166092888/assets.json', ['asset[key]' => 'snippets/collection-grid-item.liquid']);
Надеюсь, что это поможет любому, кто борется с той же проблемой.