tipsi/tipsi-stripe

Stripe PaymentIntents

Reacye opened this issue ยท 220 comments

Are you going to insert support for new Stripe PaymentIntents API?

I've already +1 one this, and if you plan on supporting this, I'm curious about the timeline as the September 2019 deadline is fast approaching.

Any update on this?

@enda-phorest integration doesn't look very hard. But probably tipsi team will implement it only if there are no other options. Probably someone will need it before that and send a PR

Any update ?

Also wondering if there is any update?

Hi everyone,

Two days ago, I have sent a message to Stripe to get some update about SCA compliance and integration with or without third-party.

To resume, the answer is pretty clear: check with Tipsi OR do your own integration.

@TipsiTeam: Do you plan tu support this feature before September?

ยซ Hello,

This is Mitch with Stripes SCA team stepping in here, I hope this email finds you well.

Reading through your chat here I see you are using React Native and want to know how to get your integration set up to be SCA compliant. One thing to mention is that most of our third party integration have not completed their SCA updates yet. Partially because not everything is fully moved over yet on our end either. Most are waiting until all of the products and features are done being updated before they change their set up. This puts a lot of companies like you in a bind because you rely on these third parties but they are not ready yet.

So first and foremost I would reach out to Tipsi about this and find out what their plans are. Then I would using that information plan on what you are going to do to be ready when September rolls around.

Stripe offers a few easy integration options such as Checkout which now uses payment intents to allow for 3DS and SCA compliance:

https://stripe.com/docs/payments/checkout

But instead of redoing your whole integration first as I said reach out to Tipsi and see what they plan to do and then go from there. If you have further questions I'm always happy to help.

Best wishes, ยป

@dziter our answer remains unchanged:
we will do integration if we don't get any PR from the community.

Because our major market is the US we don't have tight deadlines for it as other companies who are working in the EU. So there is no ETA from our team, we will do it when we have time for it.

Thanks for the update @dziter and @cybergrind.
For more EU focused companies, a PR from the community seems more realistic if you have no ETA at Tipsi.

First of all a huge thanks @cybergrind and the tipsi team for your hard work on this project.

As a UK based product that relies on Stripe we're being forced to move from using the Charge API to the Payment Intents API due to strong customer authentication.

Having read the comments above I totally understand that adding support for Payment Intents isn't a priority for tipsi. However, given the popularity of this library (7,108 weekly downloads at time of writing this) having no clear roadmap for this is quite concerning since literally, our whole business won't be able to operate from September 14th without this migration.

Personally, I'd love to be in a position to contribute a PR but as a super small team of two with no Objective-C or Java experience, this wouldn't really be practical.

Again, to reiterate I get that this isn't at all a tipsi's problem. The library is clearly used by so many companies and products that will be affected. I think we collectively need to devise a clear roadmap and solution to this problem to ensure that all these businesses aren't affected.

Given the breadth of people dependent and that it is currently the only react native library for Stripe I'd be inclined to ask Stripe directly if they are able to contribute. Alternatively, has anyone else got experience in crowdfunding the work needed to add support to this open source project?

I hope you don't mind but I'm copying in some of the top two recent contributors from each of stripe-node, stripe-android and stripe-ios to see if they are able to support (@ob-stripe @remi-stripe @mshafrir-stripe @ksun2-stripe @yuki-stripe @csabol-stripe).

@adambutler thanks for raising this, all valid and time-sensitive points. +1 to thanking @cybergrind and team for maintaining tipsi for the react native community + Stripe customers. We know this project is a lot to maintain and open source contributions are why react native developers are able to quickly implement payments.

We're talking internally today on setting a plan and will get back to this thread in short order.

@trag-stripe API changes itself isn't that hard.
E2E tests are the issue:

  • #470 blocked by fixing tests and it is blocking all new PRs
  • #448 will require new tests.

So implementing new APIs is 15% of the time, fixing and writing tests - 85%. So it probably will consume at least full week of the one developer and we cannot make this commitment right now.

Ok, thanks for the context - makes sense that payment methods, intents, and the required tests need to been seen as all part of the overall work that's required. We had a kick off this morning and are planning to submit relevant PRs to contribute to tipsi-stripe. (Work & progress will be over the next few weeks)

high five

๐Ÿ‘ Amazing response from both the tipsi and Stripe teams. Thank you.

I have implemented payments intents based off Tipsi for our app. Happy to review PRs when added properly.

@tomrevansecho do you have a fork for what you did please ?

Unfortunately no due as I wasn't sure about the level of PCI compliance and have used native components from Stripe SDK for both iOS and Android. I wrote the bridge for both iOS and Android and this project was a huge help, is some tidy up still to do.

