async-stripe 快速入门:5 步完成你的第一个 Stripe 支付集成
【免费下载链接】async-stripeAsync (and blocking!) Rust bindings for the Stripe API项目地址: https://gitcode.com/gh_mirrors/as/async-stripe
对于想要在 Rust 项目中接入 Stripe 支付功能的开发者来说,async-stripe是目前最值得选择的库。它是为 Stripe API 打造的 Async(以及 Blocking)Rust 绑定,类型安全、性能出色,并且直接由 Stripe 官方 OpenAPI 规范生成、每周自动更新,让你几乎可以零成本完成Stripe 支付集成。本文用 5 个步骤带你从零开始,跑通第一个真实的支付流程,即使是 Rust 新手也能轻松跟上。
为什么选择 async-stripe 做支付集成?
在动手之前,先花一分钟了解这个库的底气所在。async-stripe 不是简单的 HTTP 封装,而是一整套围绕 Stripe API 设计的工程方案:
- 全 API 覆盖且保持最新:代码由官方 OpenAPI 规范自动生成,CI 每周拉取最新定义重新生成,Stripe 一上新功能,你几乎同步就能用上。
- 异步高性能:请求参数用
serde序列化,响应则用轻量级miniserde反序列化,编译更快、二进制更小。 - 模块化拆分:库被拆成
stripe-core、stripe-billing、stripe-payment等多个 crate,用到哪个开哪个,避免编译负担。 - 双运行时支持:默认基于 tokio + hyper,也可以切换到 async-std 运行时,甚至支持同步(blocking)调用。
详细特性与快速上手说明都可以在仓库根目录的 README.md 中找到,这里我们直接进入正题。
第 1 步:准备工作——注册 Stripe 账户并获取 API 密钥
任何 Stripe 支付集成都从一把密钥开始:
- 注册 Stripe 账户,进入 Dashboard 的 "Developers → API keys" 页面。
- 复制Secret Key(形如
sk_test_xxx)。开发阶段请务必使用test开头的测试密钥,避免产生真实扣款。 - 建议通过环境变量注入密钥,而不是硬编码在源码里:
export STRIPE_SECRET_KEY="sk_test_你的密钥"第 2 步:在 Cargo.toml 中配置依赖
async-stripe 采用模块化设计:主 crateasync-stripe提供客户端,具体的业务资源由各自的 crate 提供。以"创建客户 + 发起支付"为例,只需在Cargo.toml中加入:
[dependencies] async-stripe = "=1.0.0-rc.5" async-stripe-core = { version = "=1.0.0-rc.5", features = ["customer", "payment_intent"] } tokio = { version = "1", features = ["full"] }每个 API 对象对应哪个 crate、哪个 feature 开关,可以参考仓库中的 crate_info.md 速查表,按需启用即可,这也是减小编译体积的关键技巧。
第 3 步:初始化客户端——最核心的一行代码
在 async-stripe 中,所有请求都通过Client发起,初始化极其简单:
use stripe::Client; let secret_key = std::env::var("STRIPE_SECRET_KEY").expect("缺少 STRIPE_SECRET_KEY"); let client = Client::new(secret_key);如果你的应用需要更精细的控制,比如向 Stripe 标识你的应用信息、以 Stripe Connect 子账户身份发起请求,可以使用ClientBuilder,参考 client_config.rs 中的进阶配置示例。
第 4 步:创建 PaymentIntent——完成支付的核心一步
PaymentIntent(支付意图)是 Stripe 现代支付流程的中枢:它代表一笔待支付的交易,你只需创建它并把客户端密钥交给前端完成收款。async-stripe 的 builder 风格 API 让这段代码读起来像自然语言:
use stripe_core::payment_intent::CreatePaymentIntent; use stripe_types::Currency; let payment_intent = CreatePaymentIntent::new(1000, Currency::USD) // 10.00 美元 .payment_method_types([String::from("card")]) .statement_descriptor("购买示例商品") .send(&client) .await?; println!("支付意图已创建: {}", payment_intent.id);注意金额单位是分,1000即10.00美元。完整流程(创建客户 → 创建支付意图 → 附加支付方式 → 确认支付)可以参考 payment_intent.rs 中的端到端示例;如果只想快速让用户跳转到 Stripe 托管页面付款,也可以改用 Checkout Session,示例见 checkout.rs。
第 5 步:接收 Webhook 与优雅处理错误
支付是异步的,用户的支付结果最终会通过Webhook 回调告诉你。async-stripe 提供了独立的stripe-webhookcrate,验签、反序列化一步到位:
use stripe_webhook::{EventObject, Webhook}; let event = Webhook::construct_event(payload, signature, "whsec_你的密钥")?; if let EventObject::PaymentIntentSucceeded(intent) = event.data.object { println!("支付成功: {}", intent.id); }完整的 axum Webhook 服务示例见 main.rs。同时,网络抖动、参数错误都不可避免,建议参考 error_handling_basic.rs 区分Stripe API 错误与网络错误,并配合重试策略,让你的支付链路更健壮。
进阶:还有哪些玩法?
跑通上面的 5 步,你的第一个 Stripe 支付集成已经完成。接下来你还可以探索:
- 分页拉取:
ListCustomer::new().paginate().stream(client)优雅地遍历海量数据,见 customer.rs。 - 订阅与账单:启用
stripe-billingcrate 即可操作 Subscription、Invoice 等对象。 - 测试时钟:用 test-clocks.rs 模拟时间推进,轻松验证订阅续费逻辑。
如果本地想快速把玩整套示例,可以克隆仓库:
git clone https://gitcode.com/gh_mirrors/as/async-stripe然后进入examples/目录逐个运行。async-stripe 的文档完善、示例丰富,加上每周自动同步官方 API 的保障,是 Rust 生态里做 Stripe 支付集成的最优解。现在就去申请一把测试密钥,写出属于你的第一个支付接口吧!🚀
【免费下载链接】async-stripeAsync (and blocking!) Rust bindings for the Stripe API项目地址: https://gitcode.com/gh_mirrors/as/async-stripe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考