Go工程师体系课 008

订单及购物车

先从库存服务中将 srv 的服务代码框架复制过来,查找替换对应的名称(order_srv)

加密技术基础

对称加密(Symmetric Encryption)

原理:

  • 使用同一个密钥进行加密和解密
  • 就像一把钥匙,既能锁门也能开门
  • 加密速度快,适合大量数据传输

使用场景:

  • 本地文件加密
  • 数据库内容加密
  • 大量数据传输时的内容加密
  • 内部系统间的快速通信

优缺点:

  • ✅ 速度快,效率高
  • ❌ 密钥分发困难,容易被截获

非对称加密(Asymmetric Encryption)

原理:

  • 使用一对密钥:公钥和私钥
  • 公钥加密的内容只能用私钥解密
  • 私钥签名的内容可以用公钥验证
  • 就像邮箱地址(公钥)和密码(私钥)

使用场景:

  • 数字签名验证身份
  • 安全传输对称加密的密钥
  • HTTPS 证书验证
  • 区块链交易签名

优缺点:

  • ✅ 安全性高,密钥分发安全
  • ❌ 速度慢,不适合大量数据

支付宝支付流程详细解析

支付流程图

graph TD
    A[用户浏览器] -->|1. 下订单| B[慕学生鲜商户系统]
    B -->|2. 返回支付URL| A
    A -->|3. 跳转支付宝支付| C[支付宝支付平台]
    B -->|发起支付请求| C

    subgraph "商户端密钥管理"
        D[商户私钥<br/>自己留着]
        E[商户公钥<br/>给支付宝]
    end

    subgraph "支付宝端密钥管理"
        F[支付宝私钥<br/>严格保密]
        G[支付宝公钥<br/>给商户]
    end

    subgraph "安全验证机制"
        H[数字签名验证]
        I[请求可信度检查]
        J[通知真实性验证]
    end

    B -.->|使用私钥签名| D
    C -.->|使用公钥验证| E
    C -.->|使用私钥签名| F
    B -.->|使用公钥验证| G

    C -->|4. 支付结果通知| B

    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style D fill:#ffebee
    style E fill:#fff3e0
    style F fill:#ffebee
    style G fill:#fff3e0
    style H fill:#f1f8e9
    style I fill:#f1f8e9
    style J fill:#f1f8e9

系统架构和参与者

三个核心角色:

  • 浏览器(Browser):用户端,负责用户交互
  • 慕学生鲜(商户系统):电商平台的后端服务
  • 支付宝(Alipay):第三方支付平台

密钥管理体系(非对称加密的核心)

商户端密钥管理

  • 私钥(秘钥 - 自己留着)

  • 商户严格保密,绝不外泄

  • 用于对发送给支付宝的请求进行数字签名
  • 证明请求确实来自该商户

  • 公钥(公钥 - 给支付宝)

  • 提供给支付宝平台
  • 支付宝用它来验证商户请求的签名
  • 确保请求的真实性和完整性

支付宝端密钥管理

  • 私钥(秘钥)

  • 支付宝严格保密

  • 用于对支付通知进行数字签名
  • 证明通知确实来自支付宝官方

  • 公钥(公钥 - 给自己的)

  • 提供给商户系统
  • 商户用它来验证支付宝通知的签名
  • 确保支付结果通知的真实性

详细支付流程步骤

步骤 1:用户下单

  • 用户在浏览器中浏览商品
  • 选择商品并提交订单
  • 浏览器向商户系统发送订单请求

步骤 2:生成支付请求(关键安全步骤)

商户系统处理:

  1. 接收用户订单信息
  2. 构造支付参数(订单号、金额、商品信息等)
  3. 使用商户私钥对支付请求进行数字签名
  4. 将签名后的请求发送给支付宝

支付宝验证:

  1. 接收商户的支付请求
  2. 使用商户公钥验证请求签名
  3. 检查"这个请求是否可信任"
  4. 验证通过后,生成支付 URL
  5. 将支付 URL 返回给商户系统

安全机制说明:

  • 数字签名确保请求来自合法商户
  • 防止恶意第三方伪造支付请求
  • 保证请求数据在传输过程中未被篡改

步骤 3:用户支付

  • 商户系统将支付 URL 返回给浏览器
  • 浏览器自动跳转到支付宝支付页面
  • 用户在支付宝页面完成支付操作(输入密码、选择支付方式等)

步骤 4:支付结果通知(关键安全步骤)

支付宝处理:

  1. 处理用户支付操作
  2. 生成支付结果通知
  3. 使用支付宝私钥对通知进行数字签名
  4. 将签名后的通知发送给商户系统