I would love to contribute back, its finding the time is the hard part. The Stripe docs were not the easiest to follow but I was lucky I had already done the web implementation, so I didn't require any further backend changes for this.

The biggest thing to implement is the action for further verification, this was the Android implementation roughly.

` @ReactMethod
public void handleCardAction(ReadableMap params, Promise promise) {

    String paymentIntentClientSecret = params.getString(FIELD_PAYMENT_INTENT_CLIENT_SECRET);

    if (paymentIntentClientSecret != null) {

        try {
            final PaymentIntentParams retrievePaymentIntentParams =
                    PaymentIntentParams.createRetrievePaymentIntentParams(
                            paymentIntentClientSecret);

            AsyncTask.execute(() -> {
                try {
                    // retrieve the PaymentIntent on a background thread
                    final PaymentIntent paymentIntent =
                            mStripe.retrievePaymentIntentSynchronous(
                                    retrievePaymentIntentParams,
                                    BuildConfig.StripeKey);

                    if (paymentIntent != null && paymentIntent.requiresAction()) {

                        Uri redirectUrl = paymentIntent.getRedirectUrl();
                        if (redirectUrl != null) {
                            if (getCurrentActivity() == null) {
                                promise.reject(
                                        getErrorCode(mErrorCodes, "paymentIntentRetrieveFailed"),
                                        getDescription(mErrorCodes, "paymentIntentRetrieveFailed")
                                );
                            } else {
                                mPromise = promise;
                            }

                            getCurrentActivity().startActivity(
                                    new Intent(Intent.ACTION_VIEW, redirectUrl));
                        }
                    } else {
                        promise.resolve(paymentIntent.getId());
                    }
                } catch (Exception ex) {
                    promise.reject(toErrorCode(ex), ex.getMessage());
                }
            });
        } catch (Exception ex) {
            promise.reject(toErrorCode(ex), ex.getMessage());
        }
    } else {
        promise.reject(
                getErrorCode(mErrorCodes, "paymentIntentParameterMissing"),
                getDescription(mErrorCodes, "paymentIntentParameterMissing")
        );
    }
}`

and for iOS:

` @objc func handleCardAction(_ params: Dictionary<String, String>, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {

if let paymentIntentClientSecret = params[RNStripeManager.field_payment_intent_client_secret] {
  
  STPAPIClient.shared().retrievePaymentIntent(withClientSecret: paymentIntentClientSecret) { [weak self] (paymentIntent, error) in
    if let paymentIntent = paymentIntent, paymentIntent.status == STPPaymentIntentStatus.requiresAction {
      
      guard let redirectContext = STPRedirectContext(paymentIntent: paymentIntent, completion: { clientSecret, redirectError in
        
        guard redirectError == nil else {
          rejecter(RNStripeManager.error_code, RNStripeManager.error_stripe_unknown, nil);
          return
        }
        
        // Completion block when any redirect flow is done
        STPAPIClient.shared().retrievePaymentIntent(withClientSecret: paymentIntentClientSecret) { confirmPaymentIntent, error in
          if let confirmPaymentIntent = confirmPaymentIntent, confirmPaymentIntent.status == STPPaymentIntentStatus.requiresConfirmation {
            
            resolver(confirmPaymentIntent.stripeId)
            
          } else {
            rejecter(RNStripeManager.error_code, RNStripeManager.error_stripe_unknown, nil);
          }
        }
      }) else {
        
        // Unsupported by Stripe
        rejecter(RNStripeManager.error_code, RNStripeManager.error_stripe_unknown, nil);
        return
      }
      
      if let strongSelf = self {
        strongSelf.redirectContext = redirectContext
        
        // TODO - ... bad practice
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        redirectContext.startRedirectFlow(from: appDelegate.window.rootViewController!)
      } else {
        rejecter(RNStripeManager.error_code, RNStripeManager.error_stripe_unknown, nil);
      }
    } else {
      rejecter(RNStripeManager.error_code, RNStripeManager.error_stripe_unknown, nil);
    }
  }
} else {
  rejecter(RNStripeManager.error_code, RNStripeManager.error_stripe_unknown, nil);
}

}`

I will try and can get some time but I can't promise anything - happy to review any PRs if anyone makes an earlier start.

is anyone still working on PaymentIntent for tipsi-stripe?

Comment from trag-stripe above indicates that Stripe will kindly do a PR for this issue quite soon.

@trag-stripe can you provide any updates on this?

Hi @enda-phorest / @bamdadd / @matthiasleitner - mini update here:

