Shopify網上商店GraphQL Admin接口查詢實戰

目錄

一、Shopify網上商店

二、個人商店配置接口權限

三、PostMan調用接口測試

四、通過Java服務調用接口


一、Shopify網上商店

Shopify是由Tobi Lütke創辦的加拿大電子商務軟件開發商,總部位于加拿大首都渥太華,已從一家在咖啡店辦公的 5人團隊,成長為在全球擁有超過 10,000名員工的商務平臺。?
Shopify成立于2004年,是一個銷售滑雪板的電子商務平臺。創始人于2006年向公眾發布了它,作為一種在線銷售幾乎任何東西的方式。該公司于2015年在紐約證券交易所和多倫多證券交易所上市。Shopify為超過175個國家的數百萬企業提供支持。?
Shopify允許企業主創建和管理在線商店,并提供運營商店所需的所有工具,從庫存管理到銷售和履行。Shopify還搭建了一個應用商店,一個以眾多開發者為核心的生態系統

相關文檔如下↓

1.官網網站入口:Shopify官網

2.網上商店接口文檔:Shopify接口文檔

3.個人商店后臺地址:個人店鋪后臺地址

二、個人商店配置接口權限

點擊:設置→應用和銷售渠道→開發應用→創建應用

需要做倆件事,1.配置權限,2.獲得token

1.創建好應用在API憑據里面就可以獲得一次token,需要自己保存下來。

2.在配置選項里面配置權限,選擇需要開通的選項進行配置。

三、PostMan調用接口測試

所有GraphQl Admin API查詢都需要有效的Shopify訪問令牌。在所有API查詢中都將您的令牌作為X-Shopify-Access-token標頭,使用Shopify支持的客戶庫可以簡化此過程,為了確保平臺安全,應用程序需要在安裝過程中請求特定的訪問范圍。

調用接口步驟需要

1.X-Shopify-Access-token為應用里面的token

2.權限配置開通,應用里面的配置

3.自己店鋪地址

4.構建GraphQL規范的JSON參數

下面是例子,比如我想查詢網上商店后臺里面內容→文件

通過接口文檔可以看到是files接口,分別可以選擇版本,中間是參數,右邊是官方例子

1.配置調用地址

調用URL:https://your-development-store.myshopify.com/admin/api/2024-10/graphql.json

your-development-store:需要替換成自己店鋪的地址:比如my-store

替換完就是:https://my-store.myshopify.com/admin/api/2024-10/graphql.json

2.構建GraphQL參數

eg:查詢250條數據

{files(first: 250) {edges {node {id... on MediaImage {image {url}}}}pageInfo {hasNextPagehasPreviousPagestartCursorendCursor}}
}

3.配置查詢Headers

增加X-Shopify-Access-Token:為你商店的token

4.調用測試,調用成功則會返回數據,如果構建的GraphQL參數錯誤則會返回400 BadRequest

其他構建GraphQL參數參考如下↓

1.查詢訂單

{orders(first: 10) {edges {node {suggestedRefund {refundDuties {amountSet {shopMoney {amountcurrencyCode}}}totalDutiesSet {shopMoney {amountcurrencyCode}}}emailreturnStatusdisplayFinancialStatusdisplayFulfillmentStatusrisk {recommendation}}}}
}

2.查詢訂單減少參數版

{orders(first: 10) {edges {cursornode {id}}pageInfo {hasNextPagehasPreviousPagestartCursorendCursor}}
}

3.查詢指定的文件名

{files(first: 250,query: "filename:'my-image.png'") {edges {node {id... on MediaImage {image {url}}}}pageInfo {hasNextPagehasPreviousPagestartCursorendCursor}}
}

4.查詢文件分頁

{files(first: 250,after:"eyJsYX******") {edges {node {id... on MediaImage {image {url}}}}pageInfo {hasNextPagehasPreviousPagestartCursorendCursor}}
}

分頁邏輯說明

  • 首次請求:不傳遞?after?參數,獲取第1-250條數據。
  • 后續請求:將前一次返回的?endCursor?作為新的?after?參數值,獲取下一頁數據(如251-500)。
  • 終止條件:當?pageInfo.hasNextPage?為?false?時停止。

四、通過Java服務調用接口

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;public class ShopifyGraphQLClient {private static final String API_URL = "https://my-store-de.myshopify.com/admin/api/2024-10/graphql.json";private static final String ACCESS_TOKEN = "shpat_******"; // 替換為實際的訪問令牌public static void main(String[] args) {try {// 強制使用 TLSv1.2System.setProperty("https.protocols", "TLSv1.2");// 繞過證書驗證(僅限開發環境)TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() { return null; }public void checkClientTrusted(X509Certificate[] certs, String authType) {}public void checkServerTrusted(X509Certificate[] certs, String authType) {}}};SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, trustAllCerts, new SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());// 忽略主機名驗證(僅限開發環境)HostnameVerifier allHostsValid = (hostname, session) -> true;HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);// 創建 URL 對象URL url = new URL(API_URL);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 設置請求方法為 POSTconnection.setRequestMethod("POST");connection.setDoOutput(true);// 設置請求頭connection.setRequestProperty("Content-Type", "application/json");connection.setRequestProperty("X-Shopify-Access-Token", ACCESS_TOKEN);// 構建 GraphQL 查詢// 創建數據映射Map<String, Object> data = new HashMap<>();data.put("query", "{\r\n" +"    orders(first: 10) {\r\n" +"      edges {\r\n" +"        cursor\r\n" +"        node {\r\n" +"          id\r\n" +"        }\r\n" +"      }\r\n" +"      pageInfo {\r\n" +"        hasNextPage\r\n" +"        hasPreviousPage\r\n" +"        startCursor\r\n" +"        endCursor\r\n" +"      }\r\n" +"    }\r\n" +"}");// 使用Jackson序列化為JSON字符串ObjectMapper mapper = new ObjectMapper();String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);System.out.println(json);// 發送請求體try (OutputStream os = connection.getOutputStream()) {byte[] input = json.getBytes("utf-8");os.write(input, 0, input.length);}// 讀取響應int responseCode = connection.getResponseCode();BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));StringBuilder response = new StringBuilder();String responseLine;while ((responseLine = br.readLine()) != null) {response.append(responseLine.trim());}// 解析響應System.out.println(response.toString());// 創建 ObjectMapper 實例ObjectMapper objectMapper = new ObjectMapper();try {// 解析 JSON 字符串為 JsonNodeJsonNode jsonNode = objectMapper.readTree(response.toString());// 訪問數據System.out.println("格式化輸出 JSON:");System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode));// 示例:訪問 data -> orders -> edges 的第一個節點的 idJsonNode firstEdgeNodeId = jsonNode.path("data").path("orders").path("edges").get(0).path("node").path("id");System.out.println("第一個訂單的 ID:" + firstEdgeNodeId.asText());} catch (Exception e) {e.printStackTrace();}} catch (Exception e) {e.printStackTrace();}}
}

返回結果如下說明成功

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78967.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Tips】高效文獻管理:Zotero 導入參考文獻的多種方式詳解

高效文獻管理&#xff1a;Zotero 導入參考文獻的多種方式詳解 在學術研究中&#xff0c;高效管理參考文獻是提升效率的關鍵。Zotero 作為一款強大的文獻管理工具&#xff0c;提供了多種便捷的文獻導入方式。以下結合文獻題錄完整性對比分析&#xff0c;為大家詳細介紹 Zotero …

[AI]browser-use + web-ui 大模型實現自動操作瀏覽器

