ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

async-stripe 支付集成实战:PaymentIntent 从创建到确认的完整教程

2026/8/20 20:20:59 拓冰建站 浏览量
async-stripe 支付集成实战:PaymentIntent 从创建到确认的完整教程 async-stripe 支付集成实战PaymentIntent 从创建到确认的完整教程【免费下载链接】async-stripeAsync (and blocking!) Rust bindings for the Stripe API项目地址: https://gitcode.com/gh_mirrors/as/async-stripe如果你正在用Rust 开发支付系统那么async-stripe一定是你绕不开的名字。它是 Stripe 官方支付 API 的Rust 异步绑定库支持 async/await 与阻塞两种调用方式代码直接由 Stripe 官方 OpenAPI 规范自动生成并每周更新保证 API 覆盖完整、类型安全。本文将以PaymentIntent支付意图为主线带你一步步完成从创建客户、创建支付意图到确认支付的完整支付集成流程即使是新手也能照着跑通第一个支付 Demo。一、为什么选择 async-stripe 做 Rust 支付集成在动手之前先花 1 分钟认识这个项目。async-stripe 拥有几个非常适合生产环境的特性特性说明✅ 全量 API 覆盖基于 Stripe OpenAPI 规范生成覆盖全部接口✅ 模块化设计拆分为 core / billing / payment / connect 等多个 crate按需编译✅ 双运行时支持同时支持 tokio 与 async-std✅ 高性能反序列化使用 miniserde 解析响应编译快、二进制体积小✅ 构建器风格 API链式调用清晰直观错误在编译期就能暴露它由async-stripe/src/lib.rs作为入口 crate 提供客户端业务请求类型则分布在各业务 crate 中例如 PaymentIntent 相关的请求定义位于 payment_intent/requests.rs。二、PaymentIntent 支付流程全景图PaymentIntent是 Stripe 推荐的现代支付方式它把「创建支付」和「确认扣款」拆成多个阶段方便处理 3D Secure 认证、异步扣款等复杂场景。一个典型的支付生命周期如下创建 PaymentIntent │ (状态: requires_payment_method) ▼ 绑定支付方式 (PaymentMethod) │ (状态: requires_confirmation) ▼ 确认支付 (Confirm) │ (状态: requires_action / processing) ▼ 支付成功 (状态: succeeded) ✅为了简化新手理解本教程采用「先创建、再绑定、后确认」的三步式集成方案。三、支付集成前的准备工作1. 获取 Stripe 测试密钥在 Stripe Dashboard 注册账号后进入「开发者 → API 密钥」页面复制以sk_test_开头的测试密钥并设置环境变量export STRIPE_TEST_SECRET_KEYsk_test_xxxxxxxxxxxxxxxx测试密钥可以放心用于开发不会产生真实扣款。2. 配置 Cargo.toml 依赖在项目根目录的Cargo.toml中添加依赖。注意除了主 crate还需要按需引入资源 crate 并开启对应 feature[dependencies] async-stripe 1.0.0-rc.5 async-stripe-core { version 1.0.0-rc.5, features [customer, payment_intent] } async-stripe-payment { version 1.0.0-rc.5, features [payment_method] } async-stripe-types { version 1.0.0-rc.5 } tokio { version 1, features [full] }如果你希望直接运行项目自带的完整示例可以通过以下命令克隆源码仓库其中包含了 examples/endpoints 目录下的全部实战示例git clone https://gitcode.com/gh_mirrors/as/async-stripe四、初始化 Stripe 客户端一切请求都从Client开始。读取环境变量中的密钥并创建客户端是后续所有操作的基础use stripe::Client; let secret_key std::env::var(STRIPE_TEST_SECRET_KEY).expect(Missing STRIPE_TEST_SECRET_KEY in env); let client Client::new(secret_key);如果需要更高级的配置比如标识你的应用信息、或者模拟 Stripe Connect 的子商户账户可以参考 client_config.rs 中使用ClientBuilder的写法。五、PaymentIntent 创建到确认的五步实战下面我们按照 payment_intent.rs 的官方示例拆解完整流程。⚠️ 注意Stripe 的金额单位是最小货币单位分1000表示$10.00。第一步创建客户Customer支付前先创建一个客户对象用于关联支付方式和订单记录let customer CreateCustomer::new() .name(Alexander Lyon) .email(testasync-stripe.com) .description(A fake customer for async-stripe examples.) .send(client) .await?;第二步创建 PaymentIntent这是支付集成的核心步骤。传入金额和币种即可生成一个待支付的支付意图let payment_intent CreatePaymentIntent::new(1000, Currency::USD) .payment_method_types([String::from(card)]) .statement_descriptor(Purchasing a new car) .metadata([(color.to_string(), red.to_string())]) .send(client) .await?;CreatePaymentIntent支持非常多的可选参数如capture_method自动/手动捕获、automatic_payment_methods自动启用多种支付方式等完整参数见 requests.rs。第三步创建并绑定支付方式支付意图创建后需要一个具体的支付方式如银行卡来完成支付。开发阶段请使用 Stripe 官方测试卡号4000008260000000let payment_method CreatePaymentMethod::new() .type_(CreatePaymentMethodType::Card) .card(CreatePaymentMethodCard::CardDetailsParams( CreatePaymentMethodCardDetailsParams { number: String::from(4000008260000000), exp_year: 2025, exp_month: 1, cvc: Some(String::from(123)), networks: None, }, )) .send(client) .await?; AttachPaymentMethod::new(payment_method.id.clone()) .customer(customer.id) .send(client) .await?;第四步更新 PaymentIntent把支付方式与客户信息关联到支付意图上确认「谁来付、用什么付」let payment_intent UpdatePaymentIntent::new(payment_intent.id) .payment_method(payment_method.id.as_str()) .customer(customer.id.as_str()) .send(client) .await?;第五步确认支付Confirm一切就绪后调用确认接口完成扣款let payment_intent ConfirmPaymentIntent::new(payment_intent.id) .send(client) .await?; println!(completed payment intent with status {}, payment_intent.status);如果返回的status是succeeded说明支付成功如果是requires_action则说明需要用户完成 3D Secure 等额外认证。六、支付状态机速查表掌握 PaymentIntent 的状态流转能帮你快速定位支付卡在哪一步状态含义下一步动作requires_payment_method尚未绑定支付方式绑定 PaymentMethodrequires_confirmation已绑定等待确认调用 Confirmrequires_action需要用户认证3DS 等引导用户完成认证processing正在异步处理中等待 webhook 通知succeeded支付成功 ✅发货 / 提供服务canceled已取消—七、新手常见问题速答Q1金额为什么要写 1000Stripe 统一使用最小货币单位USD 下1000即 10 美元日元等零小数币种则直接使用原数值。Q2如何调试支付失败可以在 error.rs 中查看StripeError的定义通过匹配错误类型如卡被拒、余额不足给用户友好提示。Q3示例入口在哪里官方示例的入口在 main.rs其中直接调用了run_payment_intent_example把测试密钥配置好即可一键运行。Q4async-stripe 支持同步调用吗支持所有请求类型都同时提供send异步与send_blocking阻塞两种方法详见 blocking.rs。结语至此你已经掌握了使用async-stripe完成PaymentIntent从创建到确认的完整支付集成流程创建客户 → 创建支付意图 → 绑定支付方式 → 更新意图 → 确认扣款。这套流程是 Stripe 支付体系的基础后续无论是接入 Checkout、订阅还是 Connect 分账都会复用这些核心概念。快去申请一个测试密钥跑通你的第一个 Rust 支付 Demo 吧【免费下载链接】async-stripeAsync (and blocking!) Rust bindings for the Stripe API项目地址: https://gitcode.com/gh_mirrors/as/async-stripe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考