Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use Stripe to delay charging a customer until a physical item is shipped?

I'm in the process of building an online marketplace which sells shippable goods. The site will be similar to Etsy, which will connect merchants with buyers.

I'd like to be able to charge a customer's card ONLY when an item is shipped by a merchant to avoid chargebacks and provide an Amazon-like payment experience. This will also help us avoid chargebacks and payment disputes in case a merchant is slow to ship or flakes out. In some cases, the goods will take more than 7 days to be custom manufactured and shipped out

Here's an example timeline:

  • 1/1/2014 - Customer adds $75 worth of items to their cart and clicks "buy". Enters credit card info.
  • 1/1/2014 - Customer's card is verified and a $75 temporary hold is placed on their card. Order is sent to merchant for fulfillment.
  • 1/14/2014 - Merchant ships goods to customer and adds shipping tracking info
  • 1/14/2014 - Customer's card is charged for the full amount and merchant receives $75 minus fees.

I plan to use Stripe Connect for payment processing, but am not sure how to delay capturing a payment for more than 7 days. Any thoughts? I don't want to aggregate the funds under my own account and use payouts since this will likely run afoul of money transmission laws. Any help would be appreciated!

EDIT: It looks like Quora has a similar question here , but the answers don't seem to deal with the case where a merchant ships out the item but the payment fails.

like image 496
hberg Avatar asked Feb 24 '14 21:02

hberg


People also ask

Does Stripe put payments on hold?

Stripe supports two-step card payments so you can first authorize a charge, then wait to settle (capture) it later. When a charge is authorized, the card issuer guarantees the funds and the amount held on the customer's card for up to 7 days, or 2 days for in-person payments using Terminal.

Does Stripe allow preauthorization?

Tell Stripe to authorize only Before continuing to capture, authorize the card by confirming the PaymentIntent. You can do this by setting the confirm parameter to true while creating the PaymentIntent, or by performing a separate call to the confirm API.

What is an uncaptured payment Stripe?

If you see any "Uncaptured" payments in your Stripe account, you can safely ignore them (or even cancel them if you want to tidy up). They only happen if there is an unforeseen issue at checkout. Your customer will not have been charged. Last updated on December 8, 2020.


1 Answers

After further research, it seems there's no way to delay capturing a charge past the 7 day authorization window.

But here's one way to delay a charge:

  1. Tokenize a credit card using the stripe.js library
  2. Create a new stripe customer passing in the token as the "card" param

An example from the Stripe FAQ: https://support.stripe.com/questions/can-i-save-a-card-and-charge-it-later

Note that the longer you wait between tokenizing a card and actually charging it, the more likely your charge will be declined for various reasons (expired card, lack of funds, fraud, etc). This also adds a layer of complexity (and lost sales) since you'll need to ask a buyer to resubmit payment info.

I'd still like to confirm that a certain amount can be charged (like a "preauthorization"), but this lets me at least charge the card at a later date.

like image 166
hberg Avatar answered Oct 04 '22 04:10

hberg