La bibliothèque Python de l'API d'administration Shopify
Vous devez être inscrit en tant que partenaire sur le tableau de bord des partenaires Shopify afin de pouvoir créer et gérer des applications Shopify.
Pour installer ou mettre à niveau facilement vers la dernière version, utilisez pip.
pip install --upgrade ShopifyAPI
Créez d’abord une nouvelle application dans le tableau de bord des partenaires et récupérez votre clé API et votre clé secrète API.
Nous devons ensuite fournir ces clés à la classe de session Shopify afin qu'elle sache comment s'authentifier.
import shopify
shopify . Session . setup ( api_key = API_KEY , secret = API_SECRET )
Afin d'accéder aux données d'une boutique, les applications ont besoin d'un jeton d'accès de cette boutique spécifique. Nous devons nous authentifier auprès de cette boutique en utilisant OAuth, que nous pouvons démarrer de la manière suivante :
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
Une fois que le commerçant accepte, la boutique redirige le propriétaire vers le redirect_uri
de votre application avec un paramètre nommé 'code'. Il s'agit d'un jeton temporaire que l'application peut échanger contre un jeton d'accès permanent. Vous devez comparer l'état que vous avez fourni ci-dessus avec celui que vous avez reçu pour vous assurer que la demande est correcte. Nous pouvons désormais échanger le code contre un access_token lorsque vous recevez la demande de shopify dans votre gestionnaire de rappel :
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.
Vous êtes maintenant prêt à faire des requêtes API autorisées à votre boutique ! :
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 } }" )
Alternativement, vous pouvez utiliser temp pour initialiser une session et exécuter une commande :
with shopify . Session . temp ( shop_url , api_version , token ):
product = shopify . Product . find ()
Il est recommandé d'effacer votre session lorsque vous avez terminé. Une session temporaire le fait automatiquement :
shopify . ShopifyResource . clear_session ()
Les applications privées sont un peu plus rapides à utiliser car OAuth n'est pas nécessaire. Vous pouvez créer l'application privée dans l'administrateur marchand Shopify. Vous pouvez utiliser le mot de passe de l'application privée comme 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 } }" )
Remarque : Votre application doit être publique pour tester le processus de facturation. Pour tester sur une boutique de développement, utilisez le 'test': True
flag
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
avec le paramètre charge_id
( Remarque : cette action n'est plus nécessaire si le prélèvement est créé avec l'API version 2021-01 ou ultérieure ). charge = shopify . ApplicationCharge . find ( charge_id )
shopify . ApplicationCharge . activate ( charge )
activated_charge
est active
activated_charge = shopify . ApplicationCharge . find ( charge_id )
has_been_billed = activated_charge . status == 'active'
Il est recommandé d'avoir au moins une compréhension de base des principes de la bibliothèque pyactiveresource, qui est un portage de rails/ActiveResource vers Python et sur lequel ce package s'appuie fortement.
Les instances de ressources pyactiveresource
sont mappées aux ressources RESTful dans l'API Shopify.
pyactiveresource
expose des méthodes de cycle de vie pour créer, rechercher, mettre à jour et supprimer des ressources qui sont équivalentes aux verbes HTTP POST
, GET
, PUT
et DELETE
.
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)
Voici un autre exemple pour récupérer une liste de commandes ouvertes en utilisant certains paramètres :
new_orders = shopify . Order . find ( status = "open" , limit = "50" )
Certaines ressources telles que Fulfillment
sont préfixées par une ressource parent dans l'API Shopify (par exemple, orders/450789469/fulfillments/255858046
). Afin d'interagir avec ces ressources, vous devez préciser l'identifiant de la ressource parent dans votre requête.
shopify . Fulfillment . find ( 255858046 , order_id = 450789469 )
Ce package comprend également le script shopify_api.py
pour faciliter l'ouverture d'une console interactive pour utiliser l'API avec une boutique.
shopify_api.py add yourshopname
shopify_api.py console
shopify_api.py help
Cette bibliothèque prend également en charge la nouvelle API GraphQL de Shopify. Le processus d'authentification est identique. Une fois votre session activée, construisez simplement un nouveau client graphql et utilisez execute
pour exécuter la requête.
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
Vous pouvez effectuer des opérations plus complexes à l'aide des variables
et des paramètres operation_name
de execute
.
Par exemple, ce document GraphQL utilise un fragment pour construire deux requêtes nommées : une pour une seule commande et une pour plusieurs commandes :
# ./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
}
}
Vous pouvez maintenant choisir quelle opération exécuter :
# 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
Remarque Utilisez le script bin/shopify_api.py
lors de l'exécution à partir de l'arborescence source. Il ajoutera le répertoire lib au début de sys.path, donc la version installée ne sera pas utilisée.
pip install setuptools --upgrade
python setup.py test
La prise en charge de la pagination basée sur le curseur a été ajoutée dans la version 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 )
Le pré-commit est configuré comme une action GitHub qui s'exécute sur des demandes d'extraction et est transmise à la branche main
. Si vous souhaitez exécuter le pré-commit localement, installez-le et configurez les scripts git hook
pip install -r requirements.txt
pre-commit install
Actuellement, il n'existe aucune prise en charge pour :