Skip to content

概述

在 EBAOZU 系统中,支付宝小程序端的租赁业务覆盖了从售前下单、风控核身、商家履约发货,到租期管理、到期归还、质检定损及最终完结解冻的完整闭环生命周期。

本架构基于支付宝官方租赁行业交易组件(Commerce Rent)芝麻信用免押风控周期性代扣协议与**第三方电子合同存证(e签宝/爱签)**深度融合打造。本文档详细梳理该全流程业务链路的架构设计、数据表结构、接口契约、服务端核心业务逻辑及各阶段状态机流转。


租赁全生命周期架构与状态机

全生命周期端到端时序图

mermaid
sequenceDiagram
    autonumber
    actor User as 用户 (Uni-app)
    participant Server as 后端服务 (StoreOrder)
    participant Rent as 租赁服务 (CommerceRent)
    participant Admin as 商家管理后台 (Admin)
    participant Alipay as 支付宝开放平台 (组件/芝麻)
    participant Third as 第三方 (顺丰/电子合同)

    Note over User, Alipay: 阶段一:下单与创单签约
    User->>Server: 1. 确认订单与实时算费 (confirm / computed)
    Server->>Third: 顺丰时效与运费预估
    Third-->>Server: 返回运费与时效
    Server-->>User: 返回包含分期预览与运费的 orderKey
    User->>Server: 2. 提交订单 (orderCreate)
    Server->>Server: 校验实名与库存,事务落库多表
    Server-->>User: 返回订单 ID (oid)
    User->>Rent: 3. 支付宝创单 (rentCreate)
    Rent->>Alipay: alipay.commerce.rent.order.create
    Alipay-->>Rent: 返回 trade_component_order_id
    User->>Rent: 4. 免押签约请求 (rentSign)
    Rent->>Alipay: alipay.commerce.rent.order.sign
    Alipay-->>User: 唤起芝麻免押评估与代扣签署
    Alipay-->>Server: 网关异步通知签约成功 (SIGNED)
    User->>Alipay: 5. 支付首期租金 (若 first_rent > 0)
    Alipay-->>Server: 网关异步通知支付成功,核销第1期

    Note over User, Admin: 阶段二:风控核身、审核与发货履约
    User->>Third: 6. 人脸活体核身 & 签署电子合同
    Third-->>Server: 回调保存合同 PDF 存证
    Admin->>Rent: 7. 商家后台审核通过 (approve)
    Rent->>Alipay: alipay.commerce.rent.order.approve
    Admin->>Rent: 8. 物流打包发货 (send)
    Rent->>Alipay: alipay.commerce.rent.order.fulfillment.send (MERCHANT_DELIVERY_SEND)
    User->>Rent: 9. 确认收货 (receive)
    Rent->>Alipay: alipay.commerce.rent.order.fulfillment.receive (MERCHANT_DELIVERY_RECEIVED)
    Rent->>Alipay: 10. 异步队列回传合同 PDF (RENT_CONTRACT)

    Note over User, Admin: 阶段三:租期代扣、归还质检与完结解冻
    loop 租期内每期代扣
        Server->>Rent: 到期执行代扣 (RENT_DEDUCT)
        Rent->>Alipay: 周期性扣款并核销分期账单
    end
    User->>Server: 11. 申请租完归还 (returnGoods)
    User->>Third: 12. 顺丰上门取件预约 (createSFOrder)
    Third-->>Server: 生成寄回运单号
    Server->>Alipay: 13. 同步寄回物流 (USER_DELIVERY_SEND)
    Admin->>Server: 14. 商家收货检测 (confirmReturn)
    Server->>Alipay: 同步归还收货 (USER_DELIVERY_RECEIVED)
    alt 存在商品破损
        Admin->>Server: 发起货损赔付 (damagePay)
        User->>Server: 支付赔偿金后方可结案
    end
    Server->>Rent: 15. 订单完结 (endOrder / finish)
    Rent->>Alipay: alipay.commerce.rent.order.fulfillment.finish (USER_RETURNED)
    Server->>Alipay: 16. 全额解冻剩余预授权押金 (cancelFreeze)

