Bonjour à tous, imaginons que j'ai une option de paiement par Stripe, que dois je changer pour que ça se transforme en abonnement récurrent ? ( Comme sur Grafikart par exemple )

pagepourlancerlepaiement.php :

var stripe = Stripe("CléSTRIPE");
    var checkoutButton = document.getElementById("checkout-button");

    checkoutButton.addEventListener("click", function () {

      fetch("pageverspaiement.php", {
        method: "POST",
      })
        .then(function (response) {
          return response.json();
        })
        .then(function (session) {
          return stripe.redirectToCheckout({ sessionId: session.id });
        })
        .then(function (result) {
          // If redirectToCheckout fails due to a browser or network
          // error, you should display the localized error message to your
          // customer using error.message.
          if (result.error) {
            alert(result.error.message);
          }
        })
        .catch(function (error) {
          console.error("Error:", error);
        });
    });

pageverspaiement.php :

<?php 
session_start();
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('cléStripe');

header('Content-Type: application/json');

$YOUR_DOMAIN = 'https://site.com';

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
    'price_data' => [
      'currency' => 'eur',
      'unit_amount' => 200,
      'product_data' => [
        'name' => 'Nom du package',
        'images' => image,
      ],
    ],
    'quantity' => 1,
  ]],
  'mode' => 'payment',
  'success_url' => $YOUR_DOMAIN . '/sucess.php',
  'cancel_url' => $YOUR_DOMAIN . '/error.php',
]);

echo json_encode(['id' => $checkout_session->id]);
?>

10 réponses


Salut, moi j'aurais fais un truc du genre la

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
                'price_data' => [
                    'currency' => 'eur',
                    'product_data' => [
                        'name' => 'Premium'
                    ],
                    'unit_amount' => '200',
                    'recurring' => [
                        'interval' => 'month',
                        'interval_count' => 1
                    ]
                ],
                'quantity' => 1
            ]],
            'mode' => 'subscription',
   ]);

Du coup, j'imagine que je dois aussi changer quelque chose dans la partie Javascript, car ton code ne fonctionne pas :/

Bonjour,

Tu as des erreurs côté serveur ? Côté javascript ?

Oui, je viens de regarder, j'ai une erreur 500 menant vers pageverspaiement.php `

Failed to load resource: the server responded with a status of 500 ()

Le probleme est donc côté php... Mais il faudrait le détail de cette erreur 500.

Ca dit :

SyntaxError: The string did not match the expected pattern

Et ça mène vers la partie javascript qui affiche l'erreur ( console.log(error) ) etc

Quel string ?

Regarde ou le probleme se situe, et en fonction check la doc de stripe (si le probleme vient bien de là) pour voir ce qui est attendu.

Y a rien de plus indiqué :/

Il n'y a pas un numero de ligne ?

Renvoi le code php.

Y a le numéro de ligne, mais ça renvoi vers :

.then(function (response) {
          return response.json();
        })

et

.catch(function (error) {
          console.error("Error:", error);
        });

c´est quand meme compliqué ><

up

c´est normal que ca arrive ici. l´erreur se trouve dans le php, renvoi le code code php

Actuellement :

<?php 
session_start();
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('cléStripe');

header('Content-Type: application/json');

$YOUR_DOMAIN = 'https://site.com';

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
    'price_data' => [
      'currency' => 'eur',
      'unit_amount' => 200,
      'product_data' => [
        'name' => 'Nom du package',
        'images' => image,
      ],
    ],
    'quantity' => 1,
  ]],
  'mode' => 'payment',
  'success_url' => $YOUR_DOMAIN . '/sucess.php',
  'cancel_url' => $YOUR_DOMAIN . '/error.php',
]);

echo json_encode(['id' => $checkout_session->id]);
?>

Avec ton code :

<?php 
session_start();
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('cléStripe');

header('Content-Type: application/json');

$YOUR_DOMAIN = 'https://site.com';

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
                'price_data' => [
                    'currency' => 'eur',
                    'product_data' => [
                        'name' => 'Premium'
                    ],
                    'unit_amount' => '200',
                    'recurring' => [
                        'interval' => 'month',
                        'interval_count' => 1
                    ]
                ],
                'quantity' => 1
            ]],
            'mode' => 'subscription',
   ]);
  'success_url' => $YOUR_DOMAIN . '/sucess.php',
  'cancel_url' => $YOUR_DOMAIN . '/error.php',
]);

echo json_encode(['id' => $checkout_session->id]);
?>
$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
                'price_data' => [
                    'currency' => 'eur',
                    'product_data' => [
                        'name' => 'Premium'
                    ],
                    'unit_amount' => '200',
                    'recurring' => [
                        'interval' => 'month',
                        'interval_count' => 1
                    ]
                ],
                'quantity' => 1
            ]],
            'mode' => 'subscription',
   ]); <==== tu a une erreur ici
  'success_url' => $YOUR_DOMAIN . '/sucess.php',
  'cancel_url' => $YOUR_DOMAIN . '/error.php',
]);

J'imagine une virgule au lieu du point virgule ?

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
                'price_data' => [
                    'currency' => 'eur',
                    'product_data' => [
                        'name' => 'Premium'
                    ],
                    'unit_amount' => '200',
                    'recurring' => [
                        'interval' => 'month',
                        'interval_count' => 1
                    ]
                ],
                'quantity' => 1
            ]],
            'mode' => 'subscription',
   ]),
  'success_url' => $YOUR_DOMAIN . '/sucess.php',
  'cancel_url' => $YOUR_DOMAIN . '/error.php',
])`

Non, je viens d'essayer
Qu'est ce que tu veux dire ?

Non tu dois retiré sa

]),

car la tu referme la fonction et tu lui remet du code en dessous sa devrait plutôt etre comme sa

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card', 'bancontact'],

  'line_items' => [[
                'price_data' => [
                    'currency' => 'eur',
                    'product_data' => [
                        'name' => 'Premium'
                    ],
                    'unit_amount' => '200',
                    'recurring' => [
                        'interval' => 'month',
                        'interval_count' => 1
                    ]
                ],
                'quantity' => 1
            ]],
            'mode' => 'subscription',
            'success_url' => $YOUR_DOMAIN . '/sucess.php',
            'cancel_url' => $YOUR_DOMAIN . '/error.php',
])

Merci à toi de te démener, je viens d'essayer, ça ne fonctionne toujours pas :/

J'ai trouvé la documentation, mais je suis noob. Genre je ne sais pas si ça correspond à ce que j'utilise ni rien?

https://stripe.com/docs/billing/subscriptions/fixed-price#collect-payment

Aussi celle la :

https://stripe.com/docs/billing/subscriptions/checkout#add-redirect

up