代码之家  ›  专栏  ›  技术社区  ›  user3074558

如何在Pay Gem中将Stripe客户IDS分配给现有用户

  •  0
  • user3074558  · 技术社区  · 2 年前

    我使用的是Rails pay gem,当用户注册时,它会在user模型中使用以下方法自动为user分配一个Stripe Customer ID:

    pay_customer default_payment_processor: :stripe
    

    问题是,我有已经注册的老用户,当试图用旧帐户付款时,没有条带客户id,因此会出现错误。

    我如何使用支付宝石自动为我的ddbb中的每个用户分配一个Stripe客户ID?

    我试着像这样迭代每个用户:

    User.find_each do |user|
      unless user.payment_processor.present?
        user.set_payment_processor :stripe
        user.save
        puts "Created Stripe Customer ID for user: #{user.email}"
      end
    end
    

    这将分配一个支付处理器,但不会为用户创建Stripe客户ID。

    请问,有人能帮忙吗?我真的被困住了:(

    我的日志

    3.0.0 :011 > u.set_payment_processor :stripe
      TRANSACTION (0.2ms)  BEGIN
      Pay::Customer Update All (0.7ms)  UPDATE "pay_customers" SET "default" = $1 WHERE "pay_customers"."owner_id" = $2 AND "pay_customers"."owner_type" = $3  [["default", false], ["owner_id", 388], ["owner_type", "User"]]
      Pay::Customer Load (0.4ms)  SELECT "pay_customers".* FROM "pay_customers" WHERE "pay_customers"."owner_id" = $1 AND "pay_customers"."owner_type" = $2 AND "pay_customers"."deleted_at" IS NULL AND "pay_customers"."processor" = $3 ORDER BY "pay_customers"."id" ASC LIMIT $4  [["owner_id", 388], ["owner_type", "User"], ["processor", "stripe"], ["LIMIT", 1]]
      Pay::Customer Exists? (0.2ms)  SELECT 1 AS one FROM "pay_customers" WHERE "pay_customers"."processor_id" = $1 AND "pay_customers"."id" != $2 AND "pay_customers"."processor" = $3 LIMIT $4  [["processor_id", "cus_XXXXXXXXXXXXXX"], ["id", 1], ["processor", "stripe"], ["LIMIT", 1]]
      Pay::Customer Update (0.2ms)  UPDATE "pay_customers" SET "default" = $1, "updated_at" = $2 WHERE "pay_customers"."id" = $3  [["default", true], ["updated_at", "2023-08-31 20:18:04.191958"], ["id", 1]]
      TRANSACTION (0.6ms)  COMMIT
      Pay::Customer Load (0.4ms)  SELECT "pay_customers".* FROM "pay_customers" WHERE "pay_customers"."owner_id" = $1 AND "pay_customers"."owner_type" = $2 AND "pay_customers"."default" = $3 AND "pay_customers"."deleted_at" IS NULL LIMIT $4  [["owner_id", 388], ["owner_type", "User"], ["default", true], ["LIMIT", 1]]
     => 
    #<Pay::Customer:XXXXXXXXXXXXX
     id: 1,
     owner_type: "User",
     owner_id: 388,
     processor: "stripe",
     processor_id: "cus_XXXXXXXXXXXXXX",
     default: true,
     data: {},
     deleted_at: nil,
     created_at: Mon, 24 Jul 2023 11:19:25.540934000 UTC +00:00,
     updated_at: Thu, 31 Aug 2023 20:18:04.191958000 UTC +00:00,
     payment_method_token: nil> 
    3.0.0 :012 > u.payment_processor.customer
    /Users/XXXXXX/.rvm/gems/ruby-3.0.0/gems/pay-6.6.1/lib/pay/stripe/billable.rb:66:in `rescue in customer': No such customer: 'cus_XXXXXXXXXXXX' (Pay::Stripe::Error)
    /Users/XXXXXXXX/.rvm/gems/ruby-3.0.0/gems/stripe-8.5.0/lib/stripe/stripe_client.rb:722:in `handle_error_response': No such customer: 'cus_XXXXXXXXXXXXX' (Stripe::InvalidRequestError)
    3.0.0 :013 > 
    

    谢谢

    0 回复  |  直到 2 年前
        1
  •  1
  •   Eric Aya    2 年前

    删除我现有的所有付费客户记录,在开发过程中为我解决了这个问题。