This plugin is designed to add a new gateway to Payum to support Stripe Checkout Session. It supports one time payment and authorized payment by placing a hold on a card.
Refund is also possible but disabled by default to avoid mistakes, use this config to enable it :
# config/packages/flux_se_sylius_payum_stripe.yaml
flux_se_sylius_payum_stripe:
refund_disabled: false
See https://stripe.com/docs/payments/checkout for more information.
Install using Composer :
composer remove --dev stripe/stripe-php
composer require flux-se/sylius-payum-stripe-plugin
💡 If the flex recipe has not been applied then follow the next step.
Enable this plugin :
<?php
# config/bundles.php
return [
// ...
FluxSE\SyliusPayumStripePlugin\FluxSESyliusPayumStripePlugin::class => ['all' => true],
FluxSE\PayumStripeBundle\FluxSEPayumStripeBundle::class => ['all' => true],
// ...
];
Create the file config/packages/flux_se_sylius_payum_stripe.yaml
and add the following content
imports:
- { resource: "@FluxSESyliusPayumStripePlugin/Resources/config/config.yaml" }
Go to the admin area, log in, then click on the left menu item "CONFIGURATION > Payment methods". Create a new payment method type "Stripe Checkout Session (with SCA support)" :
Then a form will be displayed, fill-in the required fields :
💡 The code will be the
gateway name
, it will be needed to build the right webhook URL later (see Webhook key section for more info).
3. the gateway configuration (need info from here) :
📖 NOTE1: You can add as many webhook secret keys as you need here, however generic usage need only one.
📖 NOTE2: the screenshot contains false test credentials.
Finally, click on the "Create" button to save your new payment method.
Get your publishable_key
and your secret_key
on your Stripe dashboard :
https://dashboard.stripe.com/test/apikeys
Got to :
https://dashboard.stripe.com/test/webhooks
Then create a new endpoint with those events:
Gateway | stripe_checkout_session |
stripe_js |
---|---|---|
Webhook events | - checkout.session.completed - checkout.session.async_payment_failed - checkout.session.async_payment_succeeded - setup_intent.canceled (setup mode)- setup_intent.succeeded (setup mode) |
- payment_intent.canceled - payment_intent.succeeded - setup_intent.canceled (setup mode)- setup_intent.succeeded (setup mode) |
The URL to fill is the route named payum_notify_do_unsafe
with the gateway
param equal to the gateway name
(Payment method code), here is an example :
https://localhost/payment/notify/unsafe/stripe_checkout_session_with_sca
📖 As you can see in this example the URL is dedicated to
localhost
, you will need to provide to Stripe a public host name in order to get the webhooks working.
📖 Use this command to know the exact structure of
payum_notify_do_unsafe
routebin/console debug:router payum_notify_do_unsafe
📖 Use this command to know the exact name of your gateway, or just check the
code
of the payment method in the Sylius admin payment method index.bin/console debug:payum:gateway
Webhooks are triggered by Stripe on their server to your server. If the server is into a private network, Stripe won't be allowed to reach your server.
Stripe provide an alternate way to catch those webhook events, you can use
Stripe cli
: https://stripe.com/docs/stripe-cli
Follow the link and install Stripe cli
, then use those command line to get
your webhook key :
First login to your Stripe account (needed every 90 days) :
stripe login
Then start to listen for the 2 required events, forwarding request to your local server :
stripe listen \
--events checkout.session.completed,checkout.session.async_payment_failed,checkout.session.async_payment_succeeded \
--forward-to https://localhost/payment/notify/unsafe/stripe_checkout_session_with_sca
💡 Replace the --forward-to argument value with the right one you need.
When the command finishes a webhook secret key is displayed, copy it to your Payment method in the Sylius admin.
⚠️ Usingstripe trigger checkout.session.completed
will always result in a500 error
, because the test object will not embed any usable metadata.
See documentation here : https://github.com/FLUX-SE/PayumStripe/blob/master/README.md