PaymentIntent / SCA support has been in active developement for the last two weeks - point developer on our team is @mindlapse. Context: Beyond PaymentIntents, there were a few pre-existing issues we agreed to resolve around CI Builds and migrating to the latest versions of our Mobile SDKs.

You can track the key PRs here as they land: https://github.com/tipsi/tipsi-stripe/pulls/mindlapse

@trag-stripe thank you very much for the mini update. We can't wait for this piece of work and excited that Stripe is getting involved directly !

@mindlapse do you think you can point us to a particular PR for supports on PaymentIntents ?

@trag-stripe thanks for the update! @mindlapse As the deadline for SCA is approaching would be glad if you could share some details about your internal timeline.

Happy to support on certain PRs if possible.

I'm thrilled to hear that you're working on this @trag-stripe / @mindlapse! Do you recommend using a particular branch? or are they merging right into Tipsi-Master? We're kicking off our backend work, and we want to start adopting tipsi-stripe (we don't currently have stripe in our RN app). So I would love to use the right codebase!

Please give us an update

Ideally we'll be bringing the payment intent changes into master. At the moment we're working through quite a few Travis pipeline/Android emulator/Appium issues to unblock the PRs, and the biggest priority once those are resolved is to bring in the PaymentIntent changes.

@fbartho I know you're interested in a preview build so I'll look to get one set up soon!

I'm excited to hear that development on support for the Payment Intents API is in progress. Thanks to all those working on it, particulary @mindlapse for taking point.

The Tipsi libary is a key part of our mobile products, and so as you can imagine i've ben keenly tracking this Issue for a resolution.

