条带令牌未在条带服务器中创建

Stripe Token is not created in the stripe server

我正在使用 Stripe 创建一个 rails 应用程序。我只能使用 standalone accounts because Managed Accounts are not available in France. I use shared customers 因为在我的应用程序上赚钱的人正在分享他们的客户。

Create Card Token doc

当然,我给大家展示的是我的Test Stripe环境。

为了向用户收取客户费用,我创建了一个令牌:

tok = Stripe::Token.create(
  {:customer => customer.id, :card => customer.cards.last.stripe_id},
  {:stripe_account => user.stripe_user_id}
)
=> #<Stripe::Token:0x3fd9c3830900 id=tok_19fYblIUbyeToO5BfgwmLR9Y> JSON: {
  "id": "tok_19fYblIUbyeToO5BfgwmLR9Y",
  "object": "token",
  "card":     {"id":"card_19fYblIUbyeToO5BwRTTlJ1x","object":"card","address_city":null,"address_country":null,"address_line1":null,"address_line1_check":null,"address_line2":null,"address_state":null,"address_zip":null,"address_zip_check":null,"brand":"Visa","country":"US","cvc_check":"pass","dynamic_last4":null,"exp_month":12,"exp_year":2020,"fingerprint":"xxsPLKbXK7swE7It","funding":"credit","last4":"4242","metadata":{},"name":null,"tokenization_method":null},
  "client_ip": "31.33.230.61",
  "created": 1485280889,
  "livemode": false,
  "type": "card",
  "used": false
}

之后,我想使用该令牌向客户收费,但不幸的是,该令牌在 Stripe 服务器上不存在:

Stripe::Token.retrieve(tok.id)
Stripe::InvalidRequestError: No such token: tok_19fYk2IUbyeToO5Bo4thhjn7
 from /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/stripe-1.58.0/lib/stripe.rb:326:in `handle_api_error'

当我尝试向客户收费或将令牌保存为客户来源时,它给了我同样的错误。 我试着创建一个基本的费用,看看它是否是一个更大的错误:

tok = Stripe::Token.create(
  :card => {
    :number => "4242424242424242",
    :exp_month => 1,
    :exp_year => 2018,
    :cvc => "314"
  },
)
=> #<Stripe::Token:0x3fd9c71b002c id=tok_19fYWGLTk1qRIoGhSApzxo8u> JSON: {
  "id": "tok_19fYWGLTk1qRIoGhSApzxo8u",
  "object": "token",
  "card": {"id":"card_19fYWGLTk1qRIoGhBpLf7sFp","object":"card","address_city":null,"address_country":null,"address_line1":null,"address_line1_check":null,"address_line2":null,"address_state":null,"address_zip":null,"address_zip_check":null,"brand":"Visa","country":"US","cvc_check":"unchecked","dynamic_last4":null,"exp_month":1,"exp_year":2018,"fingerprint":"D6Dfg1vPHxjxX2XI","funding":"credit","last4":"4242","metadata":{},"name":null,"tokenization_method":null},
  "client_ip": "31.33.230.61",
  "created": 1485280548,
  "livemode": false,
  "type": "card",
  "used": false
}

然后我就可以取回令牌了:

Stripe::Token.retrieve(tok.id)
=> #<Stripe::Token:0x3fd9c2726b3c id=tok_19fYWGLTk1qRIoGhSApzxo8u> JSON: {
  "id": "tok_19fYWGLTk1qRIoGhSApzxo8u",
  "object": "token",
  "card": {"id":"card_19fYWGLTk1qRIoGhBpLf7sFp","object":"card","address_city":null,"address_country":null,"address_line1":null,"address_line1_check":null,"address_line2":null,"address_state":null,"address_zip":null,"address_zip_check":null,"brand":"Visa","country":"US","cvc_check":"unchecked","dynamic_last4":null,"exp_month":1,"exp_year":2018,"fingerprint":"D6Dfg1vPHxjxX2XI","funding":"credit","last4":"4242","metadata":{},"name":null,"tokenization_method":null},
  "client_ip": "31.33.230.61",
  "created": 1485280548,
  "livemode": false,
  "type": "card",
  "used": false
}

当我将客户作为参数传递时它根本不起作用,为什么?我不知道,因为我做了,因为文档告诉我。

令牌是使用 Stripe-Account header 创建的,因此生成的令牌 object 存在于目标帐户中。

因此,为了 retrieve the token 或在 API 请求中使用它,该请求还必须使用具有相同帐户 ID 的 Stripe-Account header。