async-stripe Checkout 集成:Checkout Session 与 Payment Link 双方案解析
【免费下载链接】async-stripeAsync (and blocking!) Rust bindings for the Stripe API项目地址: https://gitcode.com/gh_mirrors/as/async-stripe
在 Rust 生态中,async-stripe 是最成熟的 Stripe API 绑定库,它同时提供异步与阻塞两种模式,让开发者用纯 Rust 就能完成完整的支付链路搭建。而 Checkout 集成是其中使用率最高的场景——你不需要自己实现支付表单,Stripe 会为你托管整个结账页面。本文将为你解析 async-stripe Checkout 集成的两大方案:Checkout Session(结账会话)与Payment Link(支付链接),并通过真实示例代码帮你快速上手。
什么是 async-stripe?Rust 开发者的 Stripe 集成利器
async-stripe 是一套完全类型安全的 Stripe API 绑定,代码由官方 OpenAPI 规范自动生成,覆盖 Billing、Checkout、Connect、Payment 等几乎所有模块。它的核心优势包括:
- 🦀 纯 Rust 实现,无运行时依赖负担
- ⚡ 同时支持
async与阻塞式(blocking)调用,适配不同应用架构 - 🔒 编译期类型检查,参数错误在写代码时就能被发现
- 📦 模块化拆分,可按需引入(如
stripe-checkout、stripe-payment),控制二进制体积
在 Checkout 集成方面,async-stripe 为你封装了两种托管支付方式,接下来我们逐一认识。
认识 Stripe Checkout 的两种集成方式
Stripe 提供两种"托管支付页"思路,它们在 async-stripe 中分别对应stripe-checkout与stripe-payment两个 crate:
| 对比维度 | Checkout Session(结账会话) | Payment Link(支付链接) |
|---|---|---|
| 核心类型 | CreateCheckoutSession | CreatePaymentLink |
| 是否需要先建客户 | 通常需要(可预填信息) | 完全不需要 |
| 典型场景 | 电商购物车、订阅、多商品结算 | 社交分享、邮件营销、线下扫码 |
| 个性化程度 | 高(可自定义字段、优惠码、运费) | 中(配置相对精简) |
| 适合人群 | 有自己的网站/App 的开发者 | 追求极简交付的独立开发者 |
简单说:Checkout Session 适合"程序化"的结账流程,Payment Link 适合"一键分享"的收钱场景。下面我们通过官方示例源码,看看两种方案各自怎么落地。
环境准备:最快配置方法
在动手写代码前,先完成两步准备工作:
- 获取测试密钥:在 Stripe 后台复制
STRIPE_TEST_SECRET_KEY(测试密钥,以sk_test_开头) - 创建客户端:async-stripe 提供了极简的
Client构造方式:
let secret_key = std::env::var("STRIPE_TEST_SECRET_KEY")?; let client = stripe::Client::new(secret_key);如果你需要更精细的控制(比如标注应用信息、模拟 Stripe Connect 子账户),可以使用ClientBuilder(见 client_config.rs),它支持app_info和account_id配置。对于刚入门的读者,Client::new完全够用。
Checkout Session 集成:三步创建托管支付页面
Checkout Session 的集成思路很清晰:先建客户 → 再建商品和价格 → 最后创建会话拿跳转 URL。完整代码见 checkout.rs,核心流程如下:
第一步:创建客户与商品
let customer = CreateCustomer::new() .email("test@async-stripe.com") .send(&client).await?; let product = CreateProduct::new("T-Shirt") .send(&client).await?; let price = CreatePrice::new(Currency::USD) .product(product.id.as_str()) .unit_amount(1000) .send(&client).await?;第二步:组装 Checkout Session
这是整个 Checkout 集成最核心的一步——用链式 Builder 声明结账页行为:
let line_items = vec![CreateCheckoutSessionLineItems { quantity: Some(3), price: Some(price.id.to_string()), ..Default::default() }]; let checkout_session = CreateCheckoutSession::new() .cancel_url("https://example.com/cancel") .customer(customer.id.as_str()) .mode(CheckoutSessionMode::Payment) .line_items(line_items) .send(&client).await?;第三步:把用户导向托管页面
创建成功后,Stripe 会返回一个托管结账 URL,你只需把用户重定向过去即可:
println!("支付页面地址: {}", checkout_session.url.unwrap());用户完成支付后,Stripe 会跳转到你预先配置的success_url/cancel_url,并通过 Webhook 通知你支付结果(可参考项目的 webhooks.mdx 文档)。
Payment Link 集成:无需客户的极简支付链接方案
如果你只想快速收款、不想维护用户体系,Payment Link是更轻量的选择——不需要预先创建 Customer,这也是官方示例(payment_link.rs)特意强调的优点。
它的代码甚至比 Checkout Session 更短:
let payment_link = CreatePaymentLink::new(&[ CreatePaymentLinkLineItems { quantity: 3, price: Some(price.id.to_string()), ..Default::default() } ]).send(&client).await?; println!("支付链接: {}", payment_link.url);创建完成后,你可以把这个链接:
- 📨 通过邮件、短信直接发给客户
- 📱 生成二维码放在线下物料上
- 🌐 分享到社交媒体,客户点击即可付款
需要注意,Payment Link 同样支持allow_promotion_codes(优惠码)、billing_address_collection(地址收集)等配置,详见其请求定义 requests.rs,足以覆盖大多数轻量收款场景。
双方案对比:如何选择最适合你的 Checkout 集成方式
看完代码,我们来总结一套选择决策树,帮你 30 秒锁定方案:
| 你的业务形态 | 推荐方案 | 理由 |
|---|---|---|
| 电商网站 / App 内结账 | Checkout Session | 可携带购物车、优惠码、运费,体验完整 |
| 订阅与续费业务 | Checkout Session | 支持subscription模式与试用期 |
| 内容付费、一键购买 | Payment Link | 无客户体系,创建即得链接 |
| 社群团购、线下扫码 | Payment Link | 链接可复用、可分享、可入二维码 |
| 需要预填客户信息 | Checkout Session | 传入customer后自动预填邮箱与卡号 |
从代码量看,Payment Link 更省事;从能力边界看,Checkout Session 的扩展性更强。如果你的业务未来要加购物车、订阅或分期,从 Checkout Session 起步是更稳妥的选择。
进阶技巧:让 Checkout 集成更专业的几个建议
最后分享几个提升集成质量的实操建议:
- 善用
expand参数:在 Checkout Session 中通过.expand([...])展开关联对象(如商品详情),一次请求拿全数据,减少往返(参考 checkout.rs) - 开启优惠码:
.allow_promotion_codes(true)一行代码即可让用户输入折扣码,显著提升转化 - 接入 Webhook 对账:支付成功后 Stripe 会推送
checkout.session.completed事件,务必用服务端 Webhook 更新订单状态,不要只依赖前端跳转 - 保持测试密钥隔离:开发环境始终使用
sk_test_密钥,避免误扣真实款项
总结
async-stripe 让 Rust 开发者可以优雅地完成 Checkout 集成:需要完整结账体验就选Checkout Session,追求极简收款就用Payment Link。两条路径都有类型安全的 Builder API 和现成的官方示例(checkout.rs、payment_link.rs)供你参考。希望本文能帮你迈出 Rust 支付集成第一步,祝你的产品早日上线收款!🎉
【免费下载链接】async-stripeAsync (and blocking!) Rust bindings for the Stripe API项目地址: https://gitcode.com/gh_mirrors/as/async-stripe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考