Stripe Payment: Save token and customer and make payment later from token

瘦欲@ 提交于 2019-11-28 16:32:08
brian

Instead of saving the token itself, I recommend creating a customer and saving your customer ID. You can then charge your customer at any time in the future. See our documentation on saving card details for later.

In javscript file how we handle stripeResponseHandler and function stripeResponseHandler(status, response).

You will need to create a function and pass it as your stripeResponseHandler when calling createToken. All this function needs to do is insert your token into your form and submit it. There's a simple example of that here: https://gist.github.com/boucher/1750375

Châu Hồng Lĩnh

In Stripe, in order to save a card (or bank account) to charge later, you have to create a customer, then add payment sources (card or bank_account) to that customer.

Once you create a customer with a payment source (or sources), you have 3 options to create a charge.

  1. Charge the customer using default source:

    Stripe::Charge.create(
        amount: 1000,
        currency: 'usd',
        customer: 'cus_xxxx'
    )
    
  2. Charge the customer using a credit card:

    Stripe::Charge.create(
        amount: 5000,
        currency: 'usd',
        customer: 'cus_xxxx',
        card: 'card_xxxx'
    )
    
  3. Charge the customer using a bank account:

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

Instead of saving the tokens create a customer object and save only the card ids locally. When you make a payment you can optionally define the card to be charged.(If you pass the customer id to stripe.charges.create).In that case you do not have to pass the token. With this approach you do not need to deal with the default card either.

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

Use this code snipped and later you can capture payment on transaction id by passing capture: true

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

for more detail information refer link as stated:

capture:- optional, default is true Whether or not to immediately capture the charge. When false, the charge issues an authorization (or pre-authorization), and will need to be captured later. Uncaptured charges expire in 7 days. For more information, see authorizing charges and settling later.

I think it solves the problem you are facing

For creating token, you first need to refer stripe.js from stripe.com

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

And then add below code to add your card info and generate token.

    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');
                }

Here, you will get a token, that will be necessary to create your customer. Use below code to create your customer. I used 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);

Then, you can cut your price form this user from the card token you got from stripe like below:

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);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!