在 SwiftUI 中添加无需付款的 Stripe 信用卡

Add Stripe Credit Card without Payment in SwiftUI

我正在努力寻找一种不是 UIKit 的解决方案,或者需要您购买的解决方案。

我的项目正在尝试将 Stripe 集成到 SwiftUI 中,使用 node.js Firebase 函数进行后端处理。

我在 UIViewRepresentable 中构建了一个 STPPaymentCardTextField。这使我能够通过 State 获取客户的信用卡详细信息。

@State var params: STPPaymentMethodCardParams = STPPaymentMethodCardParams()

SwiftUI 文本字段

StripePaymentCardTextField(cardParams: $params, isValid: $isValid)

然后我们可以像这样构建 paymentMethodParms..

 let paymentMethodParams = STPPaymentMethodParams(card: params, billingDetails: billingDetails, metadata: nil)

现在我可以轻松地将信用卡详细信息传递到我的后端并使用

手动添加卡

添加支付方式功能

const createPaymentMethods = functions.https.onCall(async (data, context) => {
    const paymentMethod = await stripe.paymentMethods.create({
        customer: '{{CUSTOMER_ID}}',
        payment_method: '{{PAYMENT_METHOD_ID}}',
        }, {
            stripeAccount: '{{CONNECTED_STRIPE_ACCOUNT_ID}}',
        });
    
}

但我知道这是不好的做法。 我发现这个 post 可能是“重复的”,但却是最接近的相关答案。 。然而,该用户正在使用 reactjs 并希望将信用卡详细信息存储在数据库中,我只想将其传递给 Stripe。

有没有办法可以将信用卡数据发送到 Stripe,取回 paymentMethod ID,然后将其传递到我的后端或其他什么?我已经解决了订阅和购买收费问题,我只是无法在不经过付款设置流程的情况下进行信用卡设置。我希望用户在设置中创建新帐户时手动添加信用卡 and/or。

你能调用 stripe-ios 的 createPaymentMethod() 函数 [0] 吗?这是您的 SwiftUI 应用程序将调用的客户端函数,用于将卡详细信息从 paymentMethodParams 标记为 PaymentMethod 对象。然后您可以将该 ID 服务器端传递给客户。

[0] https://stripe.dev/stripe-ios/docs/Classes/STPAPIClient.html#/c:@CM@Stripe@objc(cs)STPAPIClient(im)createPaymentMethodWithPayment:completion:

为了扩展@hmunoz 的回答和我让它工作的方式如下。

  1. 为您的用户创建一个 Stripe 帐户。 https://stripe.com/docs/api/customers/create
  2. 在用户的 Firestore 数据库中记录客户条带 ID,以便于参考。
  3. 为您的前端创建一个“添加卡”视图并调用添加付款方式功能。 https://stripe.com/docs/api/cards/create
  4. 结帐时,只要在付款意向中传递了客户的条带 ID,它就应该使用他们保存的付款方式进行填充。

总而言之,最好跟踪已登录的用户,以便您可以自始至终执行任何需要的 CRUD。