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
目前不支持: