订单及购物车
先从库存服务中将 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:生成支付请求(关键安全步骤)
商户系统处理:
- 接收用户订单信息
- 构造支付参数(订单号、金额、商品信息等)
- 使用商户私钥对支付请求进行数字签名
- 将签名后的请求发送给支付宝
支付宝验证:
- 接收商户的支付请求
- 使用商户公钥验证请求签名
- 检查"这个请求是否可信任"
- 验证通过后,生成支付 URL
- 将支付 URL 返回给商户系统
安全机制说明:
- 数字签名确保请求来自合法商户
- 防止恶意第三方伪造支付请求
- 保证请求数据在传输过程中未被篡改
步骤 3:用户支付
- 商户系统将支付 URL 返回给浏览器
- 浏览器自动跳转到支付宝支付页面
- 用户在支付宝页面完成支付操作(输入密码、选择支付方式等)
步骤 4:支付结果通知(关键安全步骤)
支付宝处理:
- 处理用户支付操作
- 生成支付结果通知
- 使用支付宝私钥对通知进行数字签名
- 将签名后的通知发送给商户系统
商户系统验证:
- 接收支付宝的支付通知
- 使用支付宝公钥验证通知签名
- 确认通知来自支付宝官方
- 验证支付结果和订单信息
- 更新订单状态,完成交易
安全机制说明:
- 数字签名确保通知来自支付宝官方
- 防止恶意第三方伪造支付成功通知
- 保证支付结果数据的真实性和完整性
数字签名工作原理
数字签名的本质:
- 使用私钥对数据进行加密,生成"签名"
- 使用对应的公钥验证签名,确认数据来源和完整性
- 就像现实中的手写签名,但更加安全和不可伪造
在支付流程中的应用:
- 商户签名:商户用私钥签名 → 支付宝用商户公钥验证
- 支付宝签名:支付宝用私钥签名 → 商户用支付宝公钥验证
安全防护机制
防伪造攻击:
- 没有私钥无法生成有效签名
- 公钥只能验证,不能伪造签名
防篡改攻击:
- 数据被修改后,签名验证会失败
- 确保传输过程中的数据完整性
防重放攻击:
- 通常配合时间戳和随机数使用
- 防止恶意重复提交相同的支付请求
加密技术应用
- 对称加密:用于大量支付数据的快速加密传输
- 非对称加密:用于数字签名和身份验证
- 公钥验证:确保通信双方的真实性和数据完整性
支付宝开发平台
环境配置
沙箱环境(测试)
- 使用支付宝沙箱环境进行测试
- 配置沙箱应用 ID 和密钥
- 设置回调通知地址
生产环境
- 申请正式应用并审核通过
- 配置正式环境密钥
- 设置 HTTPS 回调地址
接入注意事项
- 密钥管理
- 妥善保管应用私钥,不能泄露
- 定期更换密钥
- 使用环境变量存储敏感信息
- 通信安全
- 所有接口调用必须使用 HTTPS
- 验证支付宝公钥的真实性
- 对敏感数据进行加密传输
- 数据验证
- 验证支付通知的签名
- 检查订单金额和状态
- 防止重复处理通知
沙箱环境的公钥和私钥
主题测试文章,只做测试使用。发布者:Walker,转转请注明出处:https://joyjs.cn/archives/4781