订单核心状态流转对照

阶段步骤主订单状态 (eb_store_order.status)租赁履约状态 (eb_store_order_lease.lease_status)支付宝状态 (zhima_status / 交易组件状态)说明
1. 订单落库0 (待发货/待处理)0 (待签约)INIT数据库落库,生成 alzl 订单
2. 免押签约00SIGNED支付宝免押预授权冻结及代扣协议绑定成功
3. 首期支付0 (paid=1)1 (待审核)SIGNED第一期账单核销,进入商家审核队列
4. 审核通过02 (待发货)MERCHANT_APPROVED管理员审核资质通过
5. 商家发货1 (待收货)2 (待发货/已寄出)MERCHANT_DELIVERY_SEND同步顺丰/物流运单号及发货凭证材料
6. 用户收货2 (已收货/租赁中)3 (租赁中)RENTING用户确认收货,租期开始,触发合同回传
7. 申请归还25 (待归还)RETURN_DELIVERED用户发起归还并生成寄回预约单
8. 用户寄回26 (归还中)USER_DELIVERY_SEND用户上门揽收或自行寄出,同步寄回物流
9. 商家收货6 (已完结)7 (已归还)USER_DELIVERY_RECEIVED商家开箱质检确认商品无损
10. 履约完结6 (已完结)4 (已完结)FINISH / USER_RETURNED支付宝履约单完结,全额解冻剩余预授权押金

核心数据结构与数据表关系

