【问题标题】:Stripe - check if a customer existsStripe - 检查客户是否存在
【发布时间】:2015-02-19 16:48:44
【问题描述】:

在条纹文档中,他们有这个:

customer = Stripe::Customer.create(email: params[:stripeEmail], card: params[:stripeToken])
charge = Stripe::Charge.create(customer: customer.id, amount: price, description: '123', currency: 'usd')

但我认为对于每次付款,我们必须首先检查客户是否存在是错误的,我只是用一个测试帐户尝试过,结果发现创建了许多不同的客户,他们使用相同的电子邮件但不同的 ID。

如何检查客户是否已经存在?

【问题讨论】:

标签: ruby-on-rails ruby stripe-payments


【解决方案1】:

Stripe 端没有检查以确保客户的唯一性(电子邮件、卡、姓名等),这是你必须做的事情。

通常,当您使用特定电子邮件地址创建客户时,您需要将您从 API 返回的客户 ID 与电子邮件地址相关联。然后下一次,您检查此电子邮件地址是否已在您的系统中,然后创建新客户或重新使用上一次的客户 ID。

【讨论】:

  • Usually, when you create a customer with a specific email address - 你的意思是“在 Stripe”吗?
  • 当您调用 Create Customer API 时是的
  • 除了将客户 ID 和电子邮件存储在您自己的数据库中之外,您还应该始终检查 Stripe 数据库中是否存在客户 ID,以确保它没有被删除(可能是通过会计部门)。您可以在此处请求客户 ID 时测试并发现错误:stripe.com/docs/api/errors?lang=ruby
  • 有什么办法可以防止有人输入另一位客户的电子邮件并向该客户收费?还是该流程仅在其已经在身份验证保护之后才有效?
  • 正确,是后者,只有当你有一些逻辑让客户登录你的网站时才有效
【解决方案2】:

您可以通过将电子邮件作为 form-urlencoded 参数调用GET /customers 来检查客户是否存在。您将收到 200 OK 响应,但如果此客户电子邮件不存在,则返回的 data[] 将为空。

https://stripe.com/docs/api/customers/list

【讨论】:

  • 通过电子邮件检查现有客户,这是正确答案
【解决方案3】:

我认为简单的“存在”测试对于避免生成不需要的异常至关重要。

如果您的客户是新客户,那么他们将没有条带 ID,这很好。但是,您可能会遇到这样一种情况,即您正在使用具有现有条带 ID 的现有客户,但已经执行了某种休眠清理条带端。在这种情况下,最好测试提供的 stripeID 以查看其是否仍然有效。

例如,我将 stripeID 与客户资料一起存储。当我付款时,我会检查配置文件中的 stripeID 字段是否存在。如果是,我会向我的后端发出一个 API 请求以检查它的存在。

类似这样的东西(.net 后端示例)。

    [HttpGet]
    public ActionResult<bool> CheckCustomer(string id)
    {

        var service = new CustomerService();
        Customer cust;

        try
        {
            service.Get(id);
        }
        catch
        {
            return Ok(false);
        }

        if (cust.Deleted ?? false)
        {
            return Ok(false);
        }

        return Ok(true);
    }

我不需要结果,只要不抛出异常就足够了。但是,当您在 Stripe live 中删除客户时,它会保留一份 ID 存根副本并将删除属性设置为 true,因此您也需要检查这一点。

然后前端既可以使用 stripeId 进行支付,也可以先创建一个新的 Stripe 客户然后进行支付。

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 2015-01-27
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2011-09-20
    • 2015-05-02
    相关资源
    最近更新 更多