图片被吞了可以来这里看:https://juejin.cn/post/7346388511338381364
1. 准备事项
- Stripe 账号
- 域名以及配套的网站
- Stripe 账号付款信息
- 公钥和私钥
2. 配置产品以及价格
可以通过 API 或者 Stripe 管理后台来进行配置
产品:就是商品,只需要配置一个名称和一个类型(用于计算税额)
价格:价格有定期和一次性两种收费方式,定期其实就是订阅。价格实体非常灵活,适合多种场景,一般就使用固定费率的一次性付款和定期付款。
3. 设计一下流程
4. 代码集成
4.1 依赖导入
stripe/stripe-java: Java library for the Stripe API. (github.com)
<dependency>
<groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId>
<version>23.3.0</version>
</dependency>
4.2 配置
# 公钥
stripe.key=pk_test_51Nxxxx
# 私钥
stripe.secret=sk_test_51xxxx
# webhook 密钥签名
stripe.endpoint_secret=whsec_Tcxxxx
@Data
@Configuration
@ConfigurationProperties(prefix = "stripe")
public class StripeConfig {
private String key;
private String secret;
private String endpointSecret;
@Bean
public StripeClient stripeClient() {
return new StripeClient(secret);
}
}
4.3 创建收银
Stripe 中有两种方式能进行收款,Stripe-hosted page
和 Embedded form
。
Stripe-hosted page
:指的是收费的时候跳转到 Stripe 提供的一个收银台页面进行付款。
Embedded form
:则是需要高度自定义页面的产品使用,或者是客户端。
文档:Stripe Checkout | Stripe 文档
Demo: docs.stripe.com/checkout/quickstart
Web 端一般使用 Stripe-hosted page
来简化开发,像 ChatGPT
也是使用这种方式。
后端创建收银台
public CheckoutCreateResult create(CheckoutCreateRequest request) {
// 查询或者创建客户
String customerId = queryOrCreateCustomer();
// 查询价格id
String priceId = queryPrice();
// 构建成功URL和取消URL
UriComponents successUrl = UriComponentsBuilder.fromHttpUrl(request.getSuccessUrl())
.queryParam("checkout_id", checkoutId)
.queryParam("receipt", "{CHECKOUT_SESSION_ID}") // 模板变量 https://stripe.com/docs/payments/checkout/custom-success-page#modify-success-url
.build();
UriComponents cancelUrl = UriComponentsBuilder.fromHttpUrl(request.getCancelUrl())
.queryParam("checkout_id", checkoutId)
.build();
// 创建checkout 收银台
SessionCreateParams.Builder builder = SessionCreateParams.builder()
.setSuccessUrl(successUrl.toUriString())
.setCancelUrl(cancelUrl.toUriString())
// 指定付款用户
.setCustome