技术深度剖析
powellc/django-shop-stripe 插件构建于 Stripe 遗留的 Charges API 之上,该 API 直接使用令牌化的卡信息创建收费对象。其架构非常简单:在结账过程中,插件通过客户端 JavaScript 生成 Stripe 令牌,将其发送到服务器,然后调用 `stripe.Charge.create()`。这种方法对于基本的一次性支付效果良好,但缺乏对支付意图等现代功能的支持,而支付意图正是 PSD2 法规下 SCA 合规所必需的。
新的 awesto/djangoshop-stripe 仓库从根本上围绕 Stripe 的 PaymentIntents API 重新构建了集成架构。该 API 引入了一个状态机:首先创建 PaymentIntent,然后进行确认(通常在客户端使用 Stripe.js),最后完成捕获。这允许异步支付方式(例如 iDEAL、Sofort)和 3D Secure 认证,而不会阻塞用户流程。
关键架构差异:
| 特性 | powellc/django-shop-stripe (已弃用) | awesto/djangoshop-stripe (活跃) |
|---|---|---|
| Stripe API | Charges API (遗留) | PaymentIntents API (当前) |
| SCA/3D Secure | 不支持 | 通过 PaymentIntents 原生支持 |
| Webhook 处理 | 基本的 charge.succeeded | 全面:payment_intent.succeeded, payment_intent.payment_failed 等 |
| Django 版本支持 | Django 1.11–2.2 | Django 3.2+ (兼容 4.x) |
| Python 版本 | Python 2.7–3.6 | Python 3.8+ |
| 测试覆盖率 | ~60% | ~85% (基于仓库 CI 徽章) |
| GitHub 星标 | 16 (下降中) | 42 (增长中) |
数据要点: 从 Charges 迁移到 PaymentIntents 并非可选——Stripe 已于 2022 年弃用了新集成的 Charges API,并最终将停止服务。新插件对现代 Django 和 Python 版本的支持对于安全补丁和兼容性至关重要。
底层机制: 新插件使用 Stripe 的 `stripe.PaymentIntent.create()` 并设置 `confirm: false`,然后将 client_secret 传递给前端。前端使用 Stripe.js 通过 `stripe.confirmCardPayment()` 处理 3D Secure 弹窗。完成后,一个 Webhook 监听器更新订单状态。这种支付授权与捕获的解耦允许在最终确定交易之前进行库存预留和欺诈检查。
值得关注的 GitHub 仓库:
- `awesto/djangoshop-stripe`:活跃的分支,由 django-shop 核心团队维护。最近的提交(截至 2025 年 6 月)包括对 Stripe 最新 API 版本(2023-10-16)的支持。
- `awesto/django-shop`:父级框架,其本身在 2.0+ 版本支持 Django 4.x 和异步视图后出现了复苏。
关键参与者与案例研究
从 powellc/django-shop-stripe 到 awesto/djangoshop-stripe 的过渡是开源项目生命周期管理的一个典型案例。原始插件由 `powellc`(Chris Powell)创建,他是 django-shop 生态系统的早期贡献者。随着该框架在 `awesto` 组织(由 Jacob Rief 领导,他是 django-shop 的主要维护者)下成熟,支付插件逐渐落后。
Jacob Rief 自 2015 年以来一直是 django-shop 背后的推动力量。他的策略是将支付后端整合到 awesto 旗下,以确保一致的质量和及时的更新。这反映了 Django 自身处理第三方包的方式——Django 软件基金会鼓励为常见集成提供官方“受祝福”的包。
与其他 Stripe-Django 集成的比较:
| 产品 | 星标 | 活跃维护 | SCA 支持 | Django 4.x |
|---|---|---|---|---|
| awesto/djangoshop-stripe | 42 | 是 (2025 年 6 月更新) | 完整 | 是 |
| dj-stripe (由 dj-stripe 组织) | 2,100 | 是 | 完整 | 是 |
| stripe-python (官方 SDK) | 1,500 | 是 | SDK 级别 | 是 |
| powellc/django-shop-stripe | 16 | 否 | 无 | 否 |
数据要点: 虽然 dj-stripe 是一个更流行的通用 Django-Stripe 库,但 awesto/djangoshop-stripe 是为 django-shop 量身定制的,与该框架的购物车和订单模型提供了更紧密的集成。对于 django-shop 用户来说,awesto 插件是唯一明智的选择。
案例研究:大规模迁移
一家运行 django-shop 1.x 并使用旧 Stripe 插件的中型欧洲电商平台面临 PSD2 合规截止日期。迁移到 awesto/djangoshop-stripe 需要:
1. 将 django-shop 从 1.x 升级到 2.x(模板渲染中的破坏性变更)
2. 将所有 `stripe.Charge.create()` 调用替换为 `PaymentIntent` 流程
3. 将前端 Stripe.js 从 v2 更新到 v3
4. 添加 3D Secure 回退 UI
两名开发人员组成的团队总工程工作量约为 40 小时,包括测试。迁移后,由于 SCA 处理减少了摩擦,该平台的结账转化率提高了 12%。
行业影响与市场动态
powellc/django-shop-stripe 的弃用是整个支付处理行业更大转变的一个缩影。Stripe 的 API 演进是由监管压力驱动的