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