集成 Payment Intents API
学习使用 Payment Intents API 实现动态支付流程,确保各种场景下的交易处理安全可靠。
集成 Payment Intents API 是 CoddyKit 上的免费 Stripe Payments & SaaS Billing Systems 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Stripe Payments & SaaS Billing Systems 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Stripe Payments & SaaS Billing Systems 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Why Payment Intents?
Welcome! Today, we're diving into Stripe's Payment Intents API. This is a powerful tool for managing complex payment flows.
Before Payment Intents, simple charges worked for basic payments. But what about payments that need extra steps, like 3D Secure authentication?
Payment Intents solve this by representing your intention to collect a payment, allowing for dynamic, multi-step processes.
The Payment Intent Object
A Payment Intent is an object that tracks the lifecycle of a customer's payment attempt. It guides you through the necessary steps to complete a payment.
- Created: The intent is ready to start.
- Requires Action: Customer needs to authenticate (e.g., 3D Secure).
- Succeeded: Payment is complete.
- Canceled: The payment attempt was abandoned.
This object helps manage everything from initial creation to final confirmation.
Server-Side: Creating an Intent
The first step is always to create a Payment Intent on your server. This ensures sensitive details like the amount and currency are controlled server-side.
You specify the amount, currency, and payment method types you'll accept (e.g., 'card'). Stripe then returns a PaymentIntent object, which includes a client_secret.
Try running this simplified server-side example (Java):
import java.util.List;
import java.util.Map;
// This is a simplified example to illustrate server-side intent creation.
// In a real application, this would involve calling Stripe's API.
public class Main {
public static void main(String[] args) {
long amount = 1000L; // Example: $10.00 in cents
String currency = "usd";
String paymentMethodType = "card";
System.out.println("--- Server-Side Payment Intent Creation ---");
System.out.println("Creating Payment Intent for: " + amount + " " + currency);
System.out.println("Payment method type: " + paymentMethodType);
System.out.println("\nStripe API call (conceptual, using Java client library):\n");
System.out.println(" PaymentIntent.create(Map.of(");
System.out.println(" \"amount\", " + amount + "L,");
System.out.println(" \"currency\", \"" + currency + "\",");
System.out.println(" \"payment_method_types\", List.of(\"" + paymentMethodType + "\")");
System.out.println(" ));");
System.out.println("\nStripe would return an object including:\n");
System.out.println(" \"id\": \"pi_mockPaymentIntent123\",");
System.out.println(" \"client_secret\": \"pi_mockPaymentIntent123_secret_mockSecretString\"");
System.out.println("\nThe client_secret is then sent securely to the client-side.");
}
}Client-Side: Confirming the Payment
Once your server sends the client_secret to your frontend, you use Stripe.js to confirm the Payment Intent. This is where the customer interacts with the payment form.
Stripe.js handles the collection of payment details and any required authentication (like 3D Secure) automatically, using the client_secret to link to the server-created intent.
- 1. Collect details: Customer enters card info.
- 2. Call
stripe.confirmCardPayment(): Pass theclient_secretand card details. - 3. Handle result: Stripe returns the final status.
Understanding Payment Statuses
The status field of a Payment Intent is crucial for understanding its state. Here are the common ones:
requires_payment_method: Needs payment details.requires_confirmation: Ready to be confirmed.requires_action: Customer needs to complete an action (e.g., 3D Secure).processing: Payment is being processed.succeeded: Payment was successful!canceled: Payment was canceled.
Your application logic should react to these statuses.
Handling 3D Secure & SCA
Strong Customer Authentication (SCA), often involving 3D Secure, is a regulatory requirement in Europe for many online card payments. Payment Intents are designed to handle this seamlessly.
If a payment requires SCA, the Payment Intent's status will change to requires_action. Stripe.js will then automatically prompt the customer to complete the authentication step (e.g., redirect to their bank's page).
Your client-side confirmation call will then complete once authentication is done.
Securing the client_secret
The client_secret is a unique key that ties a client-side action to a specific Payment Intent on your server. It's safe to expose on the client, but only for a limited time.
- Generate on server: Always create the Payment Intent and its
client_secreton your backend. - Pass securely: Send the
client_secretto your frontend (e.g., via a secure API endpoint). - Use promptly: Use it immediately on the client to confirm the payment.
Never generate or store the client_secret directly on the client side.
Retrieving & Updating Intents
You can retrieve a Payment Intent at any time using its ID from your server-side code. This is useful for checking its current status or details.
You can also update a Payment Intent (e.g., change the amount or currency) as long as it hasn't been confirmed yet. This offers flexibility for dynamic pricing or order changes before final payment.
However, once confirmed, a Payment Intent cannot be modified.
Payment Method Attachment
When a Payment Intent succeeds, Stripe can optionally save the customer's payment method for future use. This is done by attaching the payment method to a Customer object.
This is useful for recurring payments or one-click checkouts. You'd set the setup_future_usage parameter when creating the Payment Intent, or explicitly create a Setup Intent (a topic for another lesson!).
Always ensure you have customer consent to save payment details.
Quick Check: Payment Intents
You've learned about the Payment Intents API. Let's test your understanding!
Recap: Mastering Payment Intents
Great job! You've learned the fundamentals of Stripe's Payment Intents API.
- Payment Intents manage payment lifecycles, especially for multi-step or authenticated payments.
- You create them server-side, get a
client_secret, and confirm them client-side with Stripe.js. - Statuses like
requires_actionhelp you handle dynamic flows like 3D Secure.
This API is essential for building robust and compliant payment experiences. Keep practicing!
用 AI 导师学习 Stripe Payments & SaaS Billing Systems — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 12
- 课程
- 48
常见问题解答
「集成 Payment Intents API」课时是免费的吗?
是的 — 「集成 Payment Intents API」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Stripe Payments & SaaS Billing Systems 课程的其余内容,请升级到 CoddyKit PRO。 Stripe Payments & SaaS Billing Systems 课程共包含 4 节课。
「集成 Payment Intents API」这节课中我会学到什么?
学习使用 Payment Intents API 实现动态支付流程,确保各种场景下的交易处理安全可靠。 你通过在浏览器中直接运行的动手代码来练习 Stripe Payments & SaaS Billing Systems,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Stripe Payments & SaaS Billing Systems 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Stripe Payments & SaaS Billing Systems 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「集成 Payment Intents API」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Stripe Payments & SaaS Billing Systems 课中编写并运行代码吗?
能。每节 Stripe Payments & SaaS Billing Systems 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 集成 Payment Intents API
- 处理异步事件的 Webhook
- 高效管理退款与争议
- 为可靠的支付 API 实现幂等性