Could you please share an upate with where you are, and if possible share the outstanding PR's? I am happy to contribute where possible to getting this over the line given it's importance to us (and many others I'm sure), so let us know if there is anything the community can do to help.

Hi all,
Really glad to see the interest, there are a couple of gaps where we could use some help.

  • (in progress by @mindlapse) Stabilizing the android CI pipeline
  • (in progress by @mindlapse) Adding 'AppInfo' changes for Android that identify tipsi-stripe as the client for transactions made through it
  • Adding the same 'AppInfo' changes as above, except for iOS
  • Stabilizing the iOS build pipeline (i.e. so that it doesn't time out from inactivity)
  • Integrating the above into a branch that contains changes for Payment Intents
  • Updating the example app with demo pages using test cards that demonstrate supported payment intent use cases
  • Enhancing the CI pipeline test suite to validate that the test pages operate as expected (and that the existing test suite continues to pass)

Our biggest gap at the moment is with the iOS pipeline - we're seeing timeouts on Travis. We need someone to look at the iOS pipeline, and to determine if the timeout can be solved on Travis open source build machines, or if we need to move to something like real device testing or a provider that specializes in mobile app testing like SauceLabs. The GitHub Sponsors program may be a good option to help cover the subscription costs if we go that route.

In terms of PRs, there is #470 which contains changes related to payment intents, these changes will need to go through a review and will need a test suite created and the example app updated. The changes are really appreciated - I'm looking forward to helping review them.

My focus today is on finishing up the stabilization of the android pipeline, which is nearly ready (i.e. with emulation that doesn't timeout) and I expect to have a PR for those changes soon.

So that's the update! Thank you for checking in - if you know someone who can volunteer with the iOS pipeline and iOS AppInfo changes, that would be really helpful with moving this forward.

Thanks for the updates, I'm also following this repository. Depending on the timeline I was considering using a web view inside my RN app in the meantime. Do you guys see any major downside to this approach?

Hi @hugoh59 am also doing the same, and manually handling redirection using the next_actions object and as far as i know, It is only method to go with tipsi stripe and performing 3d secure using paymentIntent for now.
However I am stuck on creating paymentMethod using tipsi-stripe (since we are not a PCI compliant firm, paymentMethod has to be created in client side).
Can anybody help me with that?

@shubhamkes we are creating paymentMethod on the client side and doing the paymentIntent work on the server side. Here is our fork: https://github.com/b-social/tipsi-stripe
We are still working on it and its not in production yet. But we did some dev testing and it seems to be working on both android and ios

Hello, any updates since the deadline is soon ?

We're nearing the finish line on the changes and will have a beta branch available soon. Any volunteers for the beta? Just curious, what companies are represented here?

I'd be interested in participating in the beta branch. My company is CodeCapi and we are developing an app for bobdriver.nl

Currently not using tipsi at all but planning to switch to tipsi beginning september, to hopefully be in time for sca changes. Our fallback is sending receipts from Stripe with a payment request link, which is not so nice. Have trying to setup intents without tipsi but couldn't make it work because we are currently not using stripe elements.

Would be interested in beta too

Same here, I'm working on an app called Dogtime Community and would like to roll out a new feature using Stripe PaymentIntent.

For real-time progress on the code and to chat with those developing this in terms of use cases, I highly recommend joining the discord server for this project. It's active:
https://discord.gg/8g6ppq2

re: Beta volunteers, great! We'll have it ready soon and will send out notifications

I would also be interested in joining the beta, working on Payments for events etc. for a prop-tech company called District-Technologies. We would like to unblock this feature from being further developed :)

RTC1 commented

Interested in beta also.

Ice Leisure Group - ticketing app for our Christmas ice-rinks.

Good news, thanks @mindlapse!

We're also interested for the beta ๐Ÿ‘

Also interested in trying the beta,

Choose

Thanks @mindlapse

Definitely interested in Beta, we're waiting to release around 2000 apps with this SCA work asap so very keen on testing when available.

Are the below items still requiring some help from the community?

[ ] Adding the same 'AppInfo' changes as above, except for iOS
[ ] Stabilizing the iOS build pipeline (i.e. so that it doesn't time out from inactivity)
[ ] Integrating the above into a branch that contains changes for Payment Intents
[ ] Updating the example app with demo pages using test cards that demonstrate supported payment intent use cases
[ ] Enhancing the CI pipeline test suite to validate that the test pages operate as expected (and that the existing test suite continues to pass)

@mindlapse also happy to support beta testing

@enda-phorest, what would be a huge help right now are new appium tests for the new payment intent demo page on the experimental branch. A demo page for setupintents is also on the way and will need corresponding coverage there as well

Interested for the beta.

Thanks @mindlapse

Beta-tester here for CoopCycle โœ‹

Same, interested for the beta.

@mindlapse Yes please for the beta for Ordoo

@mindlapse : Yes, waiting to try this beta.
Our app for french bakeries should be release on 01/09 and we still need this feature to be ready.

Thanks a lot for your work.

Our team is also interested in trying the beta !

Karamel - App to find and book kids activities from newborn to 18 years old

Thanks a lot @mindlapse.

jaw9c commented

We're interested in joining the beta too

Theodo UK

timrc commented

We are also interested in beta https://www.trustedhousesitters.com/

We are interested in trying the beta, we are a french startup in foodtech.

xsv24 commented

We are interested in trying the beta we are a start-up in Waste management in the UK.

Thanks for all your hard work!

We are also interested in trying the BETA :) we are in Insuratech in the UK.

Brolly UK

Thank you so much for your hard work.

Hi ๐Ÿ–– Interested for the beta for @premieroctet ๐Ÿ’•

Hi,

Interested in the beta also.
Startup based in Paris, Proptech ind.
Thanks.

Our team is also interested in trying the beta โœŒ๐Ÿผ

Happy Order - App to order and pay on restaurants

Thanks a lot for your work @mindlapse plus team!

We are interested in trying the beta if possible.

We are interested in beta test too.
https://vanillainnovations.com
Thank you

Would be interested in Beta :)

@mindlapse thanks a lot! we're also interested in Beta.

Hi,

we're from ORDA, a German startup that allows users to pay in restaurants from their phone. We'd be super interested to join the BETA as well!

Best,
Peter

Very interested in the beta.

Hi all,

Very interested in the beta. Work from Brest, Britanny, France. Beable Company.

Thx for all amazing work !

angji commented

Very interested in the beta also.
Thanks for the great work!

We are interested in trying the beta if possible.

Hi! We are extremely interested in a beta as well.

Hello! Courtify's team is also interested in a beta!

Hi, GearedApp's team is also interested in the beta!
https://geared.app/

Hi!
we are getsby and we are highly interested in trying out the new beta.
Thanks for the awesome work so far!

Hello!

Definitely want to help test the beta as we will be in need of this feature asap!
For company: https://www.tiptapp.com/en

Thanks!

Hi :) We are Redlight Software and would like to test the beta, as we need to use it in some projects.
Thanks

Hi,
i'm interested in the beta for my personal/friends projects ;)

In the future the company where i work (HUDi) could also be interested in adopting this library.

Hi

I am working for mover which is Sass company for transportation. www.movertransport.com
We would like access to the beta to service our private customers.

Hi,
i'm interested in the beta for starting a personal project. Thanks!

Hey, I would be interested in trying out the beta as well !

We are a french startup located in Paris

Hey we at Bzzt! would be interested in trying the beta.
www.bzzt.se

Hi guys I'm from www.wanderio.com and we are interested in using the beta too.

