Die Python-Bibliothek der Shopify Admin API
Sie sollten im Shopify-Partner-Dashboard als Partner registriert sein, damit Sie Shopify-Anwendungen erstellen und verwalten können.
Verwenden Sie pip, um die neueste Version einfach zu installieren oder darauf zu aktualisieren.
pip install --upgrade ShopifyAPI
Erstellen Sie zunächst eine neue Anwendung im Partner-Dashboard und rufen Sie Ihren API-Schlüssel und Ihren API-Geheimschlüssel ab.
Diese Schlüssel müssen wir dann der Shopify-Sitzungsklasse zur Verfügung stellen, damit diese weiß, wie sie sich authentifizieren muss.
import shopify
shopify . Session . setup ( api_key = API_KEY , secret = API_SECRET )
Um auf die Daten eines Shops zugreifen zu können, benötigen Apps einen Zugriffstoken des jeweiligen Shops. Wir müssen uns bei diesem Shop über OAuth authentifizieren, was wir wie folgt starten können:
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
Sobald der Händler akzeptiert, leitet der Shop den Besitzer mit einem Parameter namens „code“ an die redirect_uri
Ihrer Anwendung weiter. Dabei handelt es sich um einen temporären Token, den die App gegen einen permanenten Zugriffstoken eintauschen kann. Sie sollten den oben angegebenen Status mit dem Status vergleichen, den Sie zurückerhalten haben, um sicherzustellen, dass die Anfrage korrekt ist. Jetzt können wir den Code gegen ein access_token austauschen, wenn Sie die Anfrage von shopify in Ihrem Callback-Handler erhalten:
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.
Jetzt können Sie autorisierte API-Anfragen an Ihren Shop stellen!:
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 } }" )
Alternativ können Sie temp verwenden, um eine Sitzung zu initialisieren und einen Befehl auszuführen:
with shopify . Session . temp ( shop_url , api_version , token ):
product = shopify . Product . find ()
Es empfiehlt sich, die Sitzung zu löschen, wenn Sie fertig sind. Eine temporäre Sitzung erledigt dies automatisch:
shopify . ShopifyResource . clear_session ()
Private Apps sind etwas schneller zu verwenden, da OAuth nicht benötigt wird. Sie können die private App im Shopify Merchant Admin erstellen. Sie können das Private-App-Passwort als access_token
verwenden:
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 } }" )
Hinweis: Um den Abrechnungsprozess testen zu können, muss Ihre Anwendung öffentlich sein. Um in einem Entwicklungsshop zu testen, verwenden Sie das Flag '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
return_url
mit dem Parameter charge_id
weitergeleitet ( Hinweis: Diese Aktion ist nicht mehr erforderlich, wenn die Gebühr mit der API-Version 2021-01 oder höher erstellt wird ). charge = shopify . ApplicationCharge . find ( charge_id )
shopify . ApplicationCharge . activate ( charge )
activated_charge
active
ist activated_charge = shopify . ApplicationCharge . find ( charge_id )
has_been_billed = activated_charge . status == 'active'
Es wird empfohlen, zumindest ein grundlegendes Verständnis der Prinzipien der pyactiveresource-Bibliothek zu haben, die eine Portierung von Rails/ActiveResource auf Python ist und auf der dieses Paket stark basiert.
Instanzen von pyactiveresource
-Ressourcen werden RESTful-Ressourcen in der Shopify-API zugeordnet.
pyactiveresource
stellt Lebenszyklusmethoden zum Erstellen, Suchen, Aktualisieren und Löschen von Ressourcen bereit, die den HTTP-Verben POST
, GET
, PUT
und DELETE
entsprechen.
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)
Hier ist ein weiteres Beispiel zum Abrufen einer Liste offener Bestellungen mithilfe bestimmter Parameter:
new_orders = shopify . Order . find ( status = "open" , limit = "50" )
Einigen Ressourcen wie Fulfillment
wird eine übergeordnete Ressource in der Shopify-API vorangestellt (z. B. „ orders/450789469/fulfillments/255858046
). Um mit diesen Ressourcen interagieren zu können, müssen Sie in Ihrer Anfrage die Kennung der übergeordneten Ressource angeben.
shopify . Fulfillment . find ( 255858046 , order_id = 450789469 )
Dieses Paket enthält außerdem das Skript shopify_api.py
um das Öffnen einer interaktiven Konsole zur Verwendung der API mit einem Shop zu vereinfachen.
shopify_api.py add yourshopname
shopify_api.py console
shopify_api.py help
Diese Bibliothek unterstützt auch die neue GraphQL-API von Shopify. Der Authentifizierungsprozess ist identisch. Sobald Ihre Sitzung aktiviert ist, erstellen Sie einfach einen neuen Graphql-Client und verwenden Sie execute
um die Abfrage auszuführen.
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
Sie können komplexere Vorgänge mithilfe der variables
und operation_name
Parameter execute
ausführen.
Dieses GraphQL-Dokument verwendet beispielsweise ein Fragment, um zwei benannte Abfragen zu erstellen – eine für eine einzelne Bestellung und eine für mehrere Bestellungen:
# ./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
}
}
Jetzt können Sie auswählen, welche Operation ausgeführt werden soll:
# 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
Hinweis Verwenden Sie das Skript bin/shopify_api.py
wenn Sie es im Quellbaum ausführen. Das lib-Verzeichnis wird am Anfang von sys.path hinzugefügt, sodass die installierte Version nicht verwendet wird.
pip install setuptools --upgrade
python setup.py test
Cursorbasierte Paginierungsunterstützung wurde in 6.0.0 hinzugefügt.
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 )
Pre-Commit ist als GitHub-Aktion eingerichtet, die auf Pull-Requests ausgeführt und an den main
gepusht wird. Wenn Sie Pre-Commit lokal ausführen möchten, installieren Sie es und richten Sie die Git-Hook-Skripte ein
pip install -r requirements.txt
pre-commit install
Derzeit gibt es keine Unterstützung für: