alfio-event / alf.io

alf.io - The open source ticket reservation system for conferences, trade shows, workshops, meetups
https://alf.io
GNU General Public License v3.0
1.42k stars 346 forks source link

Add Flutterwave as payment gateway #928

Open ghkobbs opened 4 years ago

ghkobbs commented 4 years ago

Currently all the payment methods available does not work in my country and a huge number of other countries as well in Africa therefore we're unable to generate/create API keys etc.

Flutterwave works very well in the Africa region and does accept all major credit cards (inc. Local and International Cards) as well as USSD payment known in our region as Mobile Money which makes it very easy for people to make payments.

Flutterwave offers two main ways of integration:

  1. The first is the standard integration which redirect users to a payment link to make payment and redirect users back to the merchant website after completion. The API doc for the standard integration can be found at https://developer.flutterwave.com/docs/flutterwave-standard

  2. The second is the inline integration which works similarly to the Stripe popup modal. With this integration, payment is done on the same merchant website. The API doc for the inline intergration can be found at https://developer.flutterwave.com/docs/flutterwave-inline

Regards.

syjer commented 4 years ago

hi @ghkobbs , thank you for opening this issue and providing the necessary documentation. You are absolutely right we are missing a payment provider that cover this region.

I would guess the standard integration is the simplest one to implement.

Are you interested to provide a PR for the implementation ?

ghkobbs commented 4 years ago

Hello @syjer , I've tried to implement that for several days now but I am not a java developer and the syntax looks foreign to me. I even tried following the mollie implementation but I couldn't get it to work so I decided to open the issue in case someone will pick it up and work on it.

syjer commented 4 years ago

hi @ghkobbs no problem :).

I understand the difficulties if you are not a java dev.

Thank you for opening the issue, it's something that we will integrate as we believe covering a wide range of payment provider is important.

ghkobbs commented 4 years ago

Thank you @syjer and I look forward to the update. 🙏

ghkobbs commented 4 years ago

Hello @syjer I've managed to integrate this provider but I've run into some weird issue that I can't seem to fix.

So, during the ticket reservation process, I get redirected to the provider's website to complete the payment and then return back to alfio. When I click on the "Confirm Payment" button after returning from the payment provider's website, the progress bar and the "please wait" text appears and stay for roughly 1min 30secs and then the button and payment methods appears again with no error both in the frontend and the logs.

Can you help by pointing me to what files or function is called when the user clicks on the confirm payment button to see if I can come with a solution?

Thank you.

PS. I'm using the standard API integration (refer to first comment in this thread).

syjer commented 4 years ago

hi @ghkobbs , I think the simplest way is to show us the code you are working on.

I would advise to look at the following PR as an example, where we integrated a new payment provider:

ghkobbs commented 4 years ago

Sure! I'll look into the PR and try to replicate that. Thanks

ghkobbs commented 3 years ago

Hello, Thanks to your feedbacks I've been able to successfully integrate the payment gateway. Unfortunately I've ran into another issue that has to do with processing webhook calls.

The lines below is suppose to query the b_transaction table in the database for a record and then lock it for update but the query return empty even though the data exists. Any idea what could be the problem?

    //filename: TransactionRepository.java

    @Query(SELECT_VALID_BY_RESERVATION_ID + " order by t_timestamp desc limit 1 for update")
    Optional<Transaction> lockLatestForUpdate(@Bind("reservationId") String reservationId);

Thanks.

tobsowo commented 1 year ago

Hello @ghkobbs were you able to integrate this? I will appreciate it if you can share.