如何取消setupIntent?

How to cancel setupIntent?

在用户注册后,我已成功创建一个 setupIntent 并将付款方式附加到客户。但是,我为用户提供了稍后通过​​按“稍后”按钮在设置中添加付款方式的选项。按下此按钮后,我想取消 setupIntent。

我的服务器上有以下内容:

exports.cancelSetupIntent = functions.https.onCall(async (data, context) => {
  const clientSecret = data.clientSecret;
  const setupIntent = await stripe.setupIntents.cancel(
      clientSecret
  );
});

当按下“稍后”按钮时,我从客户端调用它:

func cancelSetupIntent() {
    
    FirebaseReferenceManager.functions.httpsCallable("cancelSetupIntent").call(["clientSecret": self.setupIntentParams?.clientSecret]) { (response, error) in
        if let error = error {
            print("failed to cancel setup intent: \(error.localizedDescription)")
        } else {
            print("setupIntent cancelled")
        }
    }
}

但是,我收到一条错误消息:“没有这样的 setupIntent:”seti_...“

该错误显示的客户端密码与打开页面时创建的客户端密码相同。

非常感谢任何帮助! :)

取消设置意图时,您应该使用设置意图 ID (seti_xxx),而不是设置意图客户端密码 (seti_xxx_secret_yyy)。

为了在您的前端获取设置意图 ID 并将其发送回您的服务器,您有两个选择:

  1. 当您最初在服务器端创建设置意图并在客户端发送客户端密码时,还要发回 ID。然后,当您需要取消设置 Intent 时,您只需将 ID 发送回您的服务器即可。
  2. Retrieve the Setup Intent client-side 在将 ID 发送回您的服务器之前使用客户端密码获取 ID。