惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
G
GRAHAM CLULEY
T
Threat Research - Cisco Blogs
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
Latest news
Latest news
N
News and Events Feed by Topic
量子位
爱范儿
爱范儿
M
MIT News - Artificial intelligence
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
A
Arctic Wolf
Google Online Security Blog
Google Online Security Blog
W
WeLiveSecurity
S
Security Affairs
Webroot Blog
Webroot Blog
B
Blog
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
博客园 - 司徒正美
H
Heimdal Security Blog
罗磊的独立博客
L
LINUX DO - 最新话题
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园_首页
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
The Hacker News
The Hacker News
Y
Y Combinator Blog
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
PCI Perspectives
PCI Perspectives
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
O
OpenAI News
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News

博客园 - ace--碳水化合物

韦达定理 韦达定理1 梯形1 总平均分 m1 曲线相关 曲线 不等式 抛硬币 错位排列"(全错位)问题 11 1 两圆阴影面积 English1 Tidio 官方帮助中心 ERP 相关系统介绍 蝉翼定理 选配法 利润最大化公式 写在失业的一段话 排列组合-组合 在线简历 概率论与数理统计学习章节 绝对值 比例五大定理 算术平均值与几何平均值 等价符号 公因数与最大公因数 容斥原理 英语2026 机器学习,深度学习,强化学习 分别是什么以及区别是什么 深度学习 监督学习 FAQ IVR TTS选择 k 近邻算法 kaldi 平稳核函数(stationary kernel) Karush-Kuhn-Tucker 条件 凸二次规划(convex quadratic programming) FunASR+FreeSwitch做坐席客服系统记录 freeswitch原理图 客服系统,第三方平台,对话转录音,这些可以不依赖第三方做么 STUN服务器 Gun.js原理 游戏升级记 10 OBB 边界问题 关于yolo26是否可以通过结合java开发 opencv和yolo是一回事情吗 pytorch TorchVision - ace--碳水化合物 PyTorch 和 FashionMNIST 的关系 java record 游戏升级记 9 VibeVoice实现90分钟、多角色播客生成,拓展语音合成新边界 同 WiFi 下用 Claude Code 控制另一台 Windows 电脑 Numpy 1 游戏升级记 8 开源claudecode前端 github star 9k+ 向量数据库skill 游戏升级记 7 游戏升级记 6 关系型数据库,向量数据库,ES,缓存,列式数据库,时序数据库,图数据库等的区别和共同点列举table 多Agent可视化 Agent设计模式 中文 Hermes+Obsidian+LLM wkii,构建AI知识库 Claude Code 前端工程泄露代码开源 游戏升级记 5 ai记忆 Rag 1 游戏升级记 4 游戏升级记 3 游戏升级记 2 AI学习路线 关于hermes agent安装 1 游戏升级记 1 代码迷踪 十三 代码迷踪 十二 ai智能体工程 Rust vs Go 微信小程序实名认证 怎样制作一个街机游戏 跟Claude code说 深入思考 它会思考更深入. googlebusiness profile设置统一白名单的操作,要弹窗模式的 该怎样利用ollama自己训练一个编程大模型 中华AI智能体编程一站式基站构想 打包网站到exe和app 识别的内容一般是试题模板的题号和手写的答题答案(数字) opencv怎么训练 在线SaaS系统做接口版本滚动更新 error: linker `link.exe` not found | = note: program not found - rust 给我一份关于stripe平台的使用开发说明 c++学习记20260219 奥数-平面几何经典定理 奥数-组合数学 奥数-几何 奥数-代数 奥数-数论
stripe相关支付流程 流程示意图
ace--碳水化合物 · 2026-03-06 · via 博客园 - ace--碳水化合物

以下是一个标准的 Stripe 支付流程示意图,涵盖了从用户点击支付到最终完成的完整数据流向:

Stripe 支付核心流程图

┌─────────────┐         ┌──────────────┐         ┌─────────────┐
│   用户端     │         │   你的服务器   │         │   Stripe    │
│  (浏览器/App)│         │  (后端API)    │         │   (支付网关) │
└──────┬──────┘         └──────┬───────┘         └──────┬──────┘
       │                        │                        │
       │  1. 请求创建支付        │                        │
       │ ──────────────────────>│                        │
       │                        │                        │
       │                        │  2. 创建 PaymentIntent │
       │                        │ ──────────────────────>│
       │                        │                        │
       │                        │  3. 返回 client_secret │
       │                        │ <──────────────────────│
       │                        │                        │
       │  4. 返回 client_secret  │                        │
       │ <──────────────────────│                        │
       │                        │                        │
       │  5. 用户填写支付信息     │                        │
       │    (Card Element)      │                        │
       │ ───────────────────────────────────────────────>│
       │                        │                        │
       │  6. Stripe.js 处理支付  │                        │
       │ <───────────────────────────────────────────────│
       │    (显示成功/失败)       │                        │
       │                        │                        │
       │                        │  7. Webhook 通知       │
       │                        │ <──────────────────────│
       │                        │   (payment_intent.succeeded)
       │                        │                        │
       │  8. 查询支付状态         │                        │
       │ ──────────────────────>│                        │
       │                        │  9. 返回订单确认        │
       │ <──────────────────────│                        │
       │                        │                        │

详细流程说明

阶段1:初始化支付 (步骤1-4)

  1. 前端请求:用户点击"立即支付",前端向后端API发送请求,包含金额、货币类型等信息
  2. 创建PaymentIntent:后端使用Secret Key调用Stripe API创建支付意图
  3. 返回client_secret:Stripe生成并返回一个临时的client_secret给后端
  4. 传递到前端:后端将client_secret返回给前端,前端将其保存在内存中

阶段2:用户支付 (步骤5-6)

  1. 收集支付信息:前端渲染Stripe Elements组件(Card Element或Payment Element),用户输入卡号、有效期、CVC等信息
  2. 确认支付:前端调用stripe.confirmCardPayment(client_secret, payment_method),将加密的支付信息直接发送到Stripe(注意:卡信息不经过你的服务器,直接发送给Stripe,这大大降低了你的PCI合规负担)

阶段3:异步通知 (步骤7)

  1. Webhook回调:支付完成后,Stripe会向你在仪表盘配置的Webhook URL发送异步通知(如payment_intent.succeeded
    • 关键点:这是最可靠的支付成功确认方式,应在此更新订单状态
    • 需要考虑网络延迟和重试机制

阶段4:结果反馈 (步骤8-9)

  1. 前端轮询/查询:支付成功后,前端可以主动查询订单状态
  2. 返回确认:后端验证Webhook已处理后,向前端返回最终订单确认信息

不同支付模式的流程对比

方案A:Stripe Checkout(托管页面)

用户 ──> 点击支付 ──> 后端创建Checkout Session ──> 302重定向到Stripe页面 ──> 
用户输入卡信息 ──> 支付完成 ──> 重定向回你的网站(success_url/cancel_url) ──>
Stripe发送Webhook ──> 后端更新订单

优点:实现最快,PCI合规完全由Stripe负责
缺点:用户会离开你的网站

方案B:Payment Element(嵌入式)

用户 ──> 在你网站填写表单 ──> 前端渲染Stripe组件 ──> 
用户直接在当前页面支付 ──> 支付结果实时返回 ──> 
Webhook异步确认

优点:用户体验最好,用户不离开你的网站
缺点:需要更多前端开发工作

方案C:订阅支付流程

用户订阅 ──> 创建订阅(含试用期) ──> 生成发票 ──> 
首次支付 ──> 后续周期自动扣款 ──> 
Webhook处理:invoice.paid(成功) / invoice.payment_failed(失败)

状态流转图

PaymentIntent状态机:
           
           ┌─────────────┐
           │ requires_   │
           │ payment_    │
           │ method      │
           └──────┬──────┘
                  │ 用户提交支付信息
                  ↓
           ┌─────────────┐
           │ requires_   │
           │ action      │ ◄──── 3D Secure验证
           │ (3DS)       │
           └──────┬──────┘
                  │ 验证通过
                  ↓
           ┌─────────────┐
           │ processing  │ ────► 异步处理中
           └──────┬──────┘
                  │ 成功    │ 失败
                  ↓         ↓
           ┌─────────────┐ ┌─────────────┐
           │ succeeded   │ │ requires_   │
           │             │ │ payment_    │
           │             │ │ method      │
           └─────────────┘ └─────────────┘

关键设计要点

  1. 幂等性:创建PaymentIntent时使用idempotency_key,防止重复扣款
  2. Webhook重试:Stripe会尝试发送Webhook最多3天,你的端点需要是幂等的
  3. 3D Secure:自动处理,返回requires_action状态时前端需调用handleCardAction
  4. 错误处理:支付失败、卡被拒、网络超时等情况都需要有优雅的降级方案

代码伪代码流程

// 前端
async function handlePayment() {
  // 1. 获取clientSecret
  const { clientSecret } = await fetch('/api/create-payment', {
    method: 'POST',
    body: JSON.stringify({ amount: 1000 })
  }).then(r => r.json());
  
  // 2. 确认支付
  const { error, paymentIntent } = await stripe.confirmPayment({
    elements,
    clientSecret,
    confirmParams: { return_url: 'https://your-site.com/success' }
  });
  
  // 3. 处理结果
  if (error) showError(error.message);
}

// 后端 - 创建PaymentIntent
app.post('/api/create-payment', async (req, res) => {
  const paymentIntent = await stripe.paymentIntents.create({
    amount: req.body.amount,
    currency: 'usd',
    automatic_payment_methods: { enabled: true }
  });
  res.json({ clientSecret: paymentIntent.client_secret });
});

// 后端 - Webhook处理器
app.post('/webhook', bodyParser.raw({type: 'application/json'}), (req, res) => {
  const sig = req.headers['stripe-signature'];
  const event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
  
  switch(event.type) {
    case 'payment_intent.succeeded':
      // 更新订单状态为已支付
      break;
  }
});

这个流程确保了支付的安全性和可靠性,同时将敏感信息处理交由Stripe负责,最大限度地减轻了你的PCI合规负担。