尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

eshop订单状态流转详解

eshop订单状态流转详解
📅 发布时间:2026/6/19 13:34:08

前言

与万事言和,

与独处相安,

自行,自醒,自清欢。

1.配置多个启动项目

打开配置启动项目

image-20251203174104334

创建eshop配置文件:

  • 认证服务(Identity.API)和购物车服务(Basket.API)使用的是https协议
  • 移动端HybridApp和ClientApp没有环境可以不配置,不学习maui也用不上

image-20251203174248008

2.WebApp执行流程

点击右上角登录

image-20251203174556630

登录

image-20251203174637650

授权

image-20251203174705810

登录授权成功

image-20251203212822270

随便选择2个商品到购物车

image-20251203212848302

3.结账

点击Chceck out进行结账image-20251203212933501

默认地址即可,点击Place order,Place order会创建订单

image-20251203213049414

这个订单状态会刷新,接着我们就了解这个订单状态执行流程

image-20251203214042889

4.订单创建(OrderStartedIntegrationEvent)

查看HandleSubmitAsync实现,调用了BasketState的CheckoutAsync方法

image-20251203214403762

CheckoutAsync:

  • 1.构建创建订单参数
  • 2.调用订单服务创建订单
  • 3.删除购物车

image-20251203214607670

CreateOrder:

  • 创建x-requestid
  • 调用订单服务创建订单接口

image-20251203214621197

CreateOrderAsync:创建订单接口

image-20251203214810637

CreateOrderCommandHandler:创建订单处理器

  • 订单入库
  • 发布订单开始集成事件(OrderStartedIntegrationEvent)

image-20251203215052624

购物车服务(Basket.API)订阅订单开始集成事件(OrderStartedIntegrationEvent),这里会删除用户购物车

image-20251203215145045

WebApp其实也调用购物车服务删除了用户购物车,这里应该重复了

image-20251203215328043

5.订单已提交(Submitted)

订单流程服务(OrderProcessor)启动了一个后台服务,后台服务每30s检查一次数据库数据库创建的订单,如果当前时间 - 订单创建时间 > 1分钟,遍历这些订单,发布订单超时事件(GracePeriodConfirmedIntegrationEvent)

image-20251203222630166

查询数据库订单,条件:当前时间 - 订单创建时间 > 1分钟

image-20251203222703021

遍历查询订单结果,发布订单超时集成事件(GracePeriodConfirmedIntegrationEvent)

image-20251203222752222

6.订单超时(GracePeriodConfirmedIntegrationEvent)

订单服务(Ordering.API)订阅订单超时集成事件(GracePeriodConfirmedIntegrationEvent)

订单超时集成事件处理器会发送设置订单状态等待验证SetAwaitingValidationOrderStatusCommand命令

image-20251203222938280

设置订单状态等待验证命令处理器(SetAwaitingValidationOrderStatusCommandHandler)会调用SetAwaitingValidationStatus方法

image-20251203223122713

SetAwaitingValidationStatus:

  • 发布订单状态为等待验证领域事件(OrderStatusChangedToAwaitingValidationDomainEvent)

  • 设置订单状态为等待验证(AwaitingValidation)

image-20251203223229763

订单状态为等待验证领域事件(OrderStatusChangedToAwaitingValidationDomainEvent)发布订单等待验证集成事件(OrderStatusChangedToAwaitingValidationIntegrationEvent)

image-20251203223512777

7.订单等待验证(AwaitingValidation)

商品服务(Catalog.API)订阅订单等待验证集成事件(OrderStatusChangedToAwaitingValidationIntegrationEvent)

订单等待验证集成事件处理器(OrderStatusChangedToAwaitingValidationIntegrationEventHandler):

  • 检查商品库存
    • 库存充足:发布库存确认集成事件(OrderStockConfirmedIntegrationEvent)
    • 库存不足:发布库存拒绝集成事件(OrderStockRejectedIntegrationEvent)

我们这里主要学习主流层,库存确认集成事件(OrderStockConfirmedIntegrationEvent)

image-20251203223738159

8.订单库存确认(StockConfirmed)

商品服务(Catalog.API)订阅库存确认集成事件(OrderStockConfirmedIntegrationEvent)
库存确认集成事件(OrderStockConfirmedIntegrationEventHandler)发送设置订单状态库存确认命令(SetStockConfirmedOrderStatusCommand)

image-20251203224254669

库存确认命令处理器(SetStockConfirmedOrderStatusCommandHandler)调用SetStockConfirmedStatus方法

image-20251203224321597

SetStockConfirmedStatus:

  • 发布订单状态库存确认领域事件
  • 设置订单状态为库存确认

image-20251203224346419