[AI]browser-use web-ui 大模型實現自動操作瀏覽器 介紹 官方地址&#xff1a;https://github.com/browser-use/web-ui browser-use主要作用是將 AI Agent 與瀏覽器鏈接起來從而實現由 AI 驅動的瀏覽器自動化。今天會給大家介紹如何通過browser-use web-ui來搭建并操作browse…

Springboot請求靜態資源時,request.getServletPath() 返回error

大家好&#xff0c;我是 程序員碼遞夫。 SpringBoot請求靜態資源時&#xff0c;request.getServletPath() 返回error&#xff0c; 明明我的目錄文件是存在的怎么就報錯了呢&#xff1f; 如我請求 http://127.0.0.1:9090/Hanfu/upload/1647161536390.png 通常是因為請求的資…

在開發板上如何處理curl: (60) SSL certificate problem

目錄 引言 問題解析 解決方法 跳過證書驗證 采用證書認證 結語 引言 最近一直推薦學生們在課程實驗中使用curl及其libcurl。curl 是一個強大的命令行工具&#xff0c;用于在命令行中進行數據傳輸。它支持多種協議&#xff0c;如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。…

CSRF請求偽造

該漏洞主要是關乎于用戶&#xff0c;告誡用戶不可亂點擊鏈接&#xff0c;提升自我防范&#xff0c;才能不落入Hacker布置的陷阱&#xff01; 1. cookie與session 簡單理解一下兩者作用 1.1. &#x1f36a; Cookie&#xff1a;就像超市的會員卡 存儲位置&#xff1a;你錢包里…

Python循環與遍歷詳解:從入門到進階

在Python編程中&#xff0c;循環和遍歷是最基礎但極其重要的知識點。理解并掌握這部分內容&#xff0c;是編寫高效、清晰代碼的前提。本文將從for循環和while循環的基本語法出發&#xff0c;逐步深入探討range、enumerate、zip、列表推導式、字典遍歷等Python中常見的遍歷技巧&…

Python-MCPServer開發

Python-MCPServer開發 使用FastMCP開發【SSE模式的MCPServer】&#xff0c;熟悉【McpServer編碼過程】【McpServer調試方法】 1-核心知識點 1-熟悉【SSE模式的MCPServer】開發2-熟悉【stdio模式的MCPServer】開發3-熟悉【啟動MCPServer】的三種方式 3.1-直接啟動:python mcp_s…

高級項目管理

在信息系統項目管理工作中&#xff0c;組織管理者和項目管理者&#xff0c;有時還會面臨多項目的管理&#xff0c;或組織級的項目管理、項目的量化管理等課題。 其中&#xff0c;項目集管理、項目組合管理和組織級項目管理&#xff0c;為多項目管理和組織級管理提供有效指導&a…

tarjan縮點+強聯通分量

【模板】縮點https://www.luogu.com.cn/problem/P3387 首先我們要理解這道題為什么要用縮點 題目說的是有向圖&#xff0c;如果無環的話就可以用DP來解決了 由于可以走重復的點&#xff0c;所以一個環上的點可以看成是一個點&#xff0c;它的點權就等于該環上所有點的點權之…

OSCP:獲取全交互式 Windows 反向 Shell

簡介 在本文中&#xff0c;我們將探討獲取完全交互式 Windows 反向 Shell 的各種方法&#xff0c;從利用內置工具到采用先進技術以獲得更好的控制和功能。 通過 Invoke-ConPtyShell 我獲取完全交互式 Windows 反向 Shell 的首選方法是通過 Invoke-ConPtyShell 腳本。當 Wind…

免費超好用的電腦操控局域網內的手機(多臺,無線)

使用 第一步 解壓QtScrcpy壓縮包&#xff0c;并運行QtScrcpy.exe 第二步 2.1 手機開啟開發者模式&#xff08;設置>關于本機>版本信息>連點10下“版本號”&#xff09; 2.2 開啟 USB調試 和 無線調試&#xff08;設置>開發者選項> USB調試 無線調試&#xf…

Go語言內存管理

本章節&#xff0c;就來學習一下go語言的內存模型&#xff0c;看一下內存的分配&#xff0c;存儲都是如何實現的&#xff0c;與此同時&#xff0c;在正式開始今天的主題之前&#xff0c;首先先來學習操作系統基于這一方面的內容&#xff0c;來看看是如何管理內存的吧 本章及節…

【docker】啟動臨時MongoDB容器、掛載數據卷運行數據庫服務,并通過備份文件恢復MongoDB數據庫備份數據

?啟動臨時 MongoDB 容器、掛載數據卷運行數據庫服務&#xff0c;并通過備份文件恢復數據 1.命令分解與功能說明1.1.啟動一個臨時 MongoDB 容器?&#xff0c;并進入交互式終端&#xff08;1&#xff09;執行命令&#xff08;2&#xff09;實現功能?&#xff08;3&#xff09;…

【最新 MCP 戰神手冊 08】工具使用詳解:實現 AI 行動

文章目錄 1. 開始啦!2. 第一部分:設計高效且安全的工具3. 第二部分:定義工具藍圖——參數、輸出與約束條件4. 第三部分:彌合差距:LLM 兼容性(函數調用)5. 第四部分:實施與測試的最佳實踐1. 開始啦! 在前幾章中,我們將工具介紹為 AI 模型在 MCP 客戶端引導下向 MCP 服…

介紹 IntelliJ IDEA 快捷鍵操作

IntelliJ IDEA 快捷鍵操作 1. 編輯與導航2. 查找與替換3. 調試與運行4. 導航與視圖5. 重構與生成6. 高級快捷鍵&#xff08;提高效率&#xff09;注意事項 IntelliJ IDEA 是一款功能強大的集成開發環境&#xff0c;掌握其常用快捷鍵可以顯著提升開發效率。但是有些小伙伴并不清…

Javascript 中作用域的理解?

一、作用域的類型 1. 全局作用域&#xff08;公司大門外&#xff09; 范圍&#xff1a;整個 JavaScript 文件變量&#xff1a;像貼在公告欄上的信息&#xff0c;所有人可見例子&#xff1a;const companyName "阿里"; // 全局變量&#xff0c;任何地方都能訪問 fu…

Leetcode刷題記錄22——滑動窗口最大值

題源&#xff1a;https://leetcode.cn/problems/sliding-window-maximum/description/?envTypestudy-plan-v2&envIdtop-100-liked 題目描述&#xff1a; 思路一&#xff1a; 暴力遍歷法&#xff0c;通過一個長度為k的滑動窗口遍歷nums&#xff0c;將其中最大的數依次記…

Apache Flink的架構設計與運行流程說明

在大數據領域&#xff0c;實時計算的重要性隨著業務需求的爆發式增長愈發凸顯。從電商的實時銷量監控到金融的高頻交易風控&#xff0c;從物聯網設備的實時告警到社交平臺的熱點追蹤&#xff0c;企業對“秒級甚至毫秒級”數據處理能力的需求已成為剛需。在眾多實時計算框架中&a…

經典算法 最長單調遞增子序列

最長單調遞增子序列 問題描述 找出由n個數組成的序列的最長單調遞增子序列。 示例輸入 9 2 1 5 3 6 4 8 9 7示例輸出 5示例輸入 6 5 6 7 1 2 8示例輸出 4c代碼(動態規劃 O(n^2)) #include<bits/stdc.h>using namespace std;int main() {int n, ans 0;cin >&g…

【語法】C++繼承中遇到的問題及解決方法

目錄 1.子類構造函數中初始化父類成員 2.子類顯式調用父類的析構函數 第一種說法&#xff1a;重定義 反駁&#xff1a; 第二種說法&#xff1a;operator~ 3.因編譯器版本過低而出現錯誤 貼主在學習C的繼承時&#xff0c;遇到了很多問題&#xff0c;覺得很變態&#xff0c…