mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3
2030 字
5 分钟
《学习笔记》微商城支付流程
2026-03-17

引用与修改声明
本文部分内容与代码基于开源项目 CodeGuide(遵循 Apache-2.0 协议)进行整合。
原作者:小傅哥 (bugstack.cn)
原文/源码链接CodeGuide
修改说明:本文在原文基础上进行了删改,仅作学习记录与知识分享。特此鸣谢原作者的开源贡献。

《小型支付商城系统》#

第3-2节:微信公众号鉴权#

一、本章诉求#

在 mvc 分层框架结构下添加微信公众号鉴权所需的接口,并通过 natapp 内网穿透组件,暴漏本地接口,让微信公众号平台可以配置使用。

本节我们会把重点放在 mvc 工程结构的使用,把关于微信的公众号鉴权操作流程按需放到所属模块下。

二、功能分区#

mvc 工程结构区内,简单的划分了基础包、数据库、逻辑实现、接口实现。我们在这一节先使用到基础包和提供接口。

  • common 承载着对接微信公众号的基础功能。
  • web 下的 controller 用于实现对外提供的接口。

第3-3节:登录功能设计实现#

一、本章诉求#

通过微信公众号平台提供的 API 接口,做微信公众号扫码登录。

扫码登录主要是需要微信公众号平台,提供一个生成带参的二维码,让用户使用微信扫描二维码登录。扫码后我们在微信公众号对接的接口中会接收到扫码完成消息,里面就会含带二维码参数,这样就可以知道到是谁扫描的二维码。我们把扫描后解析的信息和用户做绑定,也就可以完成登录操作了。

二、登录流程#

微信扫码登录的流程主要包括;用户、浏览器、后端服务、公众号,这四个部分。我们可以先通过UML流程图,了解下整个调用关系。

  • 首先,由用户发起登录操作。让WEB页面从服务端获取登录凭证。
  • 之后,前端页面拿到登录凭证后,可以使用 Ticket 从公众号服务平台换取二维码。
  • 最后,用户扫码登录。扫码后,服务端会接收到来自公众号的回调消息,服务端再把回调消息中的 openid【用户唯一标识】和 ticket 进行绑定。这个时候你也可以创建出 jwt token 反馈给前端,作为登录成功的存储信息,后续校验 jwt token 就可以了。

第3-4节:商品下单#

一、本章诉求#

对接数据库表,完成商品下单。

要注意商品下单中,要考虑整个流程中可能存在的失败节点。做编程开发很多时候都是在处理异常。商品下单中,或者下单完成都可能存在失败的情况。比如写库失败,或者调用外部支付平台创建支付单失败,也可能存在用户创建完支付单但未支付的情况。

这些流程都是要在下单中做的处理,在公司的实际场景中,下单还要过很多规则校验。比如账户状态、风控、营销、试算、锁券等等流程,才会到下单。所以很多这样的场景,都会考虑使用设计模式进行解耦,否则很难完成后续的迭代。

二、下单流程#

如图,本节我们先做下单流程。调用 Alipay 支付宝创建支付单和等待回调我们后续章节在处理。

  • 首先,用户在系统中创建订单(流水单),创建过程中需要判断是否存在未支付订单,存在则可以直接返回。另外还有一种可能,创建的订单存在,但没有支付单,也就是【掉单】。这是因为本身的业务系统和外部的支付创建(支付宝)不是一个事务,不能一起成功或失败,所以要做一些流程的校验。比如我们创建订单成功,但创建支付单失败。这个之后用户继续创建订单,就会优先使用这笔订单创建支付单。如果流程中没有存在的掉单,则直接创建支付单即可。
  • 之后,创建完支付宝订单,会由页面跳转到网络收银台,引导用户完成支付操作。
  • 最后,就是接收支付回调消息,更新本地的订单状态,以及推动后续流程。比如;发放商品、驱动物流、虚拟支付等。当然在实际的商城中,还会有逆向流程,比如商品有问题,或者用户主动发起退单。这个时候就要走逆向流程,退单、审核、退款流程。你可以尝试完成。

第3-5节:对接支付#

一、本章诉求#

通过引入支付宝支付 sdk,实例化支付对象,完成支付对接。并提供商品交易下单和回调接口。

这里要记住一点,所有不是数据库一次事务提交的操作,都没法保证事务一致性。包括;http接口、rpc接口、mq消息等。这些调用过程,都需要有任务作为补偿处理,保证最终一致性。

他们的失败可能是网络超时,导致在调用过程中发生,也可能是消费时发生进行重试。所以这类接口调用除了有任务保持一致性,还有就是要有唯一幂等字段。确保在重复消费的过程中,也只是有一条记录产生或者发生变更。

二、业务流程#

如图,本节我们来完成支付宝沙箱对接的流程;

  • 创建完成本地订单后,调用支付宝沙箱创建支付订单。
  • 在这个过程,如果发生 http 超时失败,那么会有二次用户请求时,检查到掉单重新发起创建动作。

第3-6节:支付回调处理#

一、本章诉求#

对支付流程收尾,完成支付回调、掉单补偿、超时关单的处理,以及监听支付成功消息。

到本节的处理后,我们就把支付流程全部做完了。其实这也是面试中喜欢的问的场景,只有把一个支付的流程,从下单到支付再到回调处理,以及处理各项补偿和监听。面试官才会觉得你是真的对接了支付,而不是在描述一个 CRUD 流程。

二、业务流程#

如图,本节我们来完成支付宝沙箱回调和补偿的流程;

  • 本节完成支付成功后的回调处理,更新数据库订单状态。同时发送MQ消息。比如一些发货场景,就是这个MQ发送出来之后做的处理。
  • 另外,我们在完成一些关于超时关单、掉单补偿的流程。

第3-7节:前端页面#

一、本章诉求#

搭建简单的前端页面,自动轮训检查扫描登录状态,完成登录跳转商品下单页。

二、业务流程#

如图,本节可以串联用户UI流程,登录下单到支付完成。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

《学习笔记》微商城支付流程
https://hci.de5.net/posts/pay-mall/
作者
雪银星月
发布于
2026-03-17
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录