ไลบรารี Python ของ Shopify Admin API
คุณควรลงทะเบียนเป็นพันธมิตรบน Shopify Partners Dashboard เพื่อให้คุณสามารถสร้างและจัดการแอปพลิเคชัน Shopify ได้
หากต้องการติดตั้งหรืออัปเกรดเป็นรุ่นล่าสุดอย่างง่ายดาย ให้ใช้ pip
pip install --upgrade ShopifyAPI
ขั้นแรกให้สร้างแอปพลิเคชันใหม่ใน Partners Dashboard และดึงข้อมูลคีย์ API และคีย์ลับ API ของคุณ
จากนั้นเราจำเป็นต้องจัดหาคีย์เหล่านี้ให้กับ Shopify Session Class เพื่อให้รู้วิธีการตรวจสอบสิทธิ์
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
เมื่อผู้ค้ายอมรับ ร้านค้าจะเปลี่ยนเส้นทางเจ้าของไปที่ redirect_uri
ของแอปพลิเคชันของคุณด้วยพารามิเตอร์ชื่อ 'รหัส' นี่เป็นโทเค็นชั่วคราวที่แอปสามารถแลกเปลี่ยนเป็นโทเค็นการเข้าถึงแบบถาวรได้ คุณควรเปรียบเทียบสถานะที่คุณให้ไว้ข้างต้นกับสถานะที่คุณได้รับกลับมาเพื่อให้แน่ใจว่าคำขอนั้นถูกต้อง ตอนนี้เราสามารถแลกเปลี่ยนรหัสสำหรับ access_token เมื่อคุณได้รับคำขอจาก shopify ในตัวจัดการการติดต่อกลับของคุณ:
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 Merchant Admin คุณสามารถใช้รหัสผ่านแอปส่วนตัวเป็น 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
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
พร้อมด้วยพารามิเตอร์ charge_id
( หมายเหตุ: การดำเนินการนี้ไม่จำเป็นอีกต่อไป หากการเรียกเก็บเงินถูกสร้างขึ้นด้วย 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
แมปกับทรัพยากร RESTful ใน Shopify API
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
ไลบรารีนี้ยังรองรับ GraphQL API ใหม่ของ Shopify อีกด้วย กระบวนการรับรองความถูกต้องเหมือนกัน เมื่อเปิดใช้งานเซสชันของคุณแล้ว เพียงสร้างไคลเอนต์ Graphql ใหม่และใช้ execute
เพื่อดำเนินการค้นหา
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
คุณสามารถดำเนินการที่ซับซ้อนมากขึ้นได้โดยใช้ variables
และพารามิเตอร์ operation_name
ของ execute
ตัวอย่างเช่น เอกสาร 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
ขณะนี้ยังไม่มีการสนับสนุนสำหรับ: