web-dev-qa-db-fra.com

Est-il possible de transmettre des données personnalisées à la vérification par bandes?

Je suis la documentation de Stripe Checkout avec intégration de serveur: https://stripe.com/docs/payments/checkout/server

Le code dans les exemples fonctionne bien, mais le problème que je rencontre est de ne pas pouvoir suivre l'utilisateur ou sa commande lorsqu'un achat est terminé.

J'ai une configuration de webhook qui Stripe pings lorsqu'un paiement est terminé. Mais la session de réponse de Stripe ne contient aucune information sur le produit commandé, sauf son nom, sa description et son image. Je pourrais utiliser le nom du produit pour interroger la base de données, mais je préfère de loin une ID, ou une limace, en quelque sorte.

$app->post("/stripe-pingback", function(Request $request, Response $response, array $args) {
    \Stripe\Stripe::setApiKey("xxxxx");

    // You can find your endpoint's secret in your webhook settings
    $endpoint_secret = 'xxxxx';

    $payload = $request->getBody();
    $sig_header = isset($_SERVER['HTTP_STRIPE_SIGNATURE']) ? $_SERVER['HTTP_STRIPE_SIGNATURE'] : null;
    $event = null;

    try {
        $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret);
    } catch(\UnexpectedValueException $e) {
        // Invalid payload
        http_response_code(400); // PHP 5.4 or greater
        exit();
    } catch(\Stripe\Error\SignatureVerification $e) {
        // Invalid signature
        http_response_code(400); // PHP 5.4 or greater
        exit();
    }

    // Handle the checkout.session.completed event
    if ($event->type == 'checkout.session.completed') {
        $session = $event->data->object;
        var_dump($session);

        // Possible to get custom data from session?
        $customer = $session->customer;
        $customerEmail = $session->customer_email;

        // Fulfill the purchase...
        $this->db->insertAudioPurchase();
    }

    http_response_code(200); // PHP 5.4 or greater
});

Est-il possible de transmettre un ID avec la demande de paiement que Stripe peut envoyer une requête ping pour me permettre de rechercher la commande et de générer un lien de téléchargement?

11
BugHunterUK

Vous pouvez passer un tableau avec la clé metadata. Stripe renverra ce champ comme vous l'avez envoyé une fois le paiement effectué.

Il vous suffit de passer sous ce format.

"metadata": {}

Cependant, je l'ai utilisé pour créer des utilisateurs et enregistrer des cartes. Cependant, je ne l'ai pas utilisé au moment du paiement, mais il semble que vous pouvez à peu près le passer avec chaque API.

De Stripe Doc ,

Les objets Stripe pouvant être mis à jour (compte, frais, client, PaymentIntent, remboursement, abonnement et transfert) ont un paramètre de métadonnées. Vous pouvez utiliser ce paramètre pour attacher des données de valeur-clé à ces objets Stripe.

Les métadonnées sont utiles pour stocker des informations structurées supplémentaires sur un objet. Par exemple, vous pouvez stocker le nom complet de votre utilisateur et l'identifiant unique correspondant de votre système sur un objet client Stripe. Les métadonnées ne sont pas utilisées par Stripe - par exemple, elles ne sont pas utilisées pour autoriser ou refuser des frais - et ne seront pas vues par vos utilisateurs à moins que vous ne choisissiez de les leur montrer.

0
A J 9