dotnet-ecommerce-api
以 .NET 10 打造的電商後端 API 架構範本。分層架構、Autofac DI、SqlSugar ORM、Redis 快取與佇列、Hangfire 排程都接好了,金流再加一個 Provider 就能擴充。
- Middlewares / Filters請求日誌、例外處理、驗證
- Controllers路由、模型驗證、ViewModel ⇄ DTO
- Services業務邏輯、交易、快取
- Payment Provider綠界、藍新,統一介面
- RepositoriesSqlSugar 資料存取
- MySQL / SQL Server · Redis資料、快取、佇列、排程
含聯盟推廣連結
它幫你省下什麼
開一個新的電商後端,前兩週通常都花在這些事上。
從零搭分層
Controller、Service、Repository 各自一個專案,介面與實作分開(IServices / IRepository)。新功能照命名慣例放進對應的層就好,不必每次重新討論東西該放哪裡。
一個一個手動註冊 DI
Autofac 依命名慣例自動註冊 Service 與 Repository,新增類別不必回頭改註冊程式,也能用 Castle DynamicProxy 掛 AOP。
每接一家金流就重寫一次
所有金流商實作同一個 IPaymentProvider,由 Factory 依付款方式建立。新增一家只要實作一個 Provider、加一段設定,呼叫端完全不用改。
背景工作與佇列另外拼
Hangfire 排程(Redis / MySQL storage)與 Redis Message Queue 已經接好,寄信、對帳這類非同步工作有固定的位置放。
金鑰散落在設定檔
appsettings.json 只是範本,機敏欄位都是佔位值。本機用 appsettings.Development.json(已被 .gitignore 排除),容器用環境變數以 __ 覆寫任何欄位。
金流不敢改
金流模組有獨立的 xUnit 測試專案,用綠界官方公開的測試商店參數與藍新假資料,不會連到正式環境。
裡面有什麼
電商後端常見的基礎建設都已經接好,直接在上面寫業務邏輯。
分層架構
Controller → Service → Repository → Database,介面與實作分離。
Autofac DI
依命名慣例自動註冊 Service / Repository,支援 AOP(Castle DynamicProxy)。
SqlSugar ORM
MySQL / MariaDB 與 SQL Server 用設定切換。
JWT 認證
JWT Bearer 加自訂 Policy 授權。
Redis 快取與佇列
Redis 快取、Redis Message Queue(InitQ)。
Hangfire 排程
背景工作與 Dashboard,Storage 可用 Redis 或 MySQL。
金流 Provider
統一 IPaymentProvider 介面加 Factory,內建綠界與藍新。
其他工具
Swagger、NLog + Seq 結構化日誌、AutoMapper、MiniProfiler、Turnstile / reCAPTCHA、CRUD 程式碼產生器。
金流模組:加一家,只寫一個 Provider
EC226.Payment 用 Strategy 加 Factory 設計,每家金流商都實作同一個介面。
public interface IPaymentProvider
{
PaymentProviderType ProviderType { get; }
PaymentResponse CreatePayment(PaymentRequest request);
PaymentCallbackResult ValidateCallback(IFormCollection form);
PaymentCallbackResult ValidateCallback(string encryptedData);
string GenerateCallbackResponse(bool success);
}
var provider = _providerFactory.Create(PaymentType.ECPAY);
var response = provider.CreatePayment(request);新增一家金流商
- 1
在 Providers/{Name}/ 實作 IPaymentConfig 與 IPaymentProvider。
- 2
在 PaymentProviderFactory 加入對應的建立邏輯。
- 3
在 appsettings.json 的 Payment:Providers 新增設定區段。
- 4
在 EC226.MemberSite.Services 繼承 PaymentServiceBase 實作服務。
目前支援
綠界 ECPay
信用卡、ATM、超商代碼、超商取貨付款(CheckMacValue SHA256 簽章)
藍新 Newebpay
信用卡、WebATM、ATM 轉帳(AES-256-CBC 加密 + SHA256 TradeSha)
Stripe / PayPal / Amazon Pay
透過 Payment:PaymentOptions 設定
專案結構
一個方案拆成多個專案,各自只做一件事。
EC226.MemberSite.Api
Web API 進入點:Controllers、Program.cs、設定檔、郵件範本
EC226.MemberSite.Services / IServices
業務邏輯實作與介面
EC226.MemberSite.Repository / IRepository
資料存取實作(SqlSugar)與介面
EC226.MemberSite.Model
Entities、ViewModels、DTOs、常數
EC226.Payment
金流模組:Abstractions / Factory / Providers
EC226.Auth
JWT 認證授權
EC226.Core
DI、SqlSugar、Redis、Swagger 註冊
EC226.Caching
快取抽象(Redis / Memory)
EC226.RedisMQ
Redis 訊息佇列消費者
EC226.Task
Hangfire 背景工作
EC226.Filter / Middlewares
Action / Exception Filters、請求日誌、IP 紀錄
EC226.CodeGenerator
CRUD 程式碼產生器範本
技術堆疊
都是 .NET 生態系裡成熟、好找資料的套件。
開始之前要知道的事
先講清楚,免得 clone 下來才發現跑不起來。
- 1
這是架構開源,金鑰要自己填
所有金鑰、密碼、連線字串、內部主機位址都已移除,appsettings.json 只留佔位值。資料庫、Redis、JWT、AES、SMTP、金流的 HashKey / HashIV 都要換成你自己的值才能跑。
- 2
需要 .NET 10 SDK、資料庫與 Redis
MySQL 5.7+ / MariaDB 10.4+(或 SQL Server)加上 Redis。repo 附了建置本機 Redis 的腳本與 MariaDB 的 Dockerfile,用 Docker 起最快。
- 3
範例資料庫要另外匯入
啟動資料庫後,匯入 EC226.MemberSite.Api/initMariadb/ 底下的 schema 與種子資料 SQL。init.sql 建立的帳號預設密碼是 change_me,記得改掉並同步更新連線字串。
從原始碼跑起來
- 1
git clone https://github.com/markku636/dotnet-ecommerce-api 並進入專案目錄。
- 2
用 build-local-redis-de.ps1 起 Redis,用 EC226.MemberSite.Api/initMariadb 的 Dockerfile 起 MariaDB,再匯入範例 schema。
- 3
複製 EC226.MemberSite.Api/appsettings.json 成 appsettings.Development.json,填入連線字串與金鑰。
- 4
dotnet restore、dotnet build,再 dotnet run --project EC226.MemberSite.Api。
- 5
開 http://localhost:<port>/doc 看 Swagger。要部署就用 EC226.MemberSite.Api/Dockerfile 建映像檔,機敏設定用環境變數注入。
先確認能建置(不需要資料庫):
站長優惠
寫程式的地方,網路常常不是你的
NordVPN 把你的連線整條加密:咖啡廳與飯店 Wi-Fi 不再是別人的監聽管道,出差時銀行 App、公司後台、台灣的影音服務照樣連得回去。開 App 按一顆鈕就好,NordLynx 協定跑起來日常上網幾乎無感,一個帳號可以同時保護 10 台裝置。30 天退款保證,不合用全額退。
- 公共 Wi-Fi 全程加密,攔到也只是亂碼
- 137 國節點,出國連得回台灣服務
- 1 帳號 10 台裝置,30 天退款保證
含聯盟推廣連結

