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
上一篇 17小时前
下一篇 16小时前

相关推荐

  • Go工程师体系课 013

    订单事务 先扣库存 后扣库存 都会对库存和订单都会有影响, 所以要使用分布式事务 业务(下单不对付)业务问题 支付成功再扣减(下单了,支付时没库存了) 订单扣减,不支付(订单超时归还)【常用方式】 事务和分布式事务 1. 什么是事务? 事务(Transaction)是数据库管理系统中的一个重要概念,它是一组数据库操作的集合,这些操作要么全部成功执行,要么全部…

  • 编程基础 0001_基础教程

    go 什么是 Go是一门并发支持、垃圾加收的编译型系统编程语言,具有静态编译语言的高性能和动态语言的,主要特点如下 类型安全和内存安全 以非常直观和极低代价的方案实现高并发 高效的垃圾回收机制 快速编译(同时解决了 C 语言中头文件太多的问题) UTF-8 支持 安装 源码安装 标准包安装 第三方安装 标准包安装,一路下一步。安装完后,会自动添加如下环境变量…

    后端开发 20小时前
    900
  • Go工程师体系课 017

    限流、熔断与降级入门(含 Sentinel 实战) 结合课件第 3 章(3-1 ~ 3-9)的视频要点,整理一套面向初学者的服务保护指南,帮助理解“为什么需要限流、熔断和降级”,以及如何用 Sentinel 快速上手。 学习路线速览 3-1 理解服务雪崩与限流、熔断、降级的背景 3-2 Sentinel 与 Hystrix 对比,明确技术选型 3-3 Sen…

    后端开发 3小时前
    400
  • Go工程师体系课 015

    Docker 容器化 —— Go 项目实战指南 一、Docker 核心概念 1.1 什么是 Docker Docker 是一个开源的容器化平台,它可以将应用程序及其所有依赖项打包到一个标准化的单元(容器)中,从而实现"一次构建,到处运行"。对于 Go 开发者而言,Docker 解决了以下痛点: 开发环境与生产环境不一致 依赖管理复杂(数据库、缓存、消息队列等…

    后端开发 5小时前
    400
  • Go资深工程师讲解(慕课) 001

    概览 下载开发: vi emacs idea eclipse vs sublimeIde: GoLand,liteIDE默认 gopath ~/go/src 基本语法 变量定义使用 var,函数外定义可以使用括号的方式 package main import "fmt" //函数外定义要使用var var aa=3 var ss=&quo…

    1天前
    400
简体中文 繁体中文 English