【问题标题】:Stripe Payment: Save token and customer and make payment later from tokenStripe Payment:保存token和客户,稍后使用token进行支付
【发布时间】:2013-08-24 19:40:46
【问题描述】:

是否可以分条支付,

首先我们将使用条带验证信用卡,然后我们生成令牌并创建客户。 我们将在数据库中保存令牌而不是信用卡信息,稍后我们将根据令牌或客户而不是信用卡信息向客户付款。

在 javscript 文件中我们如何处理stripeResponseHandlerfunction stripeResponseHandler(status, response)

因为我们已经使用生成令牌

Stripe.createToken({
            number: cardNumber,
            cvc: cardCVC,
            exp_month: $('#expiration-month').val(),
            exp_year: $('#expiration-year').val()
        }, stripeResponseHandler);

在支付步骤中我们如何调用stripeResponseHandler?


请理解要求

1-通过验证信用卡信息保存Token,在这种情况下不涉及付款。金额/价格将为零(0)。

2- 将这个Token保存在你的数据库中,但是这个token使用一次的次数不多。如果以后再使用这个Token就不行了。

3- 创建 customer 将在 stripe.com 创建一个客户,我们也可以保存在我们的数据库中,但原因是我们不会从我们的网站充值,我们必须在 stripe 登录。 com 并从该站点充值。当我们从该站点充值时,我们无法将其记录保存在我们的数据库中。此外,在创建客户时,我们必须为后者创建充值。如果我们使用这个客户,我们还需要再次使用信用卡。所以这是主要问题。

4-我们可以制作自己的函数stripeResponseHandler,因为通过stripeResponseHandler可以在stripe服务器的stripe.js中完成卡片的验证。

【问题讨论】:

  • 每次我们需要一个新的令牌来通过信用卡信息进行支付,这个例子stripe.com/docs/tutorials/…,只会在stripe.com中创建一个客户,我们使用这个用户ID......这需要金额但是在我们的例子中,我们首先验证信用卡并保存令牌,然后在 1 天、1 个月或任何时间从该用户帐户付款。
  • 对于以后遇到这个问题的人来说,Stripe 为 setting up future payments here. 提供了一个新的 API

标签: payment stripe-payments


【解决方案1】:

我建议不要保存令牌本身,而是创建一个客户并保存您的客户 ID。然后,您可以在将来的任何时间向您的客户收费。请参阅我们在 saving card details for later 上的文档。

在 javscript 文件中我们如何处理 stripeResponseHandler 和函数 stripeResponseHandler(status, response)。

在调用createToken 时,您需要创建一个函数并将其作为stripeResponseHandler 传递。所有这个功能需要做的就是将您的令牌插入您的表单并提交它。这里有一个简单的例子:https://gist.github.com/boucher/1750375

【讨论】:

  • 你能回复下面的答案吗?
  • 为了保存客户 ID,我需要扩展 Django 用户模型还是推荐的方法
【解决方案2】:

创建一个客户对象并仅在本地保存卡 ID,而不是保存令牌。 当您付款时,您可以选择定义要收费的卡。(如果您将客户 ID 传递给 stripe.charges.create)。在这种情况下,您不必传递令牌。使用这种方法,您也不需要处理默认卡。

stripe.charges.create({
amount: 400,
currency: "usd",
card: "card_xxxxx", 
customer: "cus_xxxxxx", 

【讨论】:

  • 注意:响应返回customer_id,所以它似乎应该从没有customer_id的源(令牌)开始工作,然后您可以在付款成功后将其放入您的数据库中。 .
【解决方案3】:

在 Stripe 中,为了保存一张卡(或银行帐户)以供以后收费,您必须创建一个客户,然后将付款来源(卡或银行帐户)添加到该客户。

创建具有付款来源(或多个来源)的客户后,您有 3 个选项来创建费用。

  1. 使用默认来源向客户收费:

    Stripe::Charge.create(
        amount: 1000,
        currency: 'usd',
        customer: 'cus_xxxx'
    )
    
  2. 使用信用卡向客户收费:

    Stripe::Charge.create(
        amount: 5000,
        currency: 'usd',
        customer: 'cus_xxxx',
        card: 'card_xxxx'
    )
    
  3. 使用银行账户向客户收费:

    Stripe::Charge.create(
        amount: 8000,
        currency: 'usd',
        customer: 'cus_xxxx',
        bank_account: 'ba_xxxx'
    )
    

【讨论】:

  • 第二种方法没有记录here是没有记录还是现在不起作用?
  • Stripes 官方@types typescript 文件已删除 card 属性,因此您似乎必须从现在开始使用选项 1 或 3
【解决方案4】:

使用此代码剪切,稍后您可以通过传递 capture: true 来捕获交易 id 上的付款

token = params[:stripeToken]
    # Charge the user's card:
    charge = Stripe::Charge.create(
      :amount => 1000,
      :currency => "usd",
      :description => "Example charge",
      :capture => false,
      :source => token,
    )

更多详情请参考link 如前所述:

capture:- 可选,默认为 true 是否立即捕获指控。如果为 false,则收费会发出授权(或预授权),并且需要稍后捕获。未捕获的费用将在 7 天后到期。欲了解更多信息,see authorizing charges and settling later.

我认为它解决了你面临的问题

【讨论】:

  • 是的,我已经添加了更多详细信息来回答。
【解决方案5】:

要创建token,首先需要参考stripe.com的stripe.js

   <script src="https://js.stripe.com/v3/"></script>

然后添加以下代码以添加您的卡信息并生成令牌。

    var stripe = Stripe('Your stripe publisheable key');
  var elements = stripe.elements;

stripe.createToken(elements[0], additionalData).then(function (result) {
                example.classList.remove('submitting');

                if (result.token) {
                    // If we received a token, show the token ID.
                    example.querySelector('.token').innerText = result.token.id;
                    example.classList.add('submitted');
                }

在这里,您将获得一个令牌,这是创建客户所必需的。使用以下代码创建您的客户。我使用 C#.NET

StripeConfiguration.SetApiKey("sk_test_JTJYT2SJCb3JjLQQ4I5ShDLD");

var options = new CustomerCreateOptions {
  Description = "Customer for jenny.rosen@example.com",
  SourceToken = "tok_amex"
};

var service = new CustomerService();
Customer customer = service.Create(options);

然后,您可以从您从条带获得的卡令牌中从该用户那里削减您的价格,如下所示:

StripeConfiguration.SetApiKey("sk_test_JTJYT2SJCb3JjLQQ4I5ShDLD");

var options = new ChargeCreateOptions {
    Amount = 2000,
    Currency = "aud",
    Description = "Charge for jenny.rosen@example.com",
    SourceId = "tok_amex" // obtained with Stripe.js, }; var service = new ChargeService(); Charge charge = service.Create(options);

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2014-07-04
    相关资源
    最近更新 更多