Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passer des variables à Stripe Checkout

Sujet résolu
    3 mars 2021 à 16:32:49

    Bonjour,

    Y'a-t-il des utilisateurs de Stripe parmi vous ?
    J'essaie de l'intégrer sur un petit site avec un système de panier mais je rencontre quelques difficultés.

    J'ai testé le code fourni dans la documentation de l'API qui fonctionne très bien :

    require 'stripe-php/init.php';
    \Stripe\Stripe::setApiKey('sk_test_blablabla');
    
    header('Content-Type: application/json');
    
    $checkout_session = \Stripe\Checkout\Session::create([
      'payment_method_types' => ['card'],
      'line_items' => [[
        'price_data' => [
          'currency' => 'eur',
          'unit_amount' => 2000,
          'product_data' => [
            'name' => 'Nom du produit',
            'images' => ["https://site.fr/image.jpg"],
          ],
        ],
        'quantity' => 1,
      ]],
      'mode' => 'payment',
      'success_url' => 'success.html',
      'cancel_url' => 'cancel.html',
    ]);
    
    echo json_encode(['id' => $checkout_session->id]);

    Seulement, au lieu que les prix, noms de produits et quantités soient codés en dur dans ce fichier create-checkout-session.php, j'aimerais pouvoir les passer depuis ma page checkout.php qui contient le script suivant :

    var stripe = Stripe("pk_test_blablabla");
    var checkoutButton = document.getElementById("checkout-button");
    
    var order = {
    	amount: document.getElementById("product-amount").innerHTML,
    	name: document.getElementById("product-name").innerHTML,
    	quantity: document.getElementById("product-quantity").innerHTML,
    	email: document.getElementById("email").value
    };
    
    checkoutButton.addEventListener("click", function () {
      fetch("https://site.fr/create-checkout-session.php", {
    	method: "POST",
    	headers: {
    		"Content-Type": "application/json"
    	},
    	body: JSON.stringify(order)
      })
    	.then(function (response) {
    	  return response.json();
    	})
    	.then(function (session) {
    	  return stripe.redirectToCheckout({ sessionId: session.id });
    	})
    	.then(function (result) {
    	  if (result.error) {
    		alert(result.error.message);
    	  }
    	})
    	.catch(function (error) {
    	  console.error("Error:", error);
    	});
    });

    Problème : je ne parviens pas à récupérer ma variable order dans le fichier create-checkout-session.php.

    Lorsque j'essaie de faire $_POST['product-amount'], ça ne marche pas.

    Lorsque j'essaie de faire:

    $json_str = file_get_contents('php://input');
    $data = json_decode($json_str);

    puis de lire $data['product-amount'], ça ne marche pas non plus.

    J'ai systématiquement droit à cette erreur : JSON.parse: unexpected character at line 1 column 1 of the JSON data.

    Je ne comprends donc pas trop comment faire et je n'ai pas trouvé dans la doc comment m'y prendre. Est-ce qu'il y a quelque chose que je fais mal ? Est-ce que le Stripe Checkout n'est pas adapté à cette utilisation ?

    Merci d'avance pour vos réponses :)

    -
    Edité par Alhambroid 3 mars 2021 à 16:35:23

    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2021 à 17:33:24

      Salut,

      Que te donne le var_dump de $data ? , Tu n'as nulle part product-amount dans les données envoyées mais amount, name, quantity et email donc quand tu fais $data['product-amount'] , tu as une erreur PHP d'où l'erreur sur ton JSON côté client

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        3 mars 2021 à 17:56:07

        En effet, pardon, c'est une erreur de recopie dans le message, il s'agit bien de $data['amount'].

        J'avais également essayé le var_dump mais dès que je fais un var_dump de $data, j'ai JSON.parse: unexpected character at line 1 column 1 of the JSON data qui apparaît dans la console et je reste bloqué sur ma page checkout.php.
        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2021 à 19:22:26

          Il faut tester ton URL avec CURL ou POSTMAN, sinon dans l'onglet Réseau, tu cliques sur l'URL /create-checkout-session.php  et onglet Réponse ou Response avec Chrome pour voir le retour
          • Partager sur Facebook
          • Partager sur Twitter
          le bienfait n'est jamais perdu
            3 mars 2021 à 19:39:33

            Ah bah oui... Tout connement, j'ai pas multiplié le prix par 100 et du coup, comme ça donne un montant inférieur à 50 centimes, il m'envoie paître.

            Génial, j'ai passé la journée à me prendre la tête pour rien haha. Merci beaucoup pour ton aide :)

            • Partager sur Facebook
            • Partager sur Twitter

            Passer des variables à Stripe Checkout

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown