Shopify 管理 API Python 程式庫
您應該在 Shopify 合作夥伴儀表板上註冊為合作夥伴,以便您可以建立和管理 Shopify 應用程式。
若要輕鬆安裝或升級至最新版本,請使用 pip。
pip install --upgrade ShopifyAPI
首先在合作夥伴儀表板中建立一個新應用程序,然後檢索您的 API 金鑰和 API 金鑰。
然後,我們需要將這些金鑰提供給 Shopify 會話類,以便它知道如何進行身份驗證。
import shopify
shopify . Session . setup ( api_key = API_KEY , secret = API_SECRET )
為了存取商店的數據,應用程式需要來自該特定商店的存取權杖。我們需要使用 OAuth 向該商店進行身份驗證,我們可以透過以下方式開始:
shop_url = "SHOP_NAME.myshopify.com"
api_version = '2024-07'
state = binascii . b2a_hex ( os . urandom ( 15 )). decode ( "utf-8" )
redirect_uri = "http://myapp.com/auth/shopify/callback"
scopes = [ 'read_products' , 'read_orders' ]
newSession = shopify . Session ( shop_url , api_version )
auth_url = newSession . create_permission_url ( scopes , redirect_uri , state )
# redirect to auth_url
一旦商家接受,商店就會使用名為「code」的參數將擁有者重新導向到您應用程式的redirect_uri
。這是一個臨時令牌,應用程式可以將其交換為永久存取令牌。您應該將上面提供的狀態與收到的返回狀態進行比較,以確保請求正確。現在,當您在回呼處理程序中收到來自 shopify 的請求時,我們可以將程式碼交換為 access_token:
session = shopify . Session ( shop_url , api_version )
access_token = session . request_token ( request_params ) # request_token will validate hmac and timing attacks
# you should save the access token now for future use.
現在您已準備好向您的商店發出授權 API 請求!
session = shopify . Session ( shop_url , api_version , access_token )
shopify . ShopifyResource . activate_session ( session )
shop = shopify . Shop . current () # Get the current shop
product = shopify . Product . find ( 179761209 ) # Get a specific product
# execute a graphQL call
shopify . GraphQL (). execute ( "{ shop { name id } }" )
或者,您可以使用 temp 初始化會話並執行命令:
with shopify . Session . temp ( shop_url , api_version , token ):
product = shopify . Product . find ()
最佳做法是在完成後清除會話。臨時會話會自動執行此操作:
shopify . ShopifyResource . clear_session ()
私有應用程式的使用速度要快一些,因為不需要 OAuth。您可以在 Shopify 商家管理中建立私人應用程式。您可以使用私人應用程式密碼作為您的access_token
:
session = shopify . Session ( shop_url , api_version , private_app_password )
shopify . ShopifyResource . activate_session ( session )
# ...
shopify . ShopifyResource . clear_session ()
with shopify . Session . temp ( shop_url , api_version , private_app_password ):
shopify . GraphQL (). execute ( "{ shop { name id } }" )
注意:您的應用程式必須公開才能測試計費流程。要在開發商店上進行測試,請使用'test': True
標誌
application_charge = shopify . ApplicationCharge . create ({
'name' : 'My public app' ,
'price' : 123 ,
'test' : True ,
'return_url' : 'https://domain.com/approve'
})
# Redirect user to application_charge.confirmation_url so they can approve the charge
charge_id
參數的return_url
(注意:如果使用 API 版本 2021-01 或更高版本建立費用,則不再需要此操作) charge = shopify . ApplicationCharge . find ( charge_id )
shopify . ApplicationCharge . activate ( charge )
activated_charge
狀態是否處於active
activated_charge = shopify . ApplicationCharge . find ( charge_id )
has_been_billed = activated_charge . status == 'active'
建議至少對 pyactiveresource 庫的原理有基本的了解,該庫是 Rails/ActiveResource 到 Python 的端口,並且該包嚴重依賴它。
pyactiveresource
資源實例對應到 Shopify API 中的 RESTful 資源。
pyactiveresource
公開了用於創建、尋找、更新和刪除資源的生命週期方法,這些方法相當於POST
、 GET
、 PUT
和DELETE
HTTP 動詞。
product = shopify . Product ()
product . title = "Shopify Logo T-Shirt"
product . id # => 292082188312
product . save () # => True
shopify . Product . exists ( product . id ) # => True
product = shopify . Product . find ( 292082188312 )
# Resource holding our newly created Product object
# Inspect attributes with product.attributes
product . price = 19.99
product . save () # => True
product . destroy ()
# Delete the resource from the remote server (i.e. Shopify)
這是使用某些參數檢索未結訂單清單的另一個範例:
new_orders = shopify . Order . find ( status = "open" , limit = "50" )
某些資源(例如Fulfillment
以 Shopify API 中的父資源為前綴(例如orders/450789469/fulfillments/255858046
)。為了與這些資源交互,您必須在請求中指定父資源的識別碼。
shopify . Fulfillment . find ( 255858046 , order_id = 450789469 )
該軟體包還包括shopify_api.py
腳本,可以輕鬆打開互動式控制台以在商店中使用 API。
shopify_api.py add yourshopname
shopify_api.py console
shopify_api.py help
該程式庫還支援 Shopify 的新 GraphQL API。身份驗證過程是相同的。啟動會話後,只需建立新的 graphql 用戶端並使用execute
來執行查詢。
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
您可以使用execute
的variables
和operation_name
參數執行更複雜的操作。
例如,此 GraphQL 文件使用片段建構兩個命名查詢 - 一個用於單一訂單,一個用於多個訂單:
# ./order_queries.graphql
fragment OrderInfo on Order {
id
name
createdAt
}
query GetOneOrder ( $order_id : ID ! ){
node ( id : $order_id ){
... OrderInfo
}
}
query GetManyOrders ( $order_ids : [ ID ] ! ){
nodes ( ids : $order_ids ){
... OrderInfo
}
}
現在您可以選擇要執行的動作:
# Load the document with both queries
document = Path ( "./order_queries.graphql" ). read_text ()
# Specify the named operation to execute, and the parameters for the query
result = shopify . GraphQL (). execute (
query = document ,
variables = { "order_id" : "gid://shopify/Order/12345" },
operation_name = "GetOneOrder" ,
)
python setup.py sdist
pip install --upgrade dist/ShopifyAPI- * .tar.gz
注意從來源樹執行時使用bin/shopify_api.py
腳本。它將把 lib 目錄新增到 sys.path 的開頭,因此不會使用已安裝的版本。
pip install setuptools --upgrade
python setup.py test
6.0.0 中新增了基於遊標的分頁支援。
import shopify
page1 = shopify . Product . find ()
if page1 . has_next_page ():
page2 = page1 . next_page ()
# to persist across requests you can use next_page_url and previous_page_url
next_url = page1 . next_page_url
page2 = shopify . Product . find ( from_ = next_url )
預提交設定為 GitHub 操作,該操作根據拉取請求運行並推送到main
分支。如果您想在本機上執行預先提交,請安裝它並設定 git hook 腳本
pip install -r requirements.txt
pre-commit install
目前不支援: