返回首页
POST 获取商品详情
https:/user/shop.php?action=get_goods_detail
接口说明

用于前台模板、单页购买弹窗或自定义客户端读取商品详情。接口会调用 Api::getGoodsInfo(),登录用户访问时会记录浏览足迹。

请求参数
参数类型必填说明
goods_idint商品 ID,可 POST 或 GET 传入。
返回示例
{
    "code": 200,
    "msg": "",
    "data": {
        "id": 1,
        "title": "自动发货卡密商品",
        "type": "goods_once",
        "is_sku": "y",
        "stock": 100,
        "sales": 28,
        "price": 9.90,
        "cover": "/content/uploadfile/xxx.jpg",
        "attach_user": [
            {"name": "邮箱", "placeholder": "用于接收卡密", "type": "string", "required": true}
        ],
        "sku_all": {
            "1-2": {"sku": "1-2", "stock": 50, "price": 9.90}
        }
    }
}
POST 获取商品价格与库存
https:/user/shop.php?action=goods_price_stock
接口说明

用户选择 SKU 或修改数量时调用。接口会按游客/会员等级/固定价/数量优惠计算最终单价、总价、成本价和当前库存。

请求参数
参数类型必填说明
goods_idint商品 ID。
sku_ids[]array规格值 ID 数组;无规格商品可不传。
quantityint购买数量,默认 1,小于 1 会按 1 处理。
返回示例
{
    "code": 200,
    "msg": "",
    "data": {
        "unit_price": 9.90,
        "count_price": 19.80,
        "cost_price": 5.00,
        "stock": 100,
        "discount": {"enabled": true, "title": "2件优惠"}
    }
}
POST 创建发卡订单
https:/user/shop.php?action=xiadan
接口说明

创建商品订单。接口会校验商品库存、规格完整性、必填附加字段、支付方式和优惠券,然后写入主订单、子订单和订单必填信息。成功后返回 out_trade_no,前端应跳转到 ?action=pay&out_trade_no=订单号 或系统对应支付入口。

重要:游客不可使用余额支付;免费商品默认要求登录;若启用强制登录插件,下单前还会检查登录态。
请求参数
参数类型必填说明
goods_idint商品 ID。
sku_ids[]array规格值 ID 数组,系统会合并为 1-2 格式。
quantityint购买数量,默认 1。
payment_pluginstring支付插件标识,如 alipaybalance
payment_titlestring支付方式显示名称,如「支付宝」「余额」。
attach[key]array按商品配置商品自定义购买字段,key 为字段名称。
required[key]array按商品配置订单必填字段,如邮箱、手机号等。
coupon_codestring优惠券码,启用优惠券能力时生效。
请求示例
$.post('/user/shop.php?action=xiadan', {
    goods_id: 1,
    sku_ids: [3, 8],
    quantity: 1,
    payment_plugin: 'alipay',
    payment_title: '支付宝',
    attach: {'邮箱': 'demo@example.com'},
    required: {'联系方式': '13800000000'},
    coupon_code: 'DC2026'
}, function(res){
    if (res.code === 200) {
        location.href = '/?action=pay&out_trade_no=' + encodeURIComponent(res.data.out_trade_no);
    } else {
        layer.msg(res.msg);
    }
}, 'json');
返回示例
{
    "code": 200,
    "msg": "ok",
    "data": {
        "out_trade_no": "202605141030001234"
    }
}
常见错误
错误信息原因
请选择支付方式payment_plugin 为空。
该商品已售罄 / 库存不足库存不足或 SKU 库存不足。
请选择商品规格 / 请完整选择商品规格SKU 商品未传完整规格。
请填写xxx商品附加字段或订单必填字段未填写。

自动发货扩展示例

如果插件需要接管或增强发货流程,可监听 deliverdeliver_after 钩子。

function my_deliver_hook($db, $prefix, $goods, $order, $childOrder) {
    if (($goods['type'] ?? '') !== 'goods_service') return;

    $content = '服务交付内容:' . $order['out_trade_no'];
    $db->add('goods_service_sale', [
        'goods_id' => $goods['id'],
        'order_list_id' => $childOrder['id'],
        'content' => $content,
        'is_default' => 'n',
        'create_time' => time(),
    ]);
}
addAction('deliver', 'my_deliver_hook');