订单状态库存确认领域事件处理器(OrderStatusChangedToStockConfirmedDomainEventHandler)发布库存已确认集成事件(OrderStatusChangedToStockConfirmedIntegrationEvent)

image-20251203224450691

9.订单支付成功(OrderPaymentSucceededIntegrationEvent)

支付流程服务(PaymentProcessor)订阅订单库存确认集成事件(OrderStatusChangedToStockConfirmedIntegrationEvent)

订阅订单库存确认集成事件处理器(OrderStatusChangedToStockConfirmedIntegrationEventHandler):

  • 如果PaymentSucceeded配置true,模拟支付成功,发布支付成功集成事件(OrderPaymentSucceededIntegrationEvent)
  • 如果PaymentSucceeded配置false,模拟支付失败,发布支付失败集成事件(OrderPaymentFailedIntegrationEvent)

主流程是支付成功集成事件(OrderPaymentSucceededIntegrationEvent)

image-20251203224749051

10.订单已支付(Paid)

订单服务(Ordering.API)订阅订单支付成功集成事件(OrderPaymentSucceededIntegrationEvent)

订单支付成功集成事件处理器(OrderPaymentSucceededIntegrationEventHandler)发送设置订单状态为已支付命令(SetPaidOrderStatusCommand)

image-20251203225041703

设置订单状态为已支付命令处理器(SetPaidOrderStatusCommandHandler)调用SetPaidStatus方法

image-20251203225153207

SetPaidStatus:

  • 发布订单已支付领域事件(OrderStatusChangedToPaidDomainEvent)
  • 设置订单状态为已支付

image-20251203225243134

订单已支付领域处理器(OrderStatusChangedToPaidDomainEventHandler):

  • 构建订单详细信息
  • 发布订单已支付的集成事件(OrderStatusChangedToPaidIntegrationEvent)

image-20251203225357924

商品服务(Catalog.API)订阅订单已支付的集成事件(OrderStatusChangedToPaidIntegrationEvent),扣除库存

image-20251203225704506

11.Webhooks.API

Webhooks.API 是 eShop 的内部服务,用于将系统内部微服务发布的集成事件可靠地推送给外部第三方系统。它负责管理外部订阅、监听内部事件、按规则触发 Webhook 回调,并提供重试等可靠性机制,相当于内部事件面向外部生态的统一出口。

简单理解:Webhooks.API属于eshop的内部服务,但是他的作用是将订阅内部服务的集成事件通知第三方服务

Webhooks.API订阅了:

  • 商品价格变更集成事件
  • 订单已发货集成事件
  • 订单已支付集成事件

image-20251203225905609

这些集成事件会通过WebhooksSender发送给所有用户订阅的客户端

image-20251203231403547

WebhookClient会先调用POST /api/webhooks接口,把自己的回调地址和token发送给Webhooks.API进行保存

  • DestUrl:Webhooks.API 收到集成事件后推送的服务地址

  • Token:Webhooks.API 通过HttpClient推送的,会自定义请求头(X-eshop-whtoken)设置这个token

image-20251203230345275

Webhooks.API保存WebhookClient的订阅信息

image-20251203231121800

12.WebhookClient

WebhookClient是模拟第三方服务订阅eshop事件的客户端

WebhooksClient调用Webhooks.API2个接口:

  • POST /api/webhooks:保存自己的订阅信息,用于Webhooks.API向WebhookClient推送消息
  • GET /api/webhooks:查询当前用户的订阅信息,WebhookClient只是模拟了第三方订单管理客户端服务,可能每个第三方服务的订阅都有单独的客户端

image-20251203232424743

然后通过自己定义的/webhook-received接口获取订阅事件

image-20251203232502467

当接收订单已支付或其他集成事件后,会显示在页面,这里没有持久化,保存在内存,重启服务就丢失了

image-20251203232620796

13.总结

eshop订单流程只有

已提交订单(Submitted)
等待验证(AwaitingValidation)
库存已确认(StockConfirmed)
已支付(Paid)	

可能eshop觉得发货什么的都是别的第三方服务了,所以没有实现了

订单流程总结

