La biblioteca Python de la API de administración de Shopify
Debes estar registrado como socio en el Panel de Shopify Partners para poder crear y administrar aplicaciones de Shopify.
Para instalar o actualizar fácilmente a la última versión, utilice pip.
pip install --upgrade ShopifyAPI
Primero cree una nueva aplicación en el Panel de socios y recupere su clave API y su clave secreta API.
Luego debemos proporcionar estas claves a Shopify Session Class para que sepa cómo autenticarse.
import shopify
shopify . Session . setup ( api_key = API_KEY , secret = API_SECRET )
Para acceder a los datos de una tienda, las aplicaciones necesitan un token de acceso de esa tienda específica. Necesitamos autenticarnos en esa tienda usando OAuth, lo cual podemos iniciar de la siguiente manera:
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
Una vez que el comerciante acepta, la tienda redirige al propietario al redirect_uri
de su aplicación con un parámetro llamado "código". Este es un token temporal que la aplicación puede intercambiar por un token de acceso permanente. Debe comparar el estado que proporcionó anteriormente con el que recibió para asegurarse de que la solicitud sea correcta. Ahora podemos intercambiar el código por un token de acceso cuando recibas la solicitud de Shopify en tu controlador de devolución de llamada:
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.
¡Ahora está listo para realizar solicitudes API autorizadas a su tienda!:
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 } }" )
Alternativamente, puedes usar temp para inicializar una sesión y ejecutar un comando:
with shopify . Session . temp ( shop_url , api_version , token ):
product = shopify . Product . find ()
Lo mejor es borrar la sesión cuando haya terminado. Una sesión temporal hace esto automáticamente:
shopify . ShopifyResource . clear_session ()
Las aplicaciones privadas son un poco más rápidas de usar porque no se necesita OAuth. Puedes crear la aplicación privada en Shopify Merchant Admin. Puedes utilizar la contraseña de la aplicación privada como tu 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 } }" )
Nota: Su aplicación debe ser pública para probar el proceso de facturación. Para probar en una tienda de desarrollo utilice la '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
con el parámetro charge_id
( Nota: esta acción ya no es necesaria si el cargo se crea con la versión API 2021-01 o posterior ). 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'
Se recomienda tener al menos una comprensión básica de los principios de la biblioteca pyactiveresource, que es una adaptación de Rails/ActiveResource a Python y de la que depende en gran medida este paquete.
Las instancias de recursos pyactiveresource
se asignan a recursos RESTful en la API de Shopify.
pyactiveresource
expone métodos de ciclo de vida para crear, buscar, actualizar y eliminar recursos que son equivalentes a los verbos HTTP POST
, GET
, PUT
y 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)
Aquí hay otro ejemplo para recuperar una lista de órdenes abiertas usando ciertos parámetros:
new_orders = shopify . Order . find ( status = "open" , limit = "50" )
Algunos recursos, como Fulfillment
tienen el prefijo de un recurso principal en la API de Shopify (por ejemplo orders/450789469/fulfillments/255858046
). Para interactuar con estos recursos, debe especificar el identificador del recurso principal en su solicitud.
shopify . Fulfillment . find ( 255858046 , order_id = 450789469 )
Este paquete también incluye el script shopify_api.py
para facilitar la apertura de una consola interactiva para usar la API con una tienda.
shopify_api.py add yourshopname
shopify_api.py console
shopify_api.py help
Esta biblioteca también es compatible con la nueva API GraphQL de Shopify. El proceso de autenticación es idéntico. Una vez activada su sesión, simplemente construya un nuevo cliente Graphql y use execute
para ejecutar la consulta.
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
Puede realizar operaciones más complejas utilizando las variables
y los parámetros operation_name
de execute
.
Por ejemplo, este documento GraphQL utiliza un fragmento para construir dos consultas con nombre: una para un solo pedido y otra para varios pedidos:
# ./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
}
}
Ahora puedes elegir qué operación ejecutar:
# 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
Nota Utilice el script bin/shopify_api.py
cuando lo ejecute desde el árbol de fuentes. Agregará el directorio lib al inicio de sys.path, por lo que no se utilizará la versión instalada.
pip install setuptools --upgrade
python setup.py test
Se agregó compatibilidad con la paginación basada en cursor en 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 )
La confirmación previa se configura como una acción de GitHub que se ejecuta en solicitudes de extracción y se envía a la rama main
. Si desea ejecutar la confirmación previa localmente, instálela y configure los scripts de git hook
pip install -r requirements.txt
pre-commit install
Actualmente no hay soporte para: