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'
Rails/ActiveResource를 Python으로 포트하고 이 패키지가 크게 의존하는 pyactiveresource 라이브러리의 원리에 대해 최소한 기본적으로 이해하는 것이 좋습니다.
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 )
이 패키지에는 상점에서 API를 사용하기 위해 대화형 콘솔을 쉽게 열 수 있도록 shopify_api.py
스크립트도 포함되어 있습니다.
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
스크립트를 사용하십시오. sys.path 시작 부분에 lib 디렉토리가 추가되므로 설치된 버전은 사용되지 않습니다.
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 )
사전 커밋은 끌어오기 요청에 따라 실행되고 main
분기로 푸시되는 GitHub 작업으로 설정됩니다. 로컬에서 사전 커밋을 실행하려면 이를 설치하고 git Hook 스크립트를 설정하세요.
pip install -r requirements.txt
pre-commit install
현재 다음 항목은 지원되지 않습니다.