gztango / php-shoplazza
Shoplazza API 的 PHP SDK
Requires
- php: >=7.1
- ext-curl: *
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^5.5
README
PHPShoplazza 是 Shoplazza API 的简单 SDK 实现。它帮助以面向对象的方式访问 API。
安装
使用 Composer 安装
composer require gztango/php-shoplazza
要求
PHPShoplazza 使用 curl 扩展来处理 HTTP 请求。因此,您需要安装并启用 PHP 中的 curl 扩展。
然而,如果您更喜欢使用任何其他可用的包库来处理 HTTP 请求,您可以通过修改
PHPShoplazza\HttpRequestJson
类中的每个get()
、post()
、put()
、delete()
方法中的一行轻松做到这一点。
用法
您可以使用 PHPShoplazza 以非常简单的面向对象方式使用。
配置 ShoplazzaSDK
如果您正在使用自己的私有 API,请提供 ApiKey 和密码。
$config = array( 'ShopUrl' => 'yourshop.myshoplazza.com', 'ApiKey' => '***YOUR-PRIVATE-API-KEY***', 'Password' => '***YOUR-PRIVATE-API-PASSWORD***', ); PHPShoplazza\ShoplazzaSDK::config($config);
对于第三方应用,请使用永久访问令牌。
$config = array( 'ShopUrl' => 'yourshop.myshoplazza.com', 'AccessToken' => '***ACCESS-TOKEN-FOR-THIRD-PARTY-APP***', ); PHPShoplazza\ShoplazzaSDK::config($config);
如何获取商店的永久访问令牌?
有一个 AuthHelper 类可以帮助您通过 OAuth 从商店获取永久访问令牌。
- 首先,您需要使用 SharedSecret 参数配置 SDK。
$config = array( 'ShopUrl' => 'yourshop.myshoplazza.com', 'ApiKey' => '***YOUR-PRIVATE-API-KEY***', 'SharedSecret' => '***YOUR-SHARED-SECRET***', ); PHPShoplazza\ShoplazzaSDK::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'; \PHPShoplazza\AuthHelper::createAuthRequest($scopes, $redirectUrl);
如果您希望函数返回认证 URL 而不是自动重定向,可以将
$return
(第五个参数)设置为true
。
\PHPShoplazza\AuthHelper::createAuthRequest($scopes, $redirectUrl, null, null, true);
- 在应用授权后重定向回
$redirectUrl
时获取访问令牌。
//your_redirect_url.php PHPShoplazza\ShoplazzaSDK::config($config); $accessToken = \PHPShoplazza\AuthHelper::getAccessToken(); //Now store it in database or somewhere else
您可以使用同一页面创建请求和获取访问令牌(重定向 URL)。在这种情况下,只需在调用
createAuthRequest()
方法时跳过第二个参数$redirectUrl
。AuthHelper 类会为您完成剩下的工作。
//your_authorize_and_redirect_url.php PHPShoplazza\ShoplazzaSDK::config($config); $accessToken = \PHPShoplazza\AuthHelper::createAuthRequest($scopes); //Now store it in database or somewhere else
获取 ShoplazzaSDK 对象
$shoplazza = new PHPShoplazza\ShoplazzaSDK;
您可以在实例化对象时提供配置作为参数(如果您尚未通过调用 config()
方法进行配置)
$shoplazza = new PHPShoplazza\ShoplazzaSDK($config);
现在,您可以通过调用对象中的资源以面向对象的方式执行 get()
、post()
、put()
、delete()
。所有资源都命名为与 Shoplazza API 参考中相同的名称。(见下面的资源映射。)
如果请求成功,所有请求都返回一个数组(可以是一个单独的资源数组或多个资源的数组)。当不期望有结果时(例如 DELETE 请求),将返回一个空数组。
- 获取所有产品列表(GET 请求)
$products = $shoplazza->Product->get();
- 通过 ID 获取任何特定产品(GET 请求)
$productID = 23564666666; $product = $shoplazza->Product($productID)->get();
您也可以通过使用 URL 参数(由 Shoplazza API 参考为每个特定资源指定)来过滤结果。
- 例如,获取在指定日期和时间之后取消的订单列表(其中
fields
指定要渲染的每行的数据列)
$params = array( 'status' => 'cancelled', 'created_at_min' => '2016-06-25T16:15:47-04:00', 'fields' => 'id,line_items,name,total_price' ); $orders = $shoplazza->Order->get($params);
- 创建新订单(POST 请求)
$order = array ( "email" => "foo@example.com", "fulfillment_status" => "unfulfilled", "line_items" => [ [ "variant_id" => 27535413959, "quantity" => 5 ] ] ); $shoplazza->Order->post($order);
请注意,您不需要将数据数组包装在资源键(在这种情况下是
order
)中,这是 Shoplazza API 期望的语法。这由本 SDK 自动处理。
- 更新订单(PUT 请求)
$updateInfo = array ( "fulfillment_status" => "fulfilled", ); $shoplazza->Order($orderID)->put($updateInfo);
- 删除 Webhook(DELETE 请求)
$webHookID = 453487303; $shoplazza->Webhook($webHookID)->delete();
子资源可以以嵌套方式使用。
在尝试获取任何子资源时,您必须提供父资源的 ID
- 例如,获取产品的图片(GET 请求)
$productID = 23564666666; $productImages = $shoplazza->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; $shoplazza->Customer($customerID)->Address->post($address);
- 创建履行事件(POST 请求)
$fulfillmentEvent = array( "status" => "in_transit" ); $shoplazza->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>", ); $shoplazza->Blog($blogID)->Article($articleID)->put($updateArtilceInfo);
- 从特定博客中删除任何特定文章(DELETE请求)
$blogArticle = $shoplazza->Blog($blogID)->Article($articleID)->delete();
GraphQL v1.1
GraphQL Admin API是一个基于GraphQL的替代REST-based Admin API,它使得Shoplazza管理功能可以在单个GraphQL端点中可用。支持的全部类型可以在GraphQL Admin API参考中找到。您可以简单地调用GraphQL资源,并使用GraphQL字符串进行POST请求。
GraphQL Admin API在执行认证请求时需要访问令牌。您可以通过创建私有应用并使用该应用的API密码,或者通过遵循OAuth授权流程来获取访问令牌。请参阅GraphQL认证指南
$graphQL = <<<Query query { shop { name primaryDomain { url host } } } Query; $data = $shoplazza->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" ] ] $shoplazza->GraphQL->post($graphQL, null, null, $variables);
GraphQL构建器
此SDK仅接受GraphQL字符串作为输入。您可以从Shoplazza GraphQL构建器构建您的GraphQL。
资源映射
一些资源可以直接访问,一些资源只能通过父资源访问,而一些资源两种方式都可以访问。建议您查看每个资源的相关Shoplazza API参考页面中的详细信息。这里每个资源名称都链接到相关的Shoplazza API参考页面。
仅通过列出的资源映射使用资源。尝试直接获取仅通过父资源可用的资源可能会导致错误。
- AbandonedCheckout
- ApplicationCharge
- Blog
- Blog -> Article
- Blog -> Article -> Event
- Blog -> Article -> Metafield
- Blog -> Event
- Blog -> Metafield
- CarrierService
- 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 (仅Shoplazza Plus可用)
- DiscountCode
- Event
- FulfillmentService
- GiftCard (仅Shoplazza Plus可用)
- InventoryItem
- InventoryLevel
- 位置 (只读)
- 位置 -> 库存水平
- 元字段
- Multipass (仅Shoplazza Plus,API尚未提供)
- 订单
- 订单 -> 履行
- 订单 -> 履行 -> 事件
- 订单 -> 风险
- 订单 -> 退款
- 订单 -> 交易
- 订单 -> 事件
- 订单 -> 元字段
- 页面
- 页面 -> 事件
- 页面 -> 元字段
- 策略 (只读)
- 产品
- 产品 -> 图片
- 产品 -> 变体
- 产品 -> 变体 -> 元字段
- 产品 -> 事件
- 产品 -> 元字段
- 产品列表
- 产品变体
- 产品变体 -> 元字段
- 定期应用费用
- 定期应用费用 -> 使用费用
- 重定向
- 脚本标签
- 配送区域 (只读)
- 商店 (只读)
- 智能收藏
- 智能收藏 -> 事件
- Shoplazza支付
- Shoplazza支付 -> 争议 (只读)
- 主题
- 主题 -> 资产
- 用户 (只读,仅Shoplazza Plus)
- Webhook
- GraphQL
自定义操作
有几种操作方法可以在不直接调用 get()
、post()
、put()
、delete()
方法的情况下调用,但最终会导致对其中一种方法的自定义调用。
- 例如,获取产品总数
$productCount = $shoplazza->Product->count();
- 将地址设为客户的默认地址。
$shoplazza->Customer($customerID)->Address($addressID)->makeDefault();
- 搜索居住在“美国”的带有关键词“Bob”的客户。
$shoplazza->Customer->search("Bob country:United States");
自定义操作列表
自定义方法仅适用于某些资源,这些资源可能不适用于其他资源。建议您查看相关Shoplazza API参考页面中每个操作的详细信息。我们在这里仅列出可用的操作及其简要信息。每个操作名称都链接到Shoplazza 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() 获取当前登录用户
Shoplazza API 功能头
在使用SDK时发送 X-Shoplazza-Api-Features
头部,可以使用以下内容
$config['ShoplazzaApiFeatures'] = ['include-presentment-prices'];
$shoplazza = new PHPShoplazza\ShoplazzaSDK($config);
参考
付费支持
您可以雇佣此SDK的作者,以使用PHPShoplazza SDK设置您的项目。
支持者
通过每月捐款支持我们,帮助我们继续我们的活动。[成为支持者]
赞助商
成为赞助商,让您的标志出现在我们的Github README上,并附有链接到您的网站。[成为赞助商]