@marktuff P.s. Here’s a list of prefill form fields you can use if needed:
@lantzgould thanks for this, definitely handy.
Question for you. After onboarding your users through Connect Express, what workflows are you utilizing to capture payment and then pay your sellers?
I’m not sure if you saw my scenario in Zeroqode’s new Stripe plugin thread, but I want to be able to set up sellers in my marketplace to be able to either:
a.) pay multiple sellers at the point of charge, or
b.) accept payment on behalf of all sellers in the cart and disperse funds to them
At first I was trying to figure out a way to have each order make a charge for every seller, but realize the user has to enter in payment details each time “charge the current user” is used. So that doesn’t seem practical.
In the other thread it seemed as though Levon was suggesting to charge the user the total cart price, then disperse the funds back to sellers using API Workflows (on a list?). That seems more efficient, so I tried to do that, but wasn’t quite sure how to set it up so that all the sellers from the list of orders are given their funds. So what I did was simplified it to just test the first order in the list of orders, and using an API Workflow to trigger a “Transfer to Seller” workflow action. Unfortunately, my test didn’t work and no funds were transferred.
The problem I think is if you originally use the “charge the user’s card” workflow WITHOUT the checkbox “The payee of the transaction is another user” checked (like in the screenshot below), then you cannot disperse funds back to sellers, since it seems Stripe will store the funds in a separate bucket – not connected to seller accounts (or am I supposed to fill out the fields “source charge ID” and “Transfer Group”?)
Is this your understanding too?
Do you utilize the checkbox “The payee of the transaction is another user”?
Do you allow users to buy products from multiple sellers at once? Or one at a time?
And how did you set it up to payout to your sellers?
I hope you can lend a hand again!
Hey @marktuff!
I love a challenge, as I haven’t tried a setup like this before. My platform was typically just one off payments directly to sellers when they purchased items. (So, I may not have all of your answers, but I’ll try to steer you in the right direction.)
As for simply capturing payments, here’s my method:
I setup an API Call that just utilizes the ‘direct charge’ method. For reference, here’s my setup on this:
Which results in a workflow similar to this. The ‘header’ is where you’ll use the dynamic value of the users ‘stripe_user_id’ of the seller, and of course the dynamic ‘amount’. That’s how Stripe knows who to pay and how much.
Let me know if you need further guidance on setting this up.
Now the second portion to your question is where it gets a bit convoluted… and I’ll attest that while Stripe is an incredible resource, it can sometimes be overwhelming with the amount of things you can do.
This sounds like you’ll want to take advantage of the ‘separate charges and transfers’.
(Documentation on this can be found here.)
A snippet from Stripe’s documentation on choosing the best approach:
Settings this up seems to not be that bad. We’ll first just setup another API Call like this:
Which should render a workflow result like this:
Of course, just like before - we’ll need to replace these values with dynamic values. So whomever is getting the transfer to, will be placed in this workflow.
*Note: Don’t touch the ‘body’ of this workflow lol.
And a P.S. I haven’t tested this quite yet. Just working as I go with your questions above.
I read through what Levon wrote in the other post, and I suppose you could still utilize his theory of API WF’s. In that approach, I’d recommend using the above setup mentioned to execute on that.
Hope this helps a bit.
-Brandon
Hi @lantzgould, thanks for the response and interesting approach, thanks for sharing!
With your direct charge method, is this the same as bubble’s “charge the user’s card” WF action? Are you asking for the user’s CC at checkout via Stripe’s form, or have you captured the CC info prior, like at signup.
Do you know if the route you shared would be appreciably better / advantageous over the setup that Levon mentioned, or will it achieve the same results, just a different way to do it?
I have it mostly wired with the existing bubble plugin, but I don’t have it executing all the way with transferring funds, as I’m not quite sure how to set it up.
I think regardless of which route I go, the part I’m most confused about is how to transfer to multiple sellers at once. I can understand 1 to 1, but how do I instruct bubble to take a list of Orders, and via Stripe disperse funds to each of the sellers of those Orders… lol
@marktuff Anytime!
So, what I do in my app is they start with a free trial. After their free trial they need to enter a credit card and choose a plan, which is just their subscription to use my platform.
Should they choose to register as a seller, they just go through the simple Stripe Express process and they are set.
My sellers, all have individual ‘portals’ that their users can browse and purchase things from. All I do here is charge that users card, and direct payment to the seller. (In which case I believe the built in bubble one will do just fine, as in your question/example.)
I think I’ll need to do more testing, as I’m unsure to be honest, and certainly not a Stripe expert.
On the other hand, I’ve seen posts by @keith that explain iterating through a list. (Keith, sorry to bother you with a tag, but I figured you may have some cool insight on iterating through a cart to shed light in this example) So in your case of having a ‘cart’, you’d iterate through that list and grab the carts items ‘stripe_user_id’ and either run the charge method, or transfer method as I showed up above using their ID.
Reading through what Levon mentioned, I think he and I are thinking somewhat the same thing, and will probably render the same result.
*Edit: I found it. I think with this cool little plugin, it may be of help:
@lantzgould thanks for the explanation.
The way you set yours up makes sense and it’s more straightforward. I’m starting to think for my sanity I should just go the 1:1 route.
That thread you posted about List Popper was pretty awesome, @Keith is hilarious lol. I watched the whole thing, however, and perhaps it’s my gap of knowledge, but I can better see how it works on lists in bubble, but I’m not sure how it works to trigger the Stripe transfer action for as many sellers as there are in the cart.
I just am not sure how to setup the Transfer to Seller action so that the list can be recursively run through so that all sellers on the list are transferred to. It seems like the Transfer workflow action wants me to identify a singular item from the list.
Maybe @Keith can chime in and lend a few thoughts…?
@lantzgould in your example, how are you specifying the values of “Stripe-Account”, “Amount”, “Destination”, “Transfer Group”, in the scenario of wanting to transfer to several different sellers?
What specific dynamic expressions go into those fields?
@marktuff Hmm… I’ll wait to see if Keith chimes in before continuing on the above. But to answer your question on what would be placed in the transfer, it would be something like:
(header) Stripe Account: Either yours or someone else’s Stripe Account ID
(param) Amount: $10,000,000
(param) Currency: usd
(param) Destination: Who you’re transferring to. (If it’s you, then your Stripe ID goes here)
The transfer group docs can be found here. This (according to their docs) basically just refers to if you need the ability to pay a provider or client, but there’s no associated customer payment. Similar to Venmo when you just transfer from one account to the other, even though there wasn’t technically any transaction.
Hope that made sense a bit… lol. I’m still researching on this topic.
Hi @lantzgould, I feel like an iddddiot lol but I was using the wrong API Workflow action. I thought I had schedule API Workflow on a list selected, but it was just the regular schedule API wf. No wonder I couldn’t line up the expressions!! Hours of aggravation. Sorry for dragging you into the madness, but I really appreciate your feedback. (Doh!)
Here is the API Workflow on a List setup.
Now onto the API Workflow that is triggered-- the elusive Stripe “Transfer” action (via bubble). Look mom, no red!
It’s funny as it schedules the right number of transfer actions in the scheduler, so it’s clearly moving through the list, but a big fat nothing happened. I checked the logs and this is what it said. I’m not sure what to attribute “temporary error” to
At first I wasn’t sure if it was because I needed the “Transfer Group” field to be filled out, but it did populate the Transfer Group despite it being blank, so I would assume that wasn’t the hangup. Then I thought maybe the destination seller needs to be the Stripe Seller ID instead? So I tried that and bubble doesn’t want to accept that value…
Do you know if there are restrictions on test transfers, since I know they are in beta?
Also I looked through the docs (thanks for posting) and noticed that there are limitations in that you have to be in the same region as your sellers for the transfer > payout to even work… This could be a bit of a limitation that requires additional consideration.
So with the Venmo like setup, is it clear that even AFTER the transfer, that an additional action to payout needs to be initiated?
@lantzgould, does your Charge Card method redirect users from your app to an input payments form on Stripe? Or are you capturing the CC values all on your app, and sending those values to Stripe without ever having the user leave your site?
@lantzgould, sorry for the bombardment of posts.
I am trying to setup your API call method from above and seeing if it provides me more luck.
I tried the below setup, but I got an error message when I tried to initialize the call.
It could be because I attempted to type in the Body manually and the characters are off somewhere (though I quadruple checked). I couldn’t find where to copy and paste that from in the Stripe doc. Does this look like what you have…? Are the keys the same as in the token example?
Hi @marktuff,
Oh boy - sounds like you’ve been having fun in the Stripe black hole lol.
Here’s a simplified layout of the API call. Just click on the ‘Response’ tab to copy and paste. But the official stripe docs can be found here.
I’m using both the custom api and bubble’s stripe plugin. I utilize the Bubble stripe plugin to grab the card, as it’s just easier.
So, a break down really quick on my setup:
- User signs up without a credit card (has fun for 7 days)
- Get’s a notice to update their billing info, and enters a card (bubble cc capture)
- User wants to register as a seller, no prob, we’ll send them to the Express gateway to get them setup.
- User now can post items on their ‘portal’ in which the cc capture for their information comes in, and I direct that charge using my own ‘direct charge’ call (I just use my users ID to point to them, as I don’t take a cut)
A few screenshots from an ugly example I had:
Good question, and I’m not sure on that.
The ‘register sellers’ on your platform all have their own stripe portal. So they can payout whenever they want. Unless I missed the question… (sorry, long day)
Apologies if I missed anything.
@lantzgould Worst week of my life… lol
Did you forget a link there? I don’t see the simplified layout…?
Thanks for sharing!
Does this appear as an popup overlaid on your site, or does it kick you out of your site and onto Stripe’s external address? I ask as in browser mode it was overlaid as a popup on my page, but then when I was testing in mobile mode in the Google developer’s view, it shot me off my page and onto a new tab to input these fields. I am concerned as I have a mobile app and would prefer not to kick the user off the mobile app.
Oops. I guess I was serious on the long day… lol here you go:
Yep, I’m using the popup. I just cropped the photo for convenience. I typically had my users enter billing info on a desktop and never really noticed a need to have them enter in on mobile. But in a market place setting, I could definelty see that.
An API Call can be set to create a card without the popup, and utilizes tokens for security.
Ha no worries, @lantzgould, thanks for this, but I’m still not quite getting it. Nothing I see on the page resembles the code in your body…?
@marktuff Ah ok, I pasted the wrong one. It’s on there now. The bottom portion is the body. Then manually enter the response like the call we set up before. Then hit save.
Lol, got it now @lantzgould, thanks.
Where and at what point do I capture the Transfer Group?
I got the call to show, now I’m not too sure how to populate the TG field.
@marktuff I haven’t gotten that far yet in testing…
But, I know that field is optional. Looking at the stripe docs, it looks like it can be any string you want it to be. It essentially just identifies a single business action.
Doc link to transfer groups: https://stripe.com/docs/connect/charges-transfers#transfer-options
@lantzgould ah ok that makes sense.
Ok, so I’m having some issues here with the charge the card wf action from bubble (what else is new).
I registered myself as a test seller, using your express connect method in this thread, it went through and I could see myself in the Stripe Connect dashboard as a seller.
Then I tried to purchase an item from my test seller with bubble’s charge card workflow, and it returned this error.
This is the same error I received in the previous attempts to run the transfer action on a list of order’s sellers to payout the sellers.
Then I received the below email from Stripe, saying I’m not registered as a seller, which was strange, since I AM registered.
Here’s the proof. The account on the bottom.
Looking at the Stripe dashboard, I suspect this error to be because bubble’s Charge User’s Card workflow, in connection with the checkbox option to payout the seller (screenshot below), only works with standard connect accounts and NOT express connect accounts.
Maybe this is part of the reason why Zeroqode built that plugin.
@lantzgould, is that why you created your own charge card method, specifically to work with express?
I’m not 100%, but am fairly sure this was intended for only Stripe Connect.
Yep, exactly. The custom calls I setup all work with Express.