商户系统验证:

  1. 接收支付宝的支付通知
  2. 使用支付宝公钥验证通知签名
  3. 确认通知来自支付宝官方
  4. 验证支付结果和订单信息
  5. 更新订单状态,完成交易

安全机制说明:

  • 数字签名确保通知来自支付宝官方
  • 防止恶意第三方伪造支付成功通知
  • 保证支付结果数据的真实性和完整性

数字签名工作原理

数字签名的本质:

  • 使用私钥对数据进行加密,生成"签名"
  • 使用对应的公钥验证签名,确认数据来源和完整性
  • 就像现实中的手写签名,但更加安全和不可伪造

在支付流程中的应用:

  1. 商户签名:商户用私钥签名 → 支付宝用商户公钥验证
  2. 支付宝签名:支付宝用私钥签名 → 商户用支付宝公钥验证

安全防护机制

防伪造攻击:

  • 没有私钥无法生成有效签名
  • 公钥只能验证,不能伪造签名

防篡改攻击:

  • 数据被修改后,签名验证会失败
  • 确保传输过程中的数据完整性

防重放攻击:

  • 通常配合时间戳和随机数使用
  • 防止恶意重复提交相同的支付请求

加密技术应用

  • 对称加密:用于大量支付数据的快速加密传输
  • 非对称加密:用于数字签名和身份验证
  • 公钥验证:确保通信双方的真实性和数据完整性

支付宝开发平台

环境配置

沙箱环境(测试)

  • 使用支付宝沙箱环境进行测试
  • 配置沙箱应用 ID 和密钥
  • 设置回调通知地址

生产环境

  • 申请正式应用并审核通过
  • 配置正式环境密钥
  • 设置 HTTPS 回调地址

接入注意事项

  1. 密钥管理

  2. 妥善保管应用私钥,不能泄露

  3. 定期更换密钥
  4. 使用环境变量存储敏感信息

  5. 通信安全

  6. 所有接口调用必须使用 HTTPS

  7. 验证支付宝公钥的真实性
  8. 对敏感数据进行加密传输

  9. 数据验证

  10. 验证支付通知的签名
  11. 检查订单金额和状态
  12. 防止重复处理通知

沙箱环境的公钥和私钥

主题测试文章,只做测试使用。发布者:Walker,转转请注明出处:https://walker-learn.xyz/archives/6774

(0)
Walker的头像Walker
上一篇 2026年3月8日 15:11
下一篇 2026年3月9日 12:56

相关推荐

  • Go工程师体系课 007

    商品微服务 实体结构说明 本模块包含以下核心实体: 商品(Goods) 商品分类(Category) 品牌(Brands) 轮播图(Banner) 品牌分类(GoodsCategoryBrand) 1. 商品(Goods) 描述平台中实际展示和销售的商品信息。 字段说明 字段名 类型 说明 name String 商品名称,必填 brand Pointer …

    后端开发 2026年3月7日
    6100
  • 编程基础 0006_并发进阶_sync包与Context

    并发进阶:sync 包与 Context 一、sync 包详解 1. sync.Mutex 与 sync.RWMutex // Mutex: 互斥锁,同一时间只有一个 goroutine 能持有 var mu sync.Mutex var count int func increment() { mu.Lock() defer mu.Unlock() cou…

    后端开发 2026年3月6日
    6100
  • Go资深工程师讲解(慕课) 006_函数式编程

    Go 函数式编程 对应视频 Ch6(6-2 函数式编程例一),在 002.md 基础上扩展更多函数式编程模式 1. 回顾:Go 中函数是一等公民 Go 不是纯函数式语言,但函数可以作为:- 变量- 参数- 返回值- 存放在数据结构中 // 函数作为变量 var add = func(a, b int) int { return a + b } // 函数作为…

    后端开发 2026年3月6日
    6100
  • Go工程师体系课 014

    rocketmq 快速入门 去我们的各种配置(podman)看是怎么安装的 概念介绍 RocketMQ 是阿里开源、Apache 顶级项目的分布式消息中间件,核心组件: NameServer:服务发现与路由 Broker:消息存储、投递、拉取 Producer:消息生产者(发送消息) Consumer:消息消费者(订阅并消费消息) Topic/Tag:主题/…

    后端开发 2026年3月7日
    14400
  • 日积月累 电子书目录与推荐

    Go 语言电子书分类目录与推荐 电子书来源目录:/Users/walker/Downloads/www.zxit8.com_017—电子书/共计 48 份资料(47 个编号 PDF + 1 本独立命名 Go语言实战 + 1 份源码 zip)整理时间:2026-03-06 本目录对全部电子书按主题分类并给出推荐度评级,帮助读者根据自身水平和需求选择合适的学习材…

    后端开发 2026年3月7日
    5700
简体中文 繁体中文 English