A biblioteca Python da API Admin da Shopify
Você deve estar inscrito como parceiro no Painel de Parceiros da Shopify para poder criar e gerenciar aplicativos da Shopify.
Para instalar ou atualizar facilmente para a versão mais recente, use pip.
pip install --upgrade ShopifyAPI
Primeiro, crie um novo aplicativo no Painel de Parceiros e recupere sua chave de API e sua chave secreta de API.
Em seguida, precisamos fornecer essas chaves para a classe de sessão do Shopify para que ela saiba como autenticar.
import shopify
shopify . Session . setup ( api_key = API_KEY , secret = API_SECRET )
Para acessar os dados de uma loja, os aplicativos precisam de um token de acesso dessa loja específica. Precisamos nos autenticar nessa loja usando OAuth, o que podemos iniciar da seguinte maneira:
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
Depois que o comerciante aceita, a loja redireciona o proprietário para o redirect_uri
do seu aplicativo com um parâmetro chamado 'code'. Este é um token temporário que o aplicativo pode trocar por um token de acesso permanente. Você deve comparar o estado fornecido acima com o que recebeu de volta para garantir que a solicitação está correta. Agora podemos trocar o código por um access_token quando você receber a solicitação do shopify em seu manipulador de retorno de chamada:
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.
Agora você está pronto para fazer solicitações de API autorizadas para sua loja!:
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, você pode usar temp para inicializar uma sessão e executar um comando:
with shopify . Session . temp ( shop_url , api_version , token ):
product = shopify . Product . find ()
É uma prática recomendada limpar sua sessão quando terminar. Uma sessão temporária faz isso automaticamente:
shopify . ShopifyResource . clear_session ()
Os aplicativos privados são um pouco mais rápidos de usar porque o OAuth não é necessário. Você pode criar o aplicativo privado no Shopify Merchant Admin. Você pode usar a senha do aplicativo privado como seu 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 } }" )
Observação: seu aplicativo deve ser público para testar o processo de cobrança. Para testar em uma loja de desenvolvimento use o sinalizador '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
com parâmetro charge_id
( Nota: Esta ação não é mais necessária se a cobrança for criada com API versão 2021-01 ou 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'
Recomenda-se ter pelo menos um conhecimento básico dos princípios da biblioteca pyactiveresource, que é uma porta do rails/ActiveResource para Python e da qual este pacote depende fortemente.
Instâncias de recursos pyactiveresource
são mapeadas para recursos RESTful na API da Shopify.
pyactiveresource
expõe métodos de ciclo de vida para criar, localizar, atualizar e excluir recursos que são equivalentes aos verbos HTTP POST
, GET
, PUT
e 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)
Aqui está outro exemplo para recuperar uma lista de pedidos abertos usando determinados parâmetros:
new_orders = shopify . Order . find ( status = "open" , limit = "50" )
Alguns recursos, como Fulfillment
são prefixados por um recurso pai na API da Shopify (por exemplo, orders/450789469/fulfillments/255858046
). Para interagir com esses recursos, você deve especificar o identificador do recurso pai na sua solicitação.
shopify . Fulfillment . find ( 255858046 , order_id = 450789469 )
Este pacote também inclui o script shopify_api.py
para facilitar a abertura de um console interativo para usar a API com uma loja.
shopify_api.py add yourshopname
shopify_api.py console
shopify_api.py help
Esta biblioteca também oferece suporte à nova API GraphQL do Shopify. O processo de autenticação é idêntico. Assim que sua sessão for ativada, simplesmente construa um novo cliente graphql e use execute
para executar a consulta.
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
Você pode executar operações mais complexas usando as variables
e os parâmetros operation_name
de execute
.
Por exemplo, este documento GraphQL usa um fragmento para construir duas consultas nomeadas - uma para um único pedido e outra para vários 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
}
}
Agora você pode escolher qual operação executar:
# 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 Use o script bin/shopify_api.py
ao executar a partir da árvore de origem. Ele adicionará o diretório lib ao início do sys.path, para que a versão instalada não seja usada.
pip install setuptools --upgrade
python setup.py test
O suporte à paginação baseada em cursor foi adicionado na versão 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 )
A pré-confirmação é configurada como uma ação do GitHub que é executada em solicitações pull e enviadas para o branch main
. Se você deseja executar o pré-commit localmente, instale-o e configure os scripts git hook
pip install -r requirements.txt
pre-commit install
Atualmente não há suporte para: