concretecms-community-store / community_store_api
为 ConcreteCMS 社区商店提供 RESTful API
This package is auto-updated.
Last update: 2024-09-19 09:10:21 UTC
README
一个 Concrete CMS 扩展,为社区商店数据提供 RESTful API,返回和接收 JSON 数据。
当前功能
- 获取订单列表和单个订单详情
- 更新订单的履行状态
- 获取产品列表和单个产品
- 通过产品 ID 或 SKU 更新产品和变体的库存水平
- 获取履行状态
此功能未来可能会扩展。
设置
安装后,社区商店 API 通过 concrete5 的内置 API 访问,该 API 使用 OAuth2 进行身份验证。要配置集成
- 请访问 concrete5 控制面板,系统 & 设置 -> API
- 如果尚未启用,请通过复选框启用 API,并确保在 启用授权类型 下选中 客户端凭据
- 通过 添加集成 按钮
- 为集成提供一个合适的名称,例如 'Community Store API'
- 记录生成的 客户端 ID 和 客户端密钥 值
缺少授权头
当使用 Apache 和 CGI/FastCGI 运行 concrete5 时,授权头可能不会传递给 PHP,导致出现 '缺少授权头' 错误消息。在 .htaccess 文件中添加以下行可以纠正此问题
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
与 PHP 一起使用
如果您需要通过 PHP 访问社区商店 API,您可能会发现 此项目 有用。
通用用法
通过 concrete5 控制面板创建集成后,可以使用客户端 ID 和客户端密钥生成访问令牌,然后使用这些令牌访问 API。
通过向 URL 发送 POST 请求来请求访问令牌:/oauth/2.0/token
,在正文中发送
- grant_type: "client_credentials"
- scope: "cs:orders:read cs:products:write cs:products:read cs:products:write cs:config:read"
- client_id
- client_secret
传递的权限可以减少到只包含集成所需的权限。
JSON 响应将包含一个 access_token
值。访问令牌通常有效期为 1 小时。
然后可以使用访问令牌执行对 API 的请求,并将其作为授权头发送。授权头需要以 'Bearer ' 开头。
响应遵循典型的 RESTful 风格 HTTP 响应代码,例如 404 表示未找到记录,200 表示找到记录,等等,以及错误消息。
订单相关端点
GET /cs/api/v1/orders
获取分页订单
- 所需权限:cs:orders:read
- 示例响应
{
"data": [
{
"id": 3,
"date_placed": {
"date": "2020-10-06 12:12:37.000000",
"timezone": "America/Phoenix"
},
"total": 100.50,
"payment_method": "Invoice",
"payment_date": null,
"payment_reference": null,
"shipping_method": "",
"fulfilment": {
"status": "Delivered",
"handle": "Delivered",
"tracking_id": '123',
"tracking_code": 'ABC1234',
"tracking_url": null
},
"locale": "en_US",
"customer": {
"email": "test@test.com,
"username": null,
"billing": {
"phone": "123123123",
"first_name": "Joe",
"last_name": "Smith",
"company": "ABC Company",
"address": {
"address1": "123 Street",
"address2": "",
"address3": null,
"city": "Phoenix",
"state_province": "AZ",
"country": "US",
"postal_code": "55555"
}
},
"shipping": {
"first_name": "Joe",
"last_name": "Smith",
"company": "ABC Company",
"address": {
"address1": "123 Street",
"address2": "",
"address3": null,
"city": "Phoenix",
"state_province": "AZ",
"country": "US",
"postal_code": "55555"
}
}
},
"items": [
{
"id": 123,
"name": "Example Product",
"sku": "ABCD",
"quantity": 1,
"price": 100.50
}
]
}
// ... addition 19 orders would be included here
],
"meta": {
"pagination": {
"total": 25,
"count": 20,
"per_page": 20,
"current_page": 1,
"total_pages": 2,
"links": {
"next": "http://concrete5.test/cs/api/v1/orders?page=2"
}
}
}
}
分页订单
订单按最近创建的顺序返回,这与订单 ID 的降序排列相同。
订单已分页显示,每次返回20条订单。注意响应中存在一个meta
-> pagination
部分,其中包含表示分页位置的值。分页数据中的links
包括适用时的前一页和下一页URL,用于导航订单页面。当没有返回next
值时,表示没有更多页面。在API调用中,使用GET属性page
来选择返回哪一页。
过滤订单
您可以使用查询字符串参数来过滤结果。以下是接受的查询字符串参数列表
status
:订单的状态(预定义状态包括incomplete
、processing
、shipped
、delivered
、nodelivery
和returned
)paymentStatus
:订单支付的状态(paid
、unpaid
、cancelled
、refunded
或incomplete
)fromDate
:订单的初始日期(格式:YYYY-MM-DD)toDate
:订单的最终日期(格式:YYYY-MM-DD)paid
:对于未支付或已退款的订单设置为0,对于已支付且未退款的订单设置为1cancelled
:设置为0以排除已取消的订单,设置为1以仅检索已取消的订单refunded
:设置为0以排除已退款的订单,设置为1以仅检索已退款的订单shippable
:设置为0以排除可发货的订单,设置为1以仅检索可发货的订单id
:订单ID。您还可以使用数组查询多个ID(例如:orders?id[]=1&id[]=2
)(需要社区商店以及这个请求)
GET /cs/api/v1/orders/oID
获取订单
- 所需权限:cs:orders:read
- URL参数:oID = 订单ID
- 响应:在
data
值中代表单个订单的JSON
PATCH /cs/api/v1/orders/oID
更新单个订单的履行细节
- 必需的作用域:'cs:orders:write
- 可更新字段:tracking_id、tracking_code、tracking_url、handle
- 期望原始正文:JSON数据,例如
{
"data":
{
"fulfilment": {
"handle": "shipped",
"tracking_id": "123123123",
"tracking_code": "AAABBCCC",
"tracking_url": "https://trackmyparcel.com"
}
}
}
- 响应:在更新执行后,在
data
值中代表单个订单的JSON
GET /cs/api/v1/fulfilmentstatuses
获取所有履行状态
- 所需权限:cs:orders:read
- 示例响应
{
"data": [
{
"id": "1",
"handle": "incomplete",
"name": "Awaiting Processing"
},
{
"id": "2",
"handle": "processing",
"name": "Processing"
},
{
"id": "3",
"handle": "shipped",
"name": "Shipped"
},
{
"id": "4",
"handle": "delivered",
"name": "Delivered"
},
{
"id": "5",
"handle": "nodelivery",
"name": "Will not deliver"
},
{
"id": "6",
"handle": "returned",
"name": "Returned"
}
]
}
与产品相关的端点
GET /cs/api/v1/products
获取所有产品
- 必需的作用域:cs:products:read
- 响应:在
data
值中代表产品的JSON数组
分页产品
产品以最近添加的产品为优先返回。
产品已分页显示,每次返回20个产品。注意响应中存在一个meta
-> pagination
部分,其中包含表示分页位置的值。分页数据中的links
包括适用时的前一页和下一页URL,用于导航产品页面。当没有返回next
值时,表示没有更多页面。在API调用中,使用GET属性page
来选择返回哪一页。
过滤产品
可以通过使用filter
参数过滤产品,格式如下:?filter=date_added gt '2021-01-01T20:00'
。目前,可以过滤date_added
和date_updated
字段,使用gt、lt和eq比较。
GET /cs/api/v1/products/pID
获取产品
- 必需的作用域:cs:products:read
- URL参数:pID = 产品ID
- 响应:在
data
值中代表单个产品的JSON - 示例响应
{
"data": {
"id": 123,
"name": "Example Product",
"sku": "ABCD",
"barcode": "",
"active": true,
"stock_unlimited": false,
"stock_level": 10,
"short_description": "Short description HTML",
"description": "Extended description HTML",
"brand": null,
"price": 100.50,
"primary_image": "https://domain.com/product.jpg",
"additional_images": [
"https://domain.com/product2.jpg"
],
"groups": [
"Product Group 1"
],
"categories": [
{
"name": "Product Category 1",
"url": "https://domain.com/category1"
}
],
"variations": [],
"date_added": {
"date": "2020-10-05 15:41:00.000000",
"timezone": "America/Phoenix"
},
"date_updated": {
"date": "2020-10-05 15:41:00.000000",
"timezone": "America/Phoenix"
}
}
}
PATCH /cs/api/v1/products/pID
更新产品
- 可更新字段:stock_unlimited(布尔值)、stock_level(浮点数)
- 必需的作用域:cs:products:write
- URL参数:pID = 产品ID
- 期望原始正文:JSON数据,例如
{
"data":
{
"stock_level": 5,
"stock_unlimited": true
}
}
- 响应:在更新执行后,在
data
值中代表单个产品的JSON
GET /cs/api/v1/skus/sku
通过SKU获取产品或变体的库存水平
- 必需的作用域:cs:products:read
- URL参数:sku = 产品或变体的SKU
PATCH /cs/api/v1/skus/sku
通过SKU更新产品或变体的库存水平
- 可更新字段:stock_unlimited(布尔值)、stock_level(浮点数)
- 必需的作用域:cs:products:write
- URL参数:sku = 产品或变体的SKU
- 期望原始正文:JSON数据,例如
{
"data":
{
"stock_level": 5,
"stock_unlimited": true
}
}
其他端点
GET /cs/api/v1/config
获取一些社区商店配置值
- 必需的作用域:cs:config:read
- 响应:JSON对象,其键是配置键,值是它们的值
- 示例响应
{ "currency": { "code": "EUR", "symbol": "€", "decimal_digits": 2 } }