IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Ajouter le SDK PHP de Paypal


Sujet :

Langage PHP

  1. #41
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2021
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Et bien entendu il fallait obligatoirement que ça soit inutilement compliqué...

    Avant toute chose je dois executer une commande en cURL pour avoir le droit d'utiliser leur API... J'avais pas particulièrement envie d'apprendre à utiliser encore un nouvel outil (dont je ne me resservirai probablement plus jamais ensuite dans ma vie) mais bon. Je dois installer cURL sur mon ordi, ou executer ça sur le serveur, ou quoi ?
    https://developer.paypal.com/docs/pl...s/get-started/

  2. #42
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Non, Curl est probablement déjà installé côté serveur, il suffit ensuite d'utiliser PHP Curl pour faire les appels.
    CURL c'est juste une façon de pouvoir appeler des URLs via serveur, et de pouvoir choisir les méthodes. De cette façon, on peut faire du GET/POST/PUT/DELETE qui sont requis par les APIs.

    De manière générale, une API demandera une méthode GET pour récupérer un listing de données
    POST pour démarrer des processus
    PUT pour sauvegarder des données
    DELETE pour supprimer des données
    etc

    Donc quand une API présente une requête CURL, ça sert surtout à montrer comment faire la/les requêtes.

    Par exemple, si on prend le premier bout de code de la page de la doc, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    curl -v POST https://api-m.sandbox.paypal.com/v1/oauth2/token \
      -H "Accept: application/json" \
      -H "Accept-Language: en_US" \
      -u "CLIENT_ID:SECRET" \
      -d "grant_type=client_credentials"
    1. -v est pour "verbose", c'est pour dire qu'on veut voir le détail de la transaction
    2. POST : pour dire qu'on doit exécuter cette URL en POST
    3. URL du endpoint
    4. -H ce sont les headers
    5. -u c'est pour valider une authentification
    6. -d ce sont les données qui seront envoyées en POST, donc dans cet exemple = $_POST = ['grant_type' => client_credentials]


    Détails de l'utilisation de Curl : man curl

  3. #43
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2021
    Messages : 33
    Points : 21
    Points
    21
    Par défaut

    Pour utiliser php curl je dois installer libcurl. J'ai essayé d'installer libcurl mais j'ai eu une erreur concernant G++. J'ai contacté le support de mon hébergeur, qui m'a répondu qu'il n'était pas possible d'installer G++ avec mon hébergement et m'a proposé de prendre un serveur privé...

  4. #44
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je n'ai pas réalisé lors de votre dernier message, mais vous semblez toujours revenir sur le même point dans la documentation
    Vous êtes perdu dans le désert ^^ (c'est malheureusement trop facile de se perdre dans la doc Paypal, pire doc ever)

    Le webhook est un "listener", il écoute uniquement. Il n'a pas de requête à faire auprès de Paypal donc pas de Curl.

    Vous pouvez tester les événements à partir de cette page (trouvée dans la doc) : https://developer.paypal.com/develop...ooksSimulator/
    (encore la magie de Paypal, au lieu d'afficher la réponse dans le simulateur, vous devez vous-même trouver le moyen de tester vos données. Dans mon cas, j'envoie donc un mail pour confirmer ce que je reçois et ce que je peux en faire)
    (En plus, vous êtes déco toutes les 5 minutes, c'est super !)


    Voici le code que j'ai utilisé pour mes tests :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $payload = @file_get_contents('php://input');
    if (!empty($payload)) {
        ob_start();
        $payload = json_decode($payload);
        echo PHP_EOL . '<pre>$payload: ' . print_r($payload, true) . '</pre>' . PHP_EOL;
        $output = ob_get_clean();
        mail('email@domain.tld', 'test Paypal', $output, "Content-Type: text/html; charset=UTF-8");
    }

  5. #45
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2021
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci encore pour toutes ces explications.

    Il y a cinquante mille events avec des noms pas toujours explicites, les autres api y sont mélangées (payout, billing..), et les descriptions que je trouve ne sont pas claires.
    Lorsque l'utilisateur a fini de payer, je suppose que l'évènement est "Checkout order completed", c'est ça ?
    Si ensuite il annule l'achat ou que sa banque n'autorise finalement pas le paiement, en gros si le paiement est annulé, c'est quoi l'event ?

  6. #46
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Malheureusement, je n'en ai aucune idée.
    Je peux aider d'un niveau PHP mais spécifiquement PayPal je ne sais pas avec certitude

    J'imagine que ça doit être un événement relatif aux Orders vu qu'on utilise la méthode createOrder.
    Mais même ça, j'ai jamais compris la différence entre un Order et un Payment ?? (sachant qu'il y a des événement distincts T_T)

    Pour faire des tests, vous pouvez utiliser le code que je vous ai partager dans mon dernier message et y mettre votre adresse email.
    Ca vous enverra un mail à chaque fois que l'API PayPal appelle le webhook. Là, vous regarder les événements qui passent et qui sont utiles ^^

    PayPal se complique la vie de ouf et je ne l'utilise plus depuis des années.
    J'utilise uniquement Stripe, d'autant qu'ils ont sorti une feature au mois de mai qui rend l'intégration encore plus facile qu'avant ^^

  7. #47
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2021
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    J'ai ajouté un webhook dans l'app dans le dashboard, j'ai coché "Checkout order completed" et quelques autres. Mais quand je simule un achat avec le compte sandbox, mon script ne reçoit rien.

    Par contre avec le webhooksSimulator, il reçoit. Pourtant j'ai bien vérifié, c'est la même l'adresse et je choisis aussi "Checkout order completed".

    Il me manque encore quelque-chose...

  8. #48
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2021
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    J'ai demandé au support. Pour une fois la réponse semble très cohérente.
    I've checked your recent REST API requests and it appears that you've creating the orders with an intent of "capture", to which our API is returning a status of "created", but you haven't then completed the orders by capturing them.

    Below is an example response from one of your most recent orders :

    { "create_time": "2021-09-06T22:17:02Z", "id": "4A911150HN550304S", "intent": "CAPTURE", "links": [ { "href": "https://api.sandbox.paypal.com/v2/checkout/orders/4A911150HN550304S", "method": "GET", "rel": "self" }, { "href": "https://www.sandbox.paypal.com/checkoutnow?token=4A911150HN550304S", "method": "GET", "rel": "approve" }, { "href": "https://api.sandbox.paypal.com/v2/checkout/orders/4A911150HN550304S", "method": "PATCH", "rel": "update" }, { "href": "https://api.sandbox.paypal.com/v2/checkout/orders/4A911150HN550304S/capture", "method": "POST", "rel": "capture" } ], "purchase_units": [ { "amount": { "currency_code": "EUR", "value": "1.50" }, "payee": { "email_address": "*****", "merchant_id": "3GJJSWH6NN9RW" }, "reference_id": "default" } ], "status": "CREATED" }

    Notice the "status" above shows "created". If the order had been captured, this would show "completed".

    For this specific example, you would need to send a POST request to the following URL :

    https://api-m.sandbox.paypal.com/v2/...50304S/capture

    You should then receive a response of "completed", along with a transaction id for the completed capture. You should also now receive a webhook - PAYMENT.SALE.COMPLETED

    The capture process is detailed here : https://developer.paypal.com/docs/ap...orders_capture
    J'ai essayé de lire le guide https://developer.paypal.com/docs/ap...orders_capture , mais rien à faire, pour moi c'est du langage d'extraterrestre... et puis ça utilise encore du curl, alors qu'apparemment il m'est impossible d'en utiliser sur mon hébergement...

  9. #49
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2021
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Aie aie aie, j'étais sûr que c'était bon, mais finalement ça sort une Fatal Error...

    Fatal error: Uncaught Error: Class 'Sample\LiveEnvironment' not found in /home/u840737519/domains/dom83.xyz/public_html/pay/pay_with_paypal.php:50 Stack trace:
    #0 /home/u840737519/domains/dom83.xyz/public_html/pay/pay_with_paypal.php(33): Sample\PayPalClient::environment()
    #1 /home/u840737519/domains/dom83.xyz/public_html/pay/pay_with_paypal.php(71): Sample\PayPalClient::client()
    #2 /home/u840737519/domains/dom83.xyz/public_html/pay/pay_with_paypal.php(129): Sample\CreateOrder::createOrder(false)
    #3 /home/u840737519/domains/dom83.xyz/public_html/pay.php(107): include('/home/u84073751...')
    #4 {main} thrown in /home/u840737519/domains/dom83.xyz/public_html/pay/pay_with_paypal.php on line 50
    https://dom83.xyz/pay.php?pay_with=p...ency=%E2%82%AC

    edit : En fait j'ai trouvé, j'ai ajouté
    use PayPalCheckoutSdk\Core\ProductionEnvironment;
    et corrigé
    LiveEnvironment()
    en
    ProductionEnvironment()
    Par contre je ne comprend toujours pas pour les webhooks.
    En attendant, à la place voici ce que je fais : j'ajoute l'achat dans ma base de donnée avec le statut "pas encore payé" et une clé aléatoire que j'ajoute aux paramètres de l'url de retour. Ensuite, une fois sur la page après le paiement, si la clé correspond alors l'achat est confirmé. Sans cette clé, certains pourraient tricher en appelant les deux adresses et obtenir tout sans réellement payer entre les deux. Est-ce que c'est une mauvaise idée ? Le seul problème que je vois c'est si mon site tombe en panne entre le moment où il envoie vers paypal et le moment où le paiement a été fait. Pour les achats annulés, tant pis, je traiterai manuellement.

Discussions similaires

  1. Paypal Express Checkout API REST avec SDK PHP
    Par Soundboy39 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 09/07/2018, 09h07
  2. Éditeur texte/html pour ajout de news PHP
    Par UrbanCORE dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 10
    Dernier message: 27/08/2012, 21h13
  3. [MediaWiki] Ajouter du code php dans tous les articles
    Par *WaNa* dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 04/02/2008, 23h49
  4. Réponses: 1
    Dernier message: 14/11/2007, 15h18
  5. [LDAP] comment ajouter un module PHP
    Par sezar dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/03/2006, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo