ce-orders
4
总安装量
4
周安装量
#48930
全站排名
安装命令
npx skills add https://github.com/commercengine/skills --skill ce-orders
Agent 安装分布
opencode
4
claude-code
4
github-copilot
4
codex
4
kimi-cli
4
gemini-cli
4
Skill 文档
Order Management
Prerequisite: Order creation requires a cart with items and addresses. See
cart-checkout/.
Quick Reference
| Task | SDK Method |
|---|---|
| Create order | sdk.order.createOrder({ cart_id, payment_method? }) |
| List orders | sdk.order.listOrders({ page, limit }) |
| Get order detail | sdk.order.getOrderDetails({ order_number }) |
| Get shipments | sdk.order.listOrderShipments({ order_number }) |
| Get payments | sdk.order.listOrderPayments({ order_number }) |
| Payment status | sdk.order.getPaymentStatus(orderNumber) â takes a string |
| Retry payment | sdk.order.retryOrderPayment({ order_number }, { payment_method }) |
| Cancel order | sdk.order.cancelOrder({ order_number }, { cancellation_reason, refund_mode }) |
| Get refunds | sdk.order.listOrderRefunds({ order_number }) |
Note: Returns are managed by the brand admin (Admin Portal), not the storefront. Customers can cancel within the cancellation window (
is_cancellation_allowed); the admin then decides whether to schedule a return shipment or issue a direct refund. The default behavior is to refund if cancelled within the window. Return/replacement request APIs for storefront are under development.
Decision Tree
User Request
â
ââ "Place order" / "Checkout"
â ââ sdk.order.createOrder() â handle payment_info
â â See cart-checkout/ for full checkout flow
â
ââ "My orders" / "Order history"
â ââ sdk.order.listOrders({ page, limit })
â
ââ "Order detail" / "Order #123"
â ââ sdk.order.getOrderDetails({ order_number })
â
ââ "Track shipment"
â ââ sdk.order.listOrderShipments({ order_number })
â â tracking_url, awb_no, status, eta_delivery
â
ââ "Payment failed" / "Retry"
â ââ Check â sdk.order.getPaymentStatus(orderNumber)
â ââ Retry â sdk.order.retryOrderPayment({ order_number }, { payment_method })
â
ââ "Cancel order"
ââ Check is_cancellation_allowed first
ââ sdk.order.cancelOrder({ order_number }, { ... })
Order Statuses
| Status | Description |
|---|---|
draft |
Order created, awaiting payment |
confirmed |
Payment successful, order confirmed |
processing |
Being prepared for shipment |
shipped |
In transit |
delivered |
Delivered to customer |
cancelled |
Order cancelled |
Payment Statuses
| Status | Description | Action |
|---|---|---|
pending |
Payment not yet processed | Poll again after delay |
success |
Payment successful | Show confirmation |
failed |
Payment failed | Check is_retry_available |
Key Patterns
Create Order from Cart
See
cart-checkout/references/payment-patterns.md§ “Building Payment Payloads” for all payment_method shapes.
const { data: order, error } = await sdk.order.createOrder({
cart_id: cartId,
payment_method: {
payment_provider_slug: "juspay",
integration_type: "hyper-checkout",
gateway_reference_id: gatewayRefId,
return_url: "https://yoursite.com/order/confirm",
action: "paymentPage",
},
});
if (order.payment_required) {
// Use payment_info to redirect or handle payment flow
}
List Orders with Filters
const { data, error } = await sdk.order.listOrders({
page: 1,
limit: 10,
sort_by: JSON.stringify({ order_date: "desc" }),
});
// data.orders â OrderList[] (summary view)
// data.pagination â { total_records, total_pages, next_page }
Poll Payment Status
async function pollPaymentStatus(orderNumber: string) {
// Note: getPaymentStatus takes a string, not an object
const { data, error } = await sdk.order.getPaymentStatus(orderNumber);
if (data.status === "pending") {
setTimeout(() => pollPaymentStatus(orderNumber), 3000);
return;
}
if (data.status === "success") {
showConfirmation(orderNumber);
} else if (data.is_retry_available) {
showRetryOption(orderNumber);
} else {
showPaymentFailed();
}
}
Cancel Order
// First check if cancellation is allowed
const { data: order } = await sdk.order.getOrderDetails({
order_number: orderNumber,
});
if (order.is_cancellation_allowed) {
const { data, error } = await sdk.order.cancelOrder(
{ order_number: orderNumber },
{
cancellation_reason: "Changed my mind",
refund_mode: "original_payment_mode",
feedback: "Optional feedback",
}
);
}
Shipment Tracking
const { data, error } = await sdk.order.listOrderShipments({
order_number: orderNumber,
});
data.shipments.forEach((shipment) => {
console.log(shipment.status); // "shipped", "delivered", etc.
console.log(shipment.tracking_url); // Courier tracking link
console.log(shipment.awb_no); // Air waybill number
console.log(shipment.eta_delivery); // Estimated delivery date
});
Common Pitfalls
| Level | Issue | Solution |
|---|---|---|
| CRITICAL | Creating order without address | Cart must have billing/shipping addresses set before createOrder() |
| HIGH | Not polling payment status | After gateway redirect, always poll getPaymentStatus() |
| HIGH | Showing cancel button when not allowed | Check is_cancellation_allowed from order detail first |
| MEDIUM | Not handling multiple shipments | One order can have multiple shipments â iterate data.shipments |
| MEDIUM | Missing return_url |
Must provide return_url for payment gateway callback |
| MEDIUM | Building a returns flow on storefront | Returns are admin-managed. Storefront supports cancellation only (cancelOrder). Show order/refund status, not a “Request Return” form. |
| LOW | Not filtering orders by status | Use status[] query param to show relevant orders per tab |
See Also
cart-checkout/– Cart management and checkout flowwebhooks/– Real-time order status updates via webhooks
Documentation
- Checkout Flow: https://www.commercengine.io/docs/storefront/checkout
- My Account – Orders: https://www.commercengine.io/docs/storefront/my-account
- API Reference: https://www.commercengine.io/docs/api-reference/orders
- LLM Reference: https://llm-docs.commercengine.io/storefront/operations/create-order