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://joyjs.cn/archives/4781

(0)
Walker的头像Walker
上一篇 2025年11月25日 09:00
下一篇 2025年11月25日 06:00

相关推荐

  • 【开篇】

    我是Walker,生于八十年代初,代码与生活的旅者。全栈开发工程师,游走于前端与后端的边界,执着于技术与艺术的交汇点。 代码,是我编织梦想的语言;项目,是我刻画未来的画布。在键盘的敲击声中,我探索技术的无尽可能,让灵感在代码里永恒绽放。 深度咖啡爱好者,迷恋每一杯手冲的诗意与仪式感。在咖啡的醇香与苦涩中,寻找专注与灵感,亦如在开发的世界中追求极致与平衡。 骑…

    2025年2月6日 个人
    1.9K00
  • Go工程师体系课 005【学习笔记】

    微服务开发 创建一个微服务项目,所有的项目微服务都在这个项目中进行,创建joyshop_srv,我们无创建用户登录注册服务,所以我们在项目目录下再创建一个目录user_srv 及user_srv/global(全局的对象新建和初始化)user_srv/handler(业务逻辑代码)user_srv/model(用户相关的 model)user_srv/pro…

    个人 2025年11月25日
    4400
  • 热爱运动,挑战极限,拥抱自然

    热爱 在这个快节奏的时代,我们被工作、生活的压力所包围,常常忽略了身体的需求。而运动,不仅仅是一种健身方式,更是一种释放自我、挑战极限、与自然共舞的生活态度。无论是滑雪、攀岩、冲浪,还是跑步、骑行、瑜伽,每一种运动都能让我们找到内心的激情,感受到生命的跃动。 运动是一场自我挑战 挑战极限,不仅仅是职业运动员的专属,而是每一个热爱运动的人都可以追求的目标。它可…

    个人 2025年2月26日
    1.1K00
  • TS珠峰 002【学习笔记】

    泛型 /* * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git &a…

    个人 2025年3月27日
    1.3K00
  • Go工程师体系课 001【学习笔记】

    转型 想在短时间系统转到Go工程理由 提高CRUD,无自研框架经验 拔高技术深度,做专、做精需求的同学 进阶工程化,拥有良好开发规范和管理能力的 工程化的重要性 高级开的期望 良好的代码规范 深入底层原理 熟悉架构 熟悉k8s的基础架构 扩展知识广度,知识的深度,规范的开发体系 四个大的阶段 go语言基础 微服务开发的(电商项目实战) 自研微服务 自研然后重…

    个人 2025年11月25日
    5500

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
欢迎🌹 Coding never stops, keep learning! 💡💻 光临🌹