订单状态流程:***订单创建(`OrderStartedIntegrationEvent`)*******************************************
订单服务(`Ordering.API`)创建订单发布OrderStartedIntegrationEvent集成事件购物车服务(`Basket.API`)订阅OrderStartedIntegrationEvent集成事件:订单创建成功,删除购物车(应该删除已买的商品,但是这里直接根据UserId删除购物车,买没买的商品都删了)***订单已提交(`Submitted`)************************************************************
订单流程服务(`OrderProcessor`)的后台服务每30秒执行一次查询订单创建时间大于1分钟并且订单状态为Submitted的,然后遍历这些订单,发布GracePeriodConfirmedIntegrationEvent集成事件***订单超时(`GracePeriodConfirmedIntegrationEvent`)***********************************
订单服务(`Ordering.API`)订阅GracePeriodConfirmedIntegrationEvent集成事件
GracePeriodConfirmedIntegrationEventHandler集成事件处理器里会发送SetAwaitingValidationOrderStatusCommand命令,然后SetAwaitingValidationOrderStatusCommandHandler命令处理器会把订单状态改为AwaitingValidationStatus,然后发布领域事件OrderStatusChangedToAwaitingValidationDomainEvent,
OrderStatusChangedToAwaitingValidationDomainEventHandler领域事件处理器会发布OrderStatusChangedToAwaitingValidationIntegrationEvent集成事件***订单等待验证(`AwaitingValidation`)************************************************
商品服务(`Catalog.API`)订阅OrderStatusChangedToAwaitingValidationIntegrationEvent集成事件
OrderStatusChangedToAwaitingValidationIntegrationEventHandler集成事件处理器会根据库存发布不同集成事件:
库存不够发布OrderStockRejectedIntegrationEvent集成事件
库存足够发布OrderStockConfirmedIntegrationEvent集成事件,这是主流程***订单库存确认(`StockConfirmed`)******************************************************
商品服务(`Catalog.API`)订阅OrderStockConfirmedIntegrationEvent集成事件
OrderStockConfirmedIntegrationEventHandler集成事件处理器会发送SetStockConfirmedOrderStatusCommand命令,然后SetStockConfirmedOrderStatusCommandHandler命令处理器会把订单状态改为StockConfirmed,然后发布领域事件OrderStatusChangedToStockConfirmedDomainEvent,领域事件处理器OrderStatusChangedToStockConfirmedDomainEventHandler会发布OrderStatusChangedToStockConfirmedIntegrationEvent集成事件***订单支付成功(`OrderPaymentSucceededIntegrationEvent`)********************************
支付流程服务(`PaymentProcessor`)订阅OrderStatusChangedToStockConfirmedIntegrationEvent集成事件,OrderStatusChangedToStockConfirmedIntegrationEventHandler会根据配置文件返回不同的集成事件:
配置支付失败发布OrderPaymentFailedIntegrationEvent集成事件
配置支付成功发布OrderPaymentSucceededIntegrationEvent集成事件,这是主流程***订单已支付(`Paid`)*******************************************************************
订单服务(`Ordering.API`)订阅OrderPaymentSucceededIntegrationEvent集成事件
OrderPaymentSucceededIntegrationEventHandler集成事件处理器会发送SetPaidOrderStatusCommand命令
SetPaidOrderStatusCommandHandler命令处理器会把订单状态改成Paid,然后发布领域事件OrderStatusChangedToPaidDomainEvent,领域事件处理器OrderStatusChangedToPaidDomainEventHandler会发布OrderStatusChangedToPaidIntegrationEvent集成事件***订单超时(`GracePeriodConfirmedIntegrationEvent`)***********************************
商品服务(`Catalog.API`)订阅OrderStatusChangedToPaidIntegrationEvent集成事件,会扣除库存
Webhooks.API订阅OrderStatusChangedToPaidIntegrationEvent集成事件,通知第三方服务# 可能物流一般是第三方服务了,所以ehop的订单状态到这就没了,剩下的物流状态一般由第三方提供OrderStartedIntegrationEventHandlerGracePeriodConfirmedIntegrationEventOrderStatusChangedToAwaitingValidationIntegrationEventOrderStatusChangedToStockConfirmedIntegrationEventHandlerOrderStatusChangedToPaidIntegrationEventHandlerOrderStatusChangedToShippedIntegrationEventHandlerOrderStatusChangedToCancelledIntegrationEvent

📌 创作不易,感谢支持!

每一篇内容都凝聚了心血与热情,如果我的内容对您有帮助,欢迎请我喝杯咖啡☕,您的支持是我持续分享的最大动力!

💬 加入交流群(QQ群):576434538

微信打赏

相关新闻

  • 用 TensorFlow 构建深度学习验证码识别系统
  • 20251205 之所思 - 人生如梦
  • git洁癖:如果冲突采用远端

最新新闻

  • MC68HC908JG16 USB寄存器与中断机制深度解析
  • 2026年6月最新劳力士中国官方售后服务热线客服电话地址网点 - 劳力士服务中心
  • 2026年6月最新天梭中国官方售后客户电话地址与服务中心网点 - 天梭服务中心
  • 2026重庆名表回收梯队榜单|正规机构实力评级,收的顶S级领跑 - 奢侈品回收测评
  • 2026年超声波口罩机源头厂商推荐|从核心部件到整线交付,国产设备选型指南 - 速递信息
  • 深度学习新手实操路线图:从零跑通模型到工业部署

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号