Hi guys! We're from https://www.thecolvinco.com, a Barcelona based startup, and we want to try this beta as well ๐Ÿ‘

Hi,
We are very interested in trying out the beta too.
https://onceupon.photo
Startup that enables user to make photo books.

Already using tipsi-stripe so we are looking for best solution to be SCA compliant.

Thanks!

Hi guys - please sign us (Beautystack - https://www.beautystack.com) up for the beta - thanks.

Hi, hugely dependent on this fix! Please sign us up! https://appshack.se

Hi all,
Really interested to test it out also, https://rideyego.com

Hi! Im interested in being part of the Beta as well, please add me to the repo!

Hi!
We are also really interested in joining the beta!
Team at https://yepstr.com

โ„น๏ธ It seems as though SCA requirements may have been delayed for 18 months at least for some of us. Here is what I've been able to piece together:

Based on a press release from the UK's Financial Services Authority it seems that the European Banking Authority recommended a delay of the 14th September PSD2 regulations with regards to strong customer authentication. which has now been confirmed by the UK's FCA.

My understanding though is that it is up to each national authority to announce themselves. This understanding is based on the following qite from Business Insider:

While the European Banking Authority (EBA) did not delay SCA's introduction across the EU, it did note that national authorities could offer "limited additional time" for implementation, which the UK's FCA is now doing. Other nations could follow suit, and since the report that the FCA is reportedly set to endorse notes that there needs to be an EU-wide solution because of cross-border payments, a broader postponement could be on the way.

Reports started to appear least week suggesting that the UK's Financial Services Authority were considering a delay. These were then followed yesterday with a formal press release confirming the decision. However, at this time I understand that this only affects the UK but it's likely that others will follow.

What I remain unclear on stems from this quote from the FCA press release:

The FCA will not take enforcement action against firms if they do not meet the relevant requirements for SCA from 14 September 2019 [...]

This suggests to me that banks may still start enforcing SCA rules from 14th September 2019 if they are ready to do so. If this were the case presumably we would have to continue to push to support SCA for risk of payments failing at banks that are have SCA rules in place.

However, in contrast a quote from this article from the BBC states that "Retailers are going to be delighted that the FCA is taking a pragmatic approach to enforcement of SCA". This suggests to me that this decision would propagate down to us and that we can expect charges (in the UK at least) to continue to work the same as they have been even beyond 14th September 2019.

Does anyone have any further insight into this?

Hey all, my team is very interested in the beta as well.

HqO: https://www.hqo.co/

@adambutler this is what a stripe rep told me:

There's still a lot of uncertainty around what such a delay would look
like. Although we currently anticipate a gradual enforcement, we still
expect the first banks to start declining payments without two-factor
authentication on September 14th. As a result, we still recommend our
users to finish their migration before then. We have the following
support article that gives more context.

https://support.stripe.com/questions/strong-customer-authentication-sca-enforcement-date

Additionally, the delay announcement was about punitive enforcement in the UK, rather than about whether banks would start rejecting payments

we're getting a similar response from stripe as well. probably trying to deflect any kind of liability.

@howitworks18 if you click the link in my response, they have updated it, and it references the current status of several countries (unknown) with links to their original phased rollout plans. If you only care about the UK, you might be okay gambling, but currently we have no info about the rest of Europe

I was super hopeful this would relax the deadline, as my company has a few too many things lined up for the next two months

Has anyone that said they were interested in the beta gotten access yet?

Hi, I would be really interested for testing the beta version!
I'm working at listminut.be

Hi, me too I would like to begin testing, integration and contribute as I can !
I'm from Dishop company !

mbody commented

Hi, I would like to join the beta too ! I'm only working on a prototype for now...
Cheers !

Hi! I would like to join. It's the first time we are implementing Stripe in our mobile app. I am from HON.

tipsi-stripe@8.0.0-beta.1 has been published, based on the experimental branch (thank you @cybergrind for publishing)

This is only a beta - the stable release is planned for Sept 1st.
As a beta participant, please give us feedback about the beta and talk with us on the Discord channel. Here is the invite link: https://discord.gg/8g6ppq2

Is there a summany of any breaking changes between 7.x and 8.x anywhere? Nothing yet in the changelog of the experimental branch.

@tremby -- we haven't collected a full list of the breaking changes. -- Most of the work is new APIs, so the breaking changes should be somewhat small from an API perspective. That said, you will need to change some behaviors if you had already integrated with CardSources/Tokens. This also may include backend changes -- which are obviously out of scope for this library.

I would like to join beta. The company I work for is Brushfire