主订单表(eb_store_order

记录基础交易信息、支付流水及全局状态。

字段类型说明
idint订单主键 ID
order_idvarchar(32)系统订单号(支付宝小程序端以 al 开头)
uidint用户 ID
trade_component_order_idvarchar(64)支付宝租赁行业交易组件单号
trade_novarchar(64)支付宝交易流水号
is_leasetinyint是否租赁订单:1=是,0=否
total_pricedecimal(8,2)订单总金额(总租金 + 运费 + 增值服务 + 卡项费用)
pay_pricedecimal(8,2)用户下单应付金额(即首期应付金额)
order_depositdecimal(8,2)订单押金/买断价
freight_pricedecimal(8,2)运费金额(顺丰快递费用)
added_service_amountdecimal(8,2)增值服务总金额
card_amountdecimal(8,2)关联卡项权益费用
paidtinyint支付状态:0=未支付,1=已支付
statustinyint状态:0=待发货, 1=待收货, 2=已收货/租赁中, 6=已完结
shipping_typetinyint配送方式:1=快递,2=自提,3=门店配送,5=同城闪送
delivery_idvarchar(64)商家发货快递单号
delivery_namevarchar(64)商家发货快递公司名称
back_idint关联归还配送预约单 ID (eb_store_delivery_order.id)

租赁订单扩展表(eb_store_order_lease

记录租赁专属风控参数、免押状态、人脸认证、电子合同与履约进度。

字段类型说明
idint租赁主键 ID
oidint关联 eb_store_order.id
order_idvarchar(32)租赁单号(以 zl 开头)
check_typetinyint签约模式:1=芝麻免押(原), 2=蚂蚁链, 3=支付宝租赁行业交易/纯代扣
depositdecimal(8,2)实际冻结/支付押金金额
custom_depositdecimal(8,2)设定的免押额度/评估押金
first_rentdecimal(8,2)首期租金金额
buyout_moneydecimal(8,2)到期买断价/买断总金额
day_pricedecimal(8,2)日租金
lease_daysint租赁总天数
lease_numint租赁总期数(含首期)
lease_num_paidint已支付租金期数
start_time / end_timeint租期起止时间戳
withhold_plantinyint代扣方案:1=第1期代扣,2=第2期开始代扣(长租首期不代扣)
risk_permittinyint纯代扣模式标识:1=跳过预授权仅代扣
zhima_statusvarchar(32)支付宝租赁状态(INIT / SIGNED / RENTING / RETURN_DELIVERED 等)
face_auth_statustinyint人脸核身状态:0=未认证, 1=扫描中, 2=认证成功, 3=认证失败
face_auth_detailtext人脸识别认证详情 JSON
contract_detailtext电子合同详情 JSON(含本地 PDF 路径及支付宝 file_id 节点)
return_delivery_typetinyint归还方式:1=快递寄回,2=到店,3=其他
return_delivery_idvarchar(64)归还运单号
return_delivery_namevarchar(64)归还快递公司名称
rent_freight_synctinyint顺丰寄回运费同步状态:1=已同步

租赁分期账单表(eb_store_order_installment

拆分每期的租金账单与周期性代扣计划。

字段类型说明
idint分期账单 ID
oidint关联 eb_store_order.id
order_idvarchar(32)关联主订单号
numint账单期数(1, 2, 3...)
amountdecimal(8,2)当期应付金额(租金 + 均摊增值费用)
dead_lineint当期支付截止时间戳(计划代扣执行时间)
statustinyint账单状态:0=未支付,1=已支付,2=逾期,3=已取消
paid_timeint实际支付时间戳
is_deducttinyint代扣执行状态:0=未代扣,1=代扣成功,2=代扣失败

全生命周期流程详细拆解


阶段一至三:下单、创单与免押签约

mermaid
sequenceDiagram
    autonumber
    actor User as 用户 (Uni-app)
    participant API as StoreOrder 控制器
    participant Computed as StoreOrderComputed 服务
    participant OrderCreate as StoreOrderCreate 服务
    participant Rent as CommerceRent 服务
    participant Alipay as 支付宝开放平台

    User->>API: POST /api/order/confirm (cartId, addressId, shipping_type)
    API->>API: 校验运费模板,提取商品规格与配件
    API->>API: 初算分期列表并存入 Redis 缓存 user_order_uid_orderKey
    API-->>User: 返回 orderKey 与分期预览数据

    User->>API: POST /api/order/computed/:key (切换地址/优惠券/起租日)
    API->>Computed: computedOrder()
    Computed->>Computed: 请求顺丰 OpenAPI 预估运费及送达时间
    Computed->>Computed: 精确计算优惠抵扣、总租金、首期租金与押金
    Computed-->>User: 返回包含顺丰时效与金额明细

    User->>API: POST /api/order/create/:key (payType=alipay, cno, tag)
    API->>OrderCreate: createOrder() (加分布式锁 api_order_create_uid_key)
    OrderCreate->>OrderCreate: 强制校验用户实名认证 (card_id, real_name)
    OrderCreate->>OrderCreate: CacheService::popStock 预扣商品库存
    OrderCreate->>OrderCreate: 开启数据库事务,写入主单/租赁表/分期表
    OrderCreate->>OrderCreate: 核销优惠券,删除 Redis 购物车缓存并释放锁
    OrderCreate-->>User: 返回订单创建结果 (oid, order_id, key)

    User->>API: POST /api/rent/create/:oid (source_id, path)
    API->>Rent: create()
    Rent->>Alipay: alipay.commerce.rent.order.create (上报分期、成色、免押评估额)
    Alipay-->>Rent: 返回 trade_component_order_id
    Rent->>Rent: 回写 eb_store_order.trade_component_order_id
    Rent-->>User: 返回组件单号

    User->>API: POST /api/rent/sign/:oid
    API->>Rent: sign()
    Rent->>Alipay: alipay.commerce.rent.order.sign
    Alipay-->>Rent: 返回签约字符串
    Rent-->>User: 返回签约参数,Uni-app 拉起支付宝免押与代扣组件
    User->>Alipay: 用户确认授权免押并签署代扣
    Alipay-->>API: 网关异步通知 alipay.commerce.rent.order.changed (SIGNED)
    API->>API: 更新 eb_store_order_lease.zhima_status = SIGNED

订单确认 (order/confirm)

  • 路由 & 控制器POST /api/order/confirm → [StoreOrder::confirm](file:///www/wwwroot/ebaozu_v4/app/controller/api/v1/order/StoreOrder.php#L259)
  • Uni-app APIorderConfirm(cartId, news, addressId, shippingType, store_id, couponId)
  • 核心处理
    1. 校验默认租赁运费模板 RentShippingTemplatesServices
    2. 调用 StoreCartServices::getUserProductCartListV1 获取有效商品列表,提取租金、买断价、押金、配件包 kit_id 等;
    3. 初算增值服务费 addServicePrice 与卡项费用 cardAmount,生成分期账单预览;
    4. 生成唯一 32 位 MD5 字符串 $orderKey,将订单数据写入 Redis:user_order_{uid}{orderKey}(TTL 30 分钟)。

实时算费 (order/computed/:key)

  • 路由 & 控制器POST /api/order/computed/:key → [StoreOrder::computedOrder](file:///www/wwwroot/ebaozu_v4/app/controller/api/v1/order/StoreOrder.php#L296)
  • Uni-app APIpostOrderComputed(key, data)
  • 核心处理
    1. 读取 Redis 下单缓存;
    2. 若配送方式为快递(shipping_type == 1),根据收发货地址调用顺丰 OpenAPI SFExpress::getSFEexpressTime 动态计算预估运费及送达时间;
    3. 精确计算 SVIP 会员折扣、优惠券抵扣、积分抵扣,确定总租金、首期租金 first_rent 及最终押金 custom_deposit

订单落库 (order/create/:key)

  • 路由 & 控制器POST /api/order/create/:key → [StoreOrder::create](file:///www/wwwroot/ebaozu_v4/app/controller/api/v1/order/StoreOrder.php#L449)
  • 服务层实现:[StoreOrderCreateServices::createOrder](file:///www/wwwroot/ebaozu_v4/app/services/order/StoreOrderCreateServices.php#L150)
  • Uni-app APIorderCreate(key, data)
  • 核心处理
    1. 防并发锁:加 Redis 分布式锁 api_order_create_{uid}_{key}(10s 超时);
    2. 强制实名认证:校验 userInfo.card_iduserInfo.real_name,未实名认证直接阻断;
    3. 库存原子预扣CacheService::popStock 预扣商品库存;
    4. 数据库事务落库:写入主订单 eb_store_order、租赁扩展记录 eb_store_order_leasecheck_type=3)、租赁分期表 eb_store_order_installment、商品快照 eb_store_order_cart_info 及卡项关系;
    5. 清理 Redis 缓存 user_order_{uid}{key} 并释放锁。

支付宝租赁创单 (v2/rent/create/:id)

  • 路由 & 控制器POST /api/rent/create/:id → [Common::rentCreate](file:///www/wwwroot/ebaozu_v4/app/controller/api/v2/alipay/Common.php#L80)
  • 服务层实现:[CommerceRentServices::create](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L153)
  • Uni-app APItradeCreate({ oid })
  • 核心处理:调用支付宝 OpenAPI alipay.commerce.rent.order.create 上报商品成色、分期计划、芝麻信用服务与退货地址;创单成功后回写 eb_store_order.trade_component_order_id

芝麻免押与代扣签约 (v2/rent/sign/:id)

  • 路由 & 控制器POST /api/rent/sign/:id → [Common::rentSign](file:///www/wwwroot/ebaozu_v4/app/controller/api/v2/alipay/Common.php#L122)
  • 服务层实现:[CommerceRentServices::sign](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L629)
  • Uni-app APIzhimaCreate({ oid })
  • 核心处理:调用支付宝 OpenAPI alipay.commerce.rent.order.sign 返回签约凭证,小程序端拉起芝麻信用免押评估与代扣协议签署弹窗。用户确认后网关接收 alipay.commerce.rent.order.changedSIGNED)。

首期租金支付

  • 若首期租金 first_rent > 0,拉起首期支付;
  • 支付宝推送支付成功通知 alipay.commerce.rent.order.pay.notify
  • 服务端 [CommerceRentServices::payNotify](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L1532) 核销第 1 期账单(status=1),标记主订单已支付(paid=1)。

阶段四至五:风控核身、审核发货与收货

mermaid
sequenceDiagram
    autonumber
    actor User as 用户 (Uni-app)
    participant Admin as 商家管理后台
    participant Server as 系统服务 / 异步队列
    participant Rent as CommerceRent 服务
    participant Alipay as 支付宝开放平台
    participant Esign as 电子合同平台 (e签宝/爱签)

    Note over User, Esign: 风控核身与合同签署
    User->>Server: 上传人脸活体识别结果 (updateFaceAuth)
    Server->>Server: 更新 face_auth_status = 2 (认证成功)
    Server->>Esign: 填充租期/设备/分期数据,发起电子合同签署
    User->>Esign: 在小程序端完成手写印章签署
    Esign-->>Server: 回调通知,本地保存合同 PDF (dstPdfFile)

    Note over Admin, Alipay: 商家审核与物流发货
    Admin->>Rent: 商家后台审核通过 (approve)
    Rent->>Alipay: alipay.commerce.rent.order.approve
    Alipay-->>Rent: 返回成功,更新 lease_status = 2 (待发货)

    Admin->>Rent: 打包发货,录入顺丰运单号 (send)
    Rent->>Alipay: alipay.commerce.rent.order.fulfillment.send (MERCHANT_DELIVERY_SEND)
    Alipay-->>Rent: 同步物流单号及补充凭证材料成功
    Rent->>Server: 更新主订单 status = 1 (已发货待收货)

    Note over User, Alipay: 用户收货与合同回传
    User->>Server: 用户点击确认收货 (orderTake)
    Server->>Rent: receive(oid, 1)
    Rent->>Alipay: alipay.commerce.rent.order.fulfillment.receive (MERCHANT_DELIVERY_RECEIVED)
    Alipay-->>Rent: 状态流转为 RENTING (租赁中)
    Rent->>Server: 触发异步队列 OrderCreateAfterJob::uploadContractToAlipay
    Server->>Alipay: openFileUploadForRent 上传本地合同 PDF 获取 file_id
    Server->>Server: 回写 contract_detail.alipay_rent: file_id 和 result

人脸活体核身

  • 调用 [StoreOrderLeaseServices::updateFaceAuth](file:///www/wwwroot/ebaozu_v4/app/services/order/StoreOrderLeaseServices.php#L148) 校验用户活体认证结果,并将认证详情存储至 eb_store_order_lease.face_auth_detail,更新 face_auth_status=2(认证成功)。

电子合同签署与存证

  • 对接 e签宝(Esign)爱签(Asign),自动填充订单信息、甲乙双方身份、设备 IMEI 及分期还款计划;
  • 用户在前端小程序完成签名并生成正式 PDF 存证文件,本地路径记录至 contract_detail.dstPdfFile

商家后台审核 (approve / close)

  • 审核通过:调用 [CommerceRentServices::approve($oid)](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L1126) 同步 alipay.commerce.rent.order.approve,更新租赁状态为待发货(lease_status=2)。
  • 审核拒绝:调用 [CommerceRentServices::close($oid, $reasonCode)](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L495) 关闭支付宝订单并全额解冻预授权押金。

商家物流发货 (send)

  • 服务层实现:[CommerceRentServices::send($oid, 1)](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L1147);
  • 映射标准阿里物流编码(TradeComponentServices::getDeliveryId),调用 alipay.commerce.rent.order.fulfillment.sendMERCHANT_DELIVERY_SEND),同步物流单号及补充凭证材料(AdditionMediaServices);
  • 更新主订单状态为已发货(status=1)。

用户确认收货与合同回传 (receive)

  • 用户确认收货触发 [CommerceRentServices::receive($oid, 1)](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L1206)(MERCHANT_DELIVERY_RECEIVED),订单进入租赁中状态(主订单 status=2,租赁 lease_status=3);
  • 自动回传合同 PDF:触发异步队列 [OrderCreateAfterJob::uploadContractToAlipay](file:///www/wwwroot/ebaozu_v4/app/jobs/order/OrderCreateAfterJob.php#L438),上传已签合同 PDF 至支付宝文件平台并回传关联存证(RENT_CONTRACT)。

阶段六至七:租期代扣、归还质检与完结解冻

mermaid
sequenceDiagram
    autonumber
    actor User as 用户 (Uni-app)
    participant Cron as 定时代扣任务
    participant Admin as 商家管理后台
    participant Server as 系统服务 (StoreOrder)
    participant Rent as CommerceRent 服务
    participant Alipay as 支付宝开放平台
    participant SF as 顺丰速运 API

    Note over Cron, Alipay: 租期周期性自动代扣
    loop 每日扫描待扣账单
        Cron->>Rent: pay(oid, num, 0, [], 'RENT_DEDUCT')
        Rent->>Alipay: 发起代扣扣款 (07:00-23:00)
        Alipay-->>Server: 网关通知 pay.notify,核销对应期数账单
    end

    Note over User, SF: 到期归还与顺丰预约
    User->>Server: 结清账单,申请租完归还 (returnGoods)
    Server->>Server: 更新 lease_status = 5 (待归还),生成预约单
    User->>SF: 预约顺丰上门取件 (createSFOrder)
    SF-->>Server: 揽收成功,回调落库并投递即时同步任务
    Server->>Rent: send(oid, 2)
    Rent->>Alipay: fulfillmentSend (USER_DELIVERY_SEND 同步寄回物流)
    Server->>Server: 更新 lease_status = 6 (归还中)
    Server->>Rent: paySync(oid, -2)
    Rent->>Alipay: 同步 RETURN_FREIGHT 归还运费

    Note over Admin, Alipay: 商家质检与完结解冻
    Admin->>Server: 收到包裹,开箱检测确认无损 (confirmReturn)
    Server->>Rent: receive(oid, 2) (USER_DELIVERY_RECEIVED)
    Server->>Server: 回退商品库存,关联设备配件入库 (KitServices)
    
    alt 发现设备损坏或配件缺失
        Admin->>Server: 发起货损赔付单 (saveOrderDamage)
        User->>Server: 支付赔偿金 (damagePay)
    end

    Server->>Rent: 完结订单 endOrder() -> finish(oid, USER_RETURNED)
    Rent->>Alipay: alipay.commerce.rent.order.fulfillment.finish
    Server->>Alipay: cancelFreezeOrder() 全额解冻剩余预授权押金
    Alipay-->>Server: 押金解冻成功
    Server->>Server: 更新主订单 status = 6 (已完结),lease_status = 4 (已完结)

周期性租金代扣

  • 队列每日扫描待扣分期账单,调用 [CommerceRentServices::pay($oid, $num, 0, [], 'RENT_DEDUCT')](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L685) 发起代扣(代扣时间限每日 07:00-23:00),成功后核销账单。

申请租完归还与顺丰预约 (returnGoods / createSFOrder)

  • 结清分期账单后,用户发起归还调用 [StoreOrderServices::returnGoods](file:///www/wwwroot/ebaozu_v4/app/services/order/StoreOrderServices.php#L10772),生成寄回预约单(eb_store_delivery_order);
  • 用户选择顺丰上门取件,顺丰回调确认揽收后投递 RentReturnFreightSyncJob,异步按 send($oid, 2)USER_DELIVERY_SEND)→ paySync($oid, -2) 顺序同步支付宝;6小时定时任务继续扫描未完成记录作为兜底。

商家收货检测与定损 (confirmReturn)

  • 商家收到寄回商品后开箱质检;
  • 无损状态下在后台执行确认归还 [StoreOrderServices::confirmReturn](file:///www/wwwroot/ebaozu_v4/app/services/order/StoreOrderServices.php#L8695),调用 CommerceRentServices::receive($oid, 2)USER_DELIVERY_RECEIVED),回退商品库存并执行配件设备入库(KitServices);
  • 若有损坏则创建货损赔付单(StoreOrderDamageServices),处理完成后结案。

履约完结与全额解冻押金 (endOrder / finish)

  • 服务层实现:[StoreOrderServices::endOrder](file:///www/wwwroot/ebaozu_v4/app/services/order/StoreOrderServices.php#L8893);
  • 若存在未收取的账单,调用 CommerceRentServices::paySync 进行账单同步关闭;
  • 调用 [CommerceRentServices::finish($oid, $endType)](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CommerceRentServices.php#L1240)(alipay.commerce.rent.order.finish,传入 USER_RETURNED)完结支付宝履约单;
  • 调用 [CreditZhimaServices::cancelFreezeOrder](file:///www/wwwroot/ebaozu_v4/app/services/alipay/CreditZhimaServices.php) 全额解冻预授权押金,更新主订单 status=6(已完结),租赁状态 lease_status=4

全生命周期接口速查表

阶段HTTP 方法路由路径服务端处理方法对应 Uni-app / 后台操作功能说明
下单POSTorder/confirmStoreOrder::confirmorderConfirm()确认订单,预估分期并写入 Redis 缓存
下单POSTorder/computed/:keyStoreOrder::computedOrderpostOrderComputed()动态计算顺丰时效、运费与优惠明细
下单POSTorder/create/:keyStoreOrder::createorderCreate()校验实名与库存,事务落库多表
创单POSTrent/create/:idCommon::rentCreatetradeCreate()支付宝创建租赁行业交易组件订单
免押POSTrent/sign/:idCommon::rentSignzhimaCreate()支付宝发起芝麻免押预授权与代扣签约
支付POSTorder/payStoreOrder::payorderPay()支付首期租金
审核POSTadminapi/order/approve/:idCommerceRentServices::approve后台审核通过按钮商家审核通过,同步支付宝履约状态
发货POSTadminapi/order/delivery/:idCommerceRentServices::send(1)后台发货提交同步商家发货运单号与发货凭证材料
收货POSTorder/takeCommerceRentServices::receive(1)orderTake()用户确认收货,触发已签合同 PDF 回传
归还POSTorder/return_goods/:idStoreOrderServices::returnGoods移动端申请归还按钮申请租完归还,生成寄回预约单
寄回POSTorder/create_sf_orderStoreOrder::createSFOrder预约顺丰上门取件顺丰预约揽件,同步寄回物流到支付宝
质检POSTadminapi/order/confirm_return/:idStoreOrderServices::confirmReturn后台确认归还按钮商家收货检测,同步归还收货状态
完结POSTadminapi/order/end_order/:idStoreOrderServices::endOrder系统自动/手动完结完结支付宝履约单,全额解冻预授权押金

关键设计与异常防护

幂等控制与分布式防并发

  • 下单防重:Redis 锁 api_order_create_{uid}_{key}(10s 超时保护);
  • 组件创单防重入:若订单已存在 trade_component_order_id,再次调用创单直接返回已有单号,防止重复向支付宝发起创单;
  • 异步网关幂等:所有支付宝应用网关回调均基于 out_trade_notrade_component_order_id 做已处理状态校验。

合同回传机制与存量整改

  • 确认收货常驻回传:收货成功后通过异步队列 OrderCreateAfterJob::uploadContractToAlipay 将已签署的合同 PDF 上传并回传至支付宝(RENT_CONTRACT);
  • 模板合规整改回传:针对历史未完结订单,支持通过命令行工具 php think rent:rectify-contract 批量整改并回传模板 PDF(RENT_CONTRACT_TEMPLATE)。

顺丰寄回运费同步限制

  • 支付宝侧限制寄回运费最多同步 1 次,系统通过 eb_store_order_lease.rent_freight_sync 标记位进行防重保护与存量自愈。

押金安全解冻兜底

  • 订单进入终态前,系统在 StoreOrderServices::endOrder 中严格检查 rest_amount 并调用 CreditZhimaServices::cancelFreezeOrder 进行全额解冻,杜绝押金未释放导致的用户客诉。

承信租多门店租赁商城系统官方文档