【问题标题】:stripe creating token with card id带卡 ID 的条带创建令牌
【发布时间】:2018-05-15 17:20:46
【问题描述】:

我目前正在尝试使用服务器端条带 api 创建费用。

但是我遇到了一个问题;我正在使用两种方式进行付款:

  • 用户可以使用条纹元素支付 => 因此我使用生成的令牌 ('tok_somethingId') 来完成支付

  • 或者,如果用户已经在账户上添加了一些卡片,他可以在列表中选择它们 => 服务器然后使用卡片 ID ('card_somethingId') 和客户 ID ('cus_smoethingId')

我想知道是否有一种方法可以生成带有卡 ID 和客户 ID 的令牌,以便使用此令牌创建收费,而不是使用卡 ID 和客户 ID 向用户收费。

我已经尝试过使用https://stripe.com/docs/api/node#create_card_token,但它似乎不起作用。

stripe.tokens.create({
  card: cardId,
  customer: customerId
}, function(err, token) {
  // do smthg here with the token
});

这会给我这个错误消息

【问题讨论】:

  • 根据 API:为其创建令牌的客户(由应用程序帐户拥有)。仅用于 Stripe Connect。此外,这只能与 OAuth 访问令牌或 Stripe-Account 标头一起使用。有关详细信息,请参阅共享客户。

标签: node.js stripe-payments


【解决方案1】:

如果您使用存储卡付款,则无需获取令牌,

1- 在条带上创建客户

$customer = \Stripe\Customer::create([
    'email' => $customer_email,
]);

$response = ['status' => 'success', 'response' => $customer];

当您创建了客户后,您就有了 customer_id

if(isset($response ['response']['id']))
    $response ['customer_id']  = $response ['response']['id'];

2 - 您可以通过客户 ID 和卡令牌在条带上添加卡

$customer = \Stripe\Customer::retrieve($customer_id);
$creditCard = $customer->sources->create(array("source" => $cardToken));

$response = ['status' => 'success', 'response' => $creditCard];

现在你有这样的卡号

"id": "card_1D4plsDExLRkbD8k1UWdqwIr"

3-您可以在客户上存储多张卡,也可以检索

$cards = \Stripe\Customer::retrieve($customer_id)->sources->all(array(
    "object" => "card"
));

4 - 您可以通过存储在客户帐户中的卡付款

$params = [
    'currency' => 'USD',
    'amount' => $total_amount * 100,  
// converting dollars to cents
    'description' => $description, //it may be blank
    'customer' => $customer_id,
    "card" => $card_id'
];

$transaction = \Stripe\Charge::create($params); 

$response = ['status' => 'success', 'response' => $transaction['id']];

这里我们没有使用'source'参数,因为它是在我们通过卡令牌支付时使用的。

【讨论】:

    【解决方案2】:

    您不能为现有卡创建新令牌,因为这没有意义。该卡已保存在客户身上,您可以对其进行收费。

    这里最简单的解决方案可能是反过来,当您获得令牌tok_XXXX 时将卡保存在客户身上。这样,您始终可以通过将 customer 参数作为客户 ID cus_XXXX 并将 source 参数作为卡 ID card_XXXX 传递给卡。

    否则,您需要动态处理此问题,以便知道您获得的是令牌 (tok_XXXX) 还是卡 ID (card_XXXX),并根据该决定传递不同的参数。您的前端代码应该知道您最终处于哪种情况。

    【讨论】:

      【解决方案3】:

      just pass the values in the body,

      [{"key":"amount","value":"1000","description":""},{"key":"currency","value":"usd","description":""},{"key":"customer","value":"cus_ID","description":""},{"key":"description","value":"\"Charge for jenny.rosen@example.com\"","description":""},{"key":"card","value":"card_ID","description":""}]
      

      这对我有用

      【讨论】:

        猜你喜欢
        • 2015-02-24
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 2019-11-10
        • 2014-04-22
        • 2014-12-01
        • 2015-04-17
        • 1970-01-01
        相关资源
        最近更新 更多