php-libraries / php-shopify
Shopify API 的 PHP SDK
Requires
- php: >=5.6
- ext-curl: *
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^5.5
This package is auto-updated.
Last update: 2024-09-12 12:16:10 UTC
README
PHPShopify 是 Shopify API 的一种简单 SDK 实现。它帮助以面向对象的方式访问 API。
安装
使用 Composer 安装
composer require phpclassic/php-shopify
要求
PHPShopify 使用 curl 扩展来处理 HTTP 调用。因此,您需要安装并启用 curl 扩展以与 PHP 一起使用。
然而,如果您更喜欢使用其他可用的包库来处理 HTTP 调用,您可以通过修改
PHPShopify\HttpRequestJson
类中的get()
、post()
、put()
、delete()
方法中的 1 行来实现。
使用方法
您可以使用 PHPShopify 以一种简单面向对象的方式。
配置 ShopifySDK
如果您正在使用自己的私有 API,请提供 ApiKey 和密码。
$config = array( 'ShopUrl' => 'yourshop.myshopify.com', 'ApiKey' => '***YOUR-PRIVATE-API-KEY***', 'Password' => '***YOUR-PRIVATE-API-PASSWORD***', ); PHPShopify\ShopifySDK::config($config);
对于第三方应用程序,请使用永久访问令牌。
$config = array( 'ShopUrl' => 'yourshop.myshopify.com', 'AccessToken' => '***ACCESS-TOKEN-FOR-THIRD-PARTY-APP***', ); PHPShopify\ShopifySDK::config($config);
如何获取商店的永久访问令牌?
有一个 AuthHelper 类可以帮助您通过 oAuth 从商店获取永久访问令牌。
- 首先,您需要使用 SharedSecret 参数配置 SDK。
$config = array( 'ShopUrl' => 'yourshop.myshopify.com', 'ApiKey' => '***YOUR-PRIVATE-API-KEY***', 'SharedSecret' => '***YOUR-SHARED-SECRET***', ); PHPShopify\ShopifySDK::config($config);
- 创建身份验证请求
重定向 URL 必须在您的应用程序管理员中列入白名单,作为 应用程序重定向 URL 之一。
//your_authorize_url.php $scopes = 'read_products,write_products,read_script_tags,write_script_tags'; //This is also valid //$scopes = array('read_products','write_products','read_script_tags', 'write_script_tags'); $redirectUrl = 'https://yourappurl.com/your_redirect_url.php'; \PHPShopify\AuthHelper::createAuthRequest($scopes, $redirectUrl);
如果您希望函数返回身份验证 URL 而不是自动重定向,可以将参数
$return
(第 5 个参数)设置为true
。
\PHPShopify\AuthHelper::createAuthRequest($scopes, $redirectUrl, null, null, true);
- 在应用程序授权后重定向到
$redirectUrl
时获取访问令牌。
//your_redirect_url.php PHPShopify\ShopifySDK::config($config); $accessToken = \PHPShopify\AuthHelper::getAccessToken(); //Now store it in database or somewhere else
您可以使用同一页面来创建请求和获取访问令牌(重定向 URL)。在这种情况下,只需在调用
createAuthRequest()
方法时跳过第二个参数$redirectUrl
。AuthHelper 类将为您完成剩余的操作。
//your_authorize_and_redirect_url.php PHPShopify\ShopifySDK::config($config); $accessToken = \PHPShopify\AuthHelper::createAuthRequest($scopes); //Now store it in database or somewhere else
获取 ShopifySDK 对象
$shopify = new PHPShopify\ShopifySDK;
您可以在实例化对象时提供配置作为参数(如果尚未通过调用 config()
方法进行配置)
$shopify = new PHPShopify\ShopifySDK($config);
现在您可以通过调用对象的资源以面向对象的方式进行 get()
、post()
、put()
、delete()
。所有资源都命名为与 Shopify API 参考中相同的名称。(请参阅下面的资源映射。)
如果成功,所有请求都返回一个数组(可以是单个资源数组或多个资源的数组)。当不期望结果时(例如 DELETE 请求),将返回一个空数组。
- 获取所有产品列表(GET 请求)
$products = $shopify->Product->get();
- 通过 ID 获取任何特定产品(GET 请求)
$productID = 23564666666; $product = $shopify->Product($productID)->get();
您也可以通过使用 URL 参数(如 Shopify API 参考中为每个特定资源指定的)来过滤结果。
- 例如,获取指定日期和时间之后的已取消订单列表(
fields
指定了每行要渲染的数据列)
$params = array( 'status' => 'cancelled', 'created_at_min' => '2016-06-25T16:15:47-04:00', 'fields' => 'id,line_items,name,total_price' ); $orders = $shopify->Order->get($params);
- 创建新订单(POST 请求)
$order = array ( "email" => "foo@example.com", "fulfillment_status" => "unfulfilled", "line_items" => [ [ "variant_id" => 27535413959, "quantity" => 5 ] ] ); $shopify->Order->post($order);
请注意,您不需要将数据数组包裹在资源键(在这种情况下为
order
)中,这是 Shopify API 期望的语法。这将由 SDK 自动处理。
- 更新订单(PUT 请求)
$updateInfo = array ( "fulfillment_status" => "fulfilled", ); $shopify->Order($orderID)->put($updateInfo);
- 删除 Webhook(DELETE 请求)
$webHookID = 453487303; $shopify->Webhook($webHookID)->delete();
子资源可以以嵌套方式使用。
在尝试获取任何子资源时,您必须提供父资源的 ID
- 例如,获取产品的图像(GET 请求)
$productID = 23564666666; $productImages = $shopify->Product($productID)->Image->get();
- 为顾客添加新地址(POST 请求)
$address = array( "address1" => "129 Oak St", "city" => "Ottawa", "province" => "ON", "phone" => "555-1212", "zip" => "123 ABC", "last_name" => "Lastnameson", "first_name" => "Mother", "country" => "CA", ); $customerID = 4425749127; $shopify->Customer($customerID)->Address->post($address);
- 创建履约事件(POST 请求)
$fulfillmentEvent = array( "status" => "in_transit" ); $shopify->Order($orderID)->Fulfillment($fulfillmentID)->Event->post($fulfillmentEvent);
- 更新博客文章(PUT 请求)
$blogID = 23564666666; $articleID = 125336666; $updateArtilceInfo = array( "title" => "My new Title", "author" => "Your name", "tags" => "Tags, Will Be, Updated", "body_html" => "<p>Look, I can even update through a web service.<\/p>", ); $shopify->Blog($blogID)->Article($articleID)->put($updateArtilceInfo);
- 从特定博客中删除任何特定文章(DELETE 请求)
$blogArticle = $shopify->Blog($blogID)->Article($articleID)->delete();
GraphQL v1.1
GraphQL 管理员 API 是一个基于 GraphQL 的替代 REST 管理员 API,它使 Shopify 管理员的功能可通过单个 GraphQL 端点可用。支持的完整类型集合可以在GraphQL 管理员 API 参考文档中找到。您只需调用 GraphQL 资源,并以 GraphQL 字符串的形式进行 POST 请求。
GraphQL 管理员 API 需要访问令牌才能进行身份验证请求。您可以通过创建私有应用程序并使用该应用程序的 API 密码,或者通过遵循 OAuth 授权流程来获取访问令牌。请参阅GraphQL 身份验证指南
$graphQL = <<<Query query { shop { name primaryDomain { url host } } } Query; $data = $shopify->GraphQL->post($graphQL);
变量
如果您想使用GraphQL 变量,则需要将变量放入一个数组中,并将其作为 post()
方法的第 4 个参数提供。第 2 和第 3 个参数在 GraphQL 中没有任何用途,但为了与其他请求保持相似性,您可以保留它们为 null
。以下是一个示例:
$graphQL = <<<Query mutation ($input: CustomerInput!) { customerCreate(input: $input) { customer { id displayName } userErrors { field message } } } Query; $variables = [ "input" => [ "firstName" => "Greg", "lastName" => "Variables", "email" => "gregvariables@teleworm.us" ] ] $shopify->GraphQL->post($graphQL, null, null, $variables);
GraphQL 构建器
此 SDK 只接受 GraphQL 字符串作为输入。您可以从Shopify GraphQL 构建器构建您的 GraphQL。
资源映射
某些资源可以直接访问,某些资源仅通过父资源访问,少数资源两种方式都可以访问。建议您查看相关 Shopify API 参考页面中每个资源的详细信息。这里列出的每个资源名称都链接到相关的 Shopify API 参考页面。
请仅通过列表的资源映射使用资源。尝试直接获取仅通过父资源可用的资源可能会导致错误。
- AbandonedCheckout
- ApplicationCharge
- Blog
- Blog -> Article
- Blog -> Article -> Event
- Blog -> Article -> Metafield
- Blog -> Event
- Blog -> Metafield
- CarrierService-
- Cart(只读)
- Collect
- Comment
- Comment -> Event
- Country
- Country -> Province
- Currency
- CustomCollection
- CustomCollection -> Event
- CustomCollection -> Metafield
- Customer
- Customer -> Address
- Customer -> Metafield
- Customer -> Order
- CustomerSavedSearch
- CustomerSavedSearch -> Customer
- DraftOrder
- Discount (仅 Shopify Plus)
- DiscountCode
- Event
- 履约服务
- 礼品卡 (仅限 Shopify Plus)
- 库存项目
- 库存水平
- 位置 (只读)
- 位置 -> 库存水平
- 元字段
- Multipass (仅限 Shopify Plus,API 尚未可用)
- 订单
- 订单 -> 履约
- 订单 -> 履约 -> 事件
- 订单 -> 风险
- 订单 -> 退款
- 订单 -> 交易
- 订单 -> 事件
- 订单 -> 元字段
- 页面
- 页面 -> 事件
- 页面 -> 元字段
- 策略 (只读)
- 产品
- 产品 -> 图片
- 产品 -> 变体
- 产品 -> 变体 -> 元字段
- 产品 -> 事件
- 产品 -> 元字段
- 产品列表
- 产品变体
- 产品变体 -> 元字段
- 周期性应用费用
- 周期性应用费用 -> 使用费用
- 重定向
- 脚本标签
- 配送区域 (只读)
- 商店 (只读)
- 智能收藏
- 智能收藏 -> 事件
- Shopify支付
- Shopify支付 -> 争议 (只读)
- 主题
- 主题 -> 资产
- 用户 (只读,仅限 Shopify Plus)
- Webhook
- GraphQL
自定义操作
存在几种操作方法,可以在不直接调用 get()
、post()
、put()
、delete()
方法的情况下调用,但最终会调用这些方法之一的自定义调用。
- 例如,获取总产品数量
$productCount = $shopify->Product->count();
- 为客户设置默认地址。
$shopify->Customer($customerID)->Address($addressID)->makeDefault();
- 搜索居住在美国的国家,关键字为 "Bob" 的客户。
$shopify->Customer->search("Bob country:United States");
自定义操作列表
自定义方法仅适用于某些资源,可能不适用于其他资源。建议您查看相关 Shopify API 参考页面中关于每个操作的详细信息。我们在此仅列出可用的操作,并提供一些简要信息。每个操作名称都链接到 Shopify API 参考中的示例,其中包含更多详细信息。
-
(除以下资源类型之外的任何资源类型:ApplicationCharge、CarrierService、FulfillmentService、Location、Policy、RecurringApplicationCharge、ShippingZone、Shop、Theme) ->
- count() 获取所有资源的数量。与其他所有操作不同,此函数返回一个整数值。
-
注释 ->
- markSpam() 将评论标记为垃圾邮件
- markNotSpam() 将评论标记为非垃圾邮件
- approve() 审批评论
- remove() 删除评论
- restore() 恢复评论
-
客户 ->
- search() 搜索与提供的查询匹配的客户
- send_invite($data) 向客户发送账户邀请。
-
客户 -> 地址 ->
- makeDefault() 将地址设置为客户的默认地址
- set($params) 对多个地址执行批量操作
-
草稿订单 ->
- send_invoice($data) 发送草稿订单的发票
- complete($data) 完成草稿订单
-
折扣 ->
-
折扣代码 ->
- lookup($data) 检索折扣代码的位置。
-
履行 ->
- complete() 完成履行
- open() 打开挂起的履行
- cancel() 取消履行
-
礼品卡 ->
-
库存水平 ->
- adjust($data) 调整库存水平。
- connect($data) 将库存项目与位置连接。
- set($data) 在位置内为单个库存项目设置库存水平。
-
订单 ->
- close() 关闭订单
- open() 重新打开已关闭的订单
- cancel($data) 取消订单
-
订单 -> 退款 ->
- calculate() 计算退款。
-
产品列表 ->
- productIds() 获取已发布到您应用的product_ids。
-
定期应用程序费用 ->
- activate() 激活定期应用程序费用
- customize($data) 定制周期性应用费用
-
智能收藏夹 ->
- sortOrder($params) 设置智能收藏夹中产品的排序类型和/或手动排序
-
用户 ->
- current() 获取当前登录用户
Shopify API 功能头
在使用 SDK 时发送 X-Shopify-Api-Features
头部,可以使用以下方法
$config['ShopifyApiFeatures'] = ['include-presentment-prices'];
$shopify = new PHPShopify\ShopifySDK($config);
参考
付费支持
您可以为使用 PHPShopify SDK 设置您的项目聘请此 SDK 的作者。
支持者
通过每月捐款支持我们,帮助我们继续我们的活动。[成为支持者]
赞助商
成为赞助商,让您的标志出现在我们的 Github README 上,并提供链接到您的网站。[成为赞助商]