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. #21
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    PS : Je déteste Paypal, c'est la pire documentation du monde et la pire interface du monde d'un point de vue développer; je vous souhaite donc bon courage !
    Et encore, la documentation d'aujourd'hui vaut 10 fois celle d'il y a quelques années mais montrer un code avec une fatal error dedans c'est quand même magique
    Je confirme: il y a de ça une vingtaine d'années je me suis retrouvé dans une situation similaire avec une erreur, des notions qui me dépassaient complètement et une documentation qui ne m'aidait guère (déjà que j'étais dans mes petits souliers à installer un système de paiement). Donc je compatis.

    J'ai du m'en sortir au final à coup de recherches sauvages sur "altavista"
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  2. #22
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    J'ai testé ce qu'on peut lire dans la documentation. Là où ce n'est pas clair, c'est que l'API retourne 4 liens différents.
    C'est écrit nul part que ça en retourne 4 et ce qu'on est sensé faire avec

    Mais je pense que l'utilisation du bouton en Javascript est peut-être plus simple et semble mieux documentée.


    Voici le code que j'ai utilisé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <?php
     
    namespace Sample;
     
    use PayPalCheckoutSdk\Core\PayPalHttpClient;
    use PayPalCheckoutSdk\Core\SandboxEnvironment;
    use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
     
    require_once(__DIR__ . '/vendor/autoload.php');
    ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
     
    $clientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    $clientSecret = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
     
    class PayPalClient {
     
        /**
         * Returns PayPal HTTP client instance with environment that has access
         * credentials context. Use this instance to invoke PayPal APIs, provided the
         * credentials have access.
         */
        public static function client() {
            return new PayPalHttpClient(self::environment());
        }
     
        /**
         * Set up and return PayPal PHP SDK environment with PayPal access credentials.
         * This sample uses SandboxEnvironment. In production, use LiveEnvironment.
         */
        public static function environment() {
            $clientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
            $clientSecret = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
            return new SandboxEnvironment($clientId, $clientSecret);
        }
     
    }
     
    class CreateOrder {
    // 2. Set up your server to receive a call from the client
     
        /**
         * This is the sample function to create an order. It uses the
         * JSON body returned by buildRequestBody() to create an order.
         */
        public static function createOrder($debug = false) {
            $request = new OrdersCreateRequest();
            $request->prefer('return=representation');
            $request->body = self::buildRequestBody();
            // 3. Call PayPal to set up a transaction
            $client = PayPalClient::client();
            $response = $client->execute($request);
            if ($debug) {
                print "Status Code: {$response->statusCode}\n";
                print "Status: {$response->result->status}\n";
                print "Order ID: {$response->result->id}\n";
                print "Intent: {$response->result->intent}\n";
                print "Links:\n";
                foreach ($response->result->links as $link) {
                    print "\t{$link->rel}: {$link->href}\tCall Type: {$link->method}\n";
                }
     
                // To print the whole response body, uncomment the following line
                // echo json_encode($response->result, JSON_PRETTY_PRINT);
            }
     
            // 4. Return a successful response to the client.
            return $response;
        }
     
        /**
         * Setting up the JSON request body for creating the order with minimum request body. The intent in the
         * request body should be "AUTHORIZE" for authorize intent flow.
         *
         */
        private static function buildRequestBody() {
            return array(
                'intent' => 'CAPTURE',
                'application_context' =>
                array(
                    'return_url' => 'https://tests.pierre-roels.com/paypal/?action=success',
                    'cancel_url' => 'https://tests.pierre-roels.com/paypal/?action=cancel'
                ),
                'purchase_units' =>
                array(
                    0 =>
                    array(
                        'amount' =>
                        array(
                            'currency_code' => 'EUR',
                            'value' => '220.00'
                        )
                    )
                )
            );
        }
     
    }
     
    /**
     * This is the driver function that invokes the createOrder function to create
     * a sample order.
     */
    $order = CreateOrder::createOrder(false);
    // C'est ici que je capte pas pourquoi on reçoit plein de liens mais utiliser le 2e semble faire l'affaire
    header("Location: " . $order->result->links[1]->href);
    //echo PHP_EOL . '<pre>$vardump: ' . print_r($order, true) . '</pre>' . PHP_EOL;
    exit;
    ?>

  3. #23
    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 collé ce code dans un fichier pay_paypal-create-transaction.php , j'ai mis mes valeurs pour 'return_url', 'cancel_url', $clientId et $clientSecret, et j'appelle ce fichier avec le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <div id="paypal-button-container"></div>
    	
    <script>
    	paypal.Buttons({
    		createOrder: function() {
    			return fetch('pay_paypal-create-transaction.php', {
    				method: 'post',
    				headers: {
    					'content-type': 'application/json'
    				}
    			}).then(function(res) {
    				return res.json();
    			}).then(function(data) {
    				return data.id; // Use the key sent by your server's response, ex. 'id' or 'token'
    			});
    		}
    		
    		,
    		onApprove: function(data, actions) {
    			// This function captures the funds from the transaction.
    			return actions.order.capture().then(function(details) {
    				// This function shows a transaction success message to your buyer.
    				alert('Transaction completed by ' + details.payer.name.given_name);
    			});
    		}
    		
    	}).render('#paypal-button-container');
    </script>
    mais ça fait toujours pareil, une page s'ouvre et se ferme aussitôt...
    https://dom83.xyz/pay.php?pay_with=p...ency=%E2%82%AC

  4. #24
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    Je pense que je comprends pourquoi je comprenais rien au fil de la discussion quand je l'ai lu avant ma première intervention

    A mon avis, vous mélangez 2 façons de créer le paiement. Celle côté serveur (en PHP) et celle côté client (en Javascript).
    Il y a bien une intégration server side à réaliser pour le SDK Javascript mais elle n'est pas tout à fait la même que celle qui se déroule à 100% côté serveur comme c'est décrit dans la documentation
    Si vous utilisez l'option Javascript, il faut commencer à suivre les instructions ici : https://developer.paypal.com/docs/ch...ion/setup-sdk/

    Pourquoi ne pas utiliser la 3e solution, les "Smart buttons" où tout se fait en Javascript ?
    Vous pouvez les configurer ici : https://www.paypal.com/buttons/smart

  5. #25
    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
    Le problème avec la version en javascript c'est que le montant peut être modifié côté client. Je préférerai réussir à faire fonctionner la version php.
    Au début ça montre comment le faire uniquement en javascript (https://developer.paypal.com/docs/checkout/integrate/), puis ensuite comment modifier pour le faire côté serveur (https://developer.paypal.com/docs/ch...ion/setup-sdk/). Et tout en bas de cette page https://developer.paypal.com/docs/ch...p-transaction/ ça dit que je dois modifier la partie en javascript. Ou ai-je fait une erreur ?

  6. #26
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    Non, toute cette documentation (les 3 liens) font uniquement référence à l'intégration Javascript (bien qu'en réalité, les 2 SDK ont un point commun, c'est juste le return qui n'est pas le même suivant qu'on utilise ou non les boutons)


    Mais du coup, si vous repartez du long code PHP que j'ai fait, ça c'est le code qui fait le paiement côté serveur uniquement

    C'est le code que j'ai utilisé ici : https://tests.pierre-roels.com/paypal/

    La seule chose que j'ai changé par rapport à mon code d'avant, plutôt que de créer une commande (et donc une redirection instantanée au chargement de la page) je regarde si j'ai submit mon formulaire.

    C'est donc les lignes 101 à 109 dans mon ancien code qui sont devenues :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
     * This is the driver function that invokes the createOrder function to create
     * a sample order.
     */
    if (!empty($_POST['action']) && $_POST['action'] === 'submit') {
        $order = CreateOrder::createOrder(false);
        header("Location: " . $order->result->links[1]->href);
    //        echo PHP_EOL . '<pre>$vardump: ' . print_r($order, true) . '</pre>' . PHP_EOL;
        exit;
    }

    Et le formulaire HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="post" action="">
        <input type="hidden" name="action" value="submit" />
        <button type="submit" class="btn btn-primary">Payer 220€ via Paypal</button>
    </form>


    Le code complet :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <?php
     
    namespace Sample;
     
    use PayPalCheckoutSdk\Core\PayPalHttpClient;
    use PayPalCheckoutSdk\Core\SandboxEnvironment;
    use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
     
    require_once(__DIR__ . '/vendor/autoload.php');
     
    ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
     
    class PayPalClient {
     
        /**
         * Returns PayPal HTTP client instance with environment that has access
         * credentials context. Use this instance to invoke PayPal APIs, provided the
         * credentials have access.
         */
        public static function client() {
            return new PayPalHttpClient(self::environment());
        }
     
        /**
         * Set up and return PayPal PHP SDK environment with PayPal access credentials.
         * This sample uses SandboxEnvironment. In production, use LiveEnvironment.
         */
        public static function environment() {
            $clientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
            $clientSecret = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
            return new SandboxEnvironment($clientId, $clientSecret);
        }
     
    }
     
    class CreateOrder {
        // 2. Set up your server to receive a call from the client
     
        /**
         * This is the sample function to create an order. It uses the
         * JSON body returned by buildRequestBody() to create an order.
         */
        public static function createOrder($debug = false) {
            $request = new OrdersCreateRequest();
            $request->prefer('return=representation');
            $request->body = self::buildRequestBody();
            // 3. Call PayPal to set up a transaction
            $client = PayPalClient::client();
            $response = $client->execute($request);
            if ($debug) {
                print "Status Code: {$response->statusCode}\n";
                print "Status: {$response->result->status}\n";
                print "Order ID: {$response->result->id}\n";
                print "Intent: {$response->result->intent}\n";
                print "Links:\n";
                foreach ($response->result->links as $link) {
                    print "\t{$link->rel}: {$link->href}\tCall Type: {$link->method}\n";
                }
     
                // To print the whole response body, uncomment the following line
                // echo json_encode($response->result, JSON_PRETTY_PRINT);
            }
     
            // 4. Return a successful response to the client.
            return $response;
        }
     
        /**
         * Setting up the JSON request body for creating the order with minimum request body. The intent in the
         * request body should be "AUTHORIZE" for authorize intent flow.
         *
         */
        private static function buildRequestBody() {
            return array(
                'intent' => 'CAPTURE',
                'application_context' =>
                array(
                    'return_url' => 'https://domain.tld/paypal/?action=success',
                    'cancel_url' => 'https://domain.tld/paypal/?action=cancel'
                ),
                'purchase_units' =>
                array(
                    0 =>
                    array(
                        'amount' =>
                        array(
                            'currency_code' => 'EUR',
                            'value' => '220.00'
                        )
                    )
                )
            );
        }
     
    }
     
    /**
     * This is the driver function that invokes the createOrder function to create
     * a sample order.
     */
    if (!empty($_POST['action']) && $_POST['action'] === 'submit') {
        $order = CreateOrder::createOrder(false);
        header("Location: " . $order->result->links[1]->href);
    //        echo PHP_EOL . '<pre>$vardump: ' . print_r($order, true) . '</pre>' . PHP_EOL;
        exit;
    }
    ?>
    <h1>Paypal test server side only</h1>
    <form method="post" action="">
        <input type="hidden" name="action" value="submit" />
        <button type="submit" class="btn btn-primary">Payer 220€ via Paypal</button>
    </form>

  7. #27
    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 collé le code dans un fichier "pay_with_paypal.php" , sans rien changer cette fois.
    Je l'appelle dans ma page avec include() , mais rien n'apparait du tout... Même le bouton du formulaire ne s'affiche pas...
    https://dom83.xyz/pay.php?pay_with=p...ency=%E2%82%AC

    Pareil si je fais s'executer directement le fichier, sans la page
    https://dom83.xyz/pay_with_paypal.php
    il n'y a rien, même pas d'erreur...

    edit: J'ai identifié la ligne qui fait planter, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(__DIR__ . '/vendor/autoload.php');
    Ca fait référence aux fichiers installés par Composer, n'est-ce pas ?
    Comment je fais du coup ?

  8. #28
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( isset($_GET["lang"]) && $_GET["lang"]=="fr" ){ $lang = "fr" ;}
    else if( isset($_GET["lang"]) && $_GET["lang"]=="es" ){ $lang = "es" ;}
    else{ $lang = "en" ;}
    Je l'écrirai comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $lang = 'en'; // valeur par défaut
     
    if ( isset($_GET['lang']) && in_array($_GET['lang'], ['es', 'fr'], true) )
        $lang = $_GET['lang'];
    ça évite de tester isset($_GET['lang']) plusieurs fois. (cela dit, ça crée le tableau ['es', 'fr'])
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #29
    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
    Oui j'avais écrit cette partie rapidement sans me soucier d'optimiser. Je l'ai remplacé par ça finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $lang = "en" ;
    if( isset($_GET["lang"]) )
    { if(  $_GET["lang"]=="fr" ){ $lang = "fr" ;}
    else if( $_GET["lang"]=="es" ){ $lang = "es" ;} }
    Mais ce n'est qu'un détail, mon vrai problème n'est pas là.

  10. #30
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    Effectivement, la ligne require_once(__DIR__ . '/vendor/autoload.php'); doit refléter l'endroit où vous avez installé le SDK PHP via Composer.
    Tel qu'il est écrit dans mon code, c'est dans le même dossier que le fichier PHP qui l'exécute (vu que Composer va créer un dossier vendor là où est appelé)

    Cette ligne, c'est d'ailleurs le début de ce thread

    Pour rappel, __DIR__ retourne le chemin vers le dossier où il est appelé.
    A partir de là, vous pouvez définir le chemin absolu : __DIR__ . 'path/to/vendor/autoloa.php';.
    Et s'il est dans un dossier parent, il faut écrire autant de fois .. qu'il y a de parents. Par exemple : [/c]__DIR__ . '/../../path/to/vendor/autoload.php'[/c] ici, ça veut dire que le dossier vendor se trouvé dans une arbo 2 fois plus haute (2 fois ../

  11. #31
    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
    Mes fichiers sont à la racine, et je n'ai pas spécifié de dossier à Composer.

    J'ignore toujours si l'installation avait vraiment réussi ou pas. Comment je peux vérifier ? Dans Filezilla je ne vois que mes fichiers à moi, rien d'autre. Je suis sensé y voir les fichiers installés par Composer ou pas ?

  12. #32
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    Les fichiers sont visibles si vous avez accès au dossier où ils sont installés (si vous regardez côté serveur)
    Mais je ne comprends pas comment vous ne pouvez pas être sûr.
    Ce n'est pas un truc qui se fait en catimini. Vous devez lancer une commande particulière et ça affiche plein de trucs dans le terminal... C'est pas de la magie ^^

  13. #33
    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
    Citation Envoyé par darkstar123456 Voir le message
    Les fichiers sont visibles si vous avez accès au dossier où ils sont installés (si vous regardez côté serveur)
    Mais je ne comprends pas comment vous ne pouvez pas être sûr.
    Ce n'est pas un truc qui se fait en catimini. Vous devez lancer une commande particulière et ça affiche plein de trucs dans le terminal... C'est pas de la magie ^^
    Imprim-écrans de l'installation :
    Nom : putty paypal sdk .jpg
Affichages : 118
Taille : 230,3 KoNom : putty paypal sdk2 .jpg
Affichages : 111
Taille : 505,6 Ko

    puis sur conseil du support de mon hébergeur j'ai mis à jour Composer et j'ai recommencé

    mais le script php semble ne pas trouver ces fichiers, puisqu'il plante sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(__DIR__ . '/vendor/autoload.php');
    et dans Filezilla il n'y a rien d'autre que mes fichiers à moi :
    Nom : filezilla.jpg
Affichages : 108
Taille : 113,3 Ko
    et aucun filtre :
    Nom : filezilla2.jpg
Affichages : 105
Taille : 118,8 Ko

    Le support de mon hébergeur n'a pas été capable de m'éclairer à ce sujet...

    Je viens de réessayer :
    Nom : composer update.jpg
Affichages : 108
Taille : 108,3 KoNom : paypal sdk install 4.jpg
Affichages : 106
Taille : 214,8 Ko

  14. #34
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    Merci pour tous ces screenshots !

    Malheureusement, on y voir clairement pas le dossier vendor

    Cependant, c'est peut-être tout à fait normal ! Le fait est qu'on ne voit pas où vous êtes quand vous vous connectez en SSH (c-à-d via le terminal).
    Par défaut, vous arrivez dans le dossier "home" du user avec le quel vous vous connectez mais ce n'est jamais le root public de votre domaine.

    Malheureusement, on ne voit pas toute l'arborescence à partir de votre screenshot de Filezilla mais en gros, quand vous vous connectez en SSH, il ne suffit pas d'y écrire composer require etc..; il faut d'abord vous placer au bon endroit dans le système de fichier. Le mieux, serait de le mettre/déplacer dans /domains/dom83.xyz/.

    Pour lister le contenu d'un dossier, vous pouvez utiliser la commande ls -la.
    Pour entrer dans un dossier, il faut utiliser la commande cd (par exemple, si vous êtes dans le dans dossier /domains, vous pouvez écrire cd dom83.xyz)
    Et pour remonter d'un dossier, il faut écrire cd ...


    EDIT : Est-ce que vous utilisez le même username quand vous vous connectez en FTP qu'en SSH ?

  15. #35
    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
    En effet :
    Nom : composer 5.jpg
Affichages : 101
Taille : 190,2 Ko

    C'est incroyable que le support de mon hébergeur ne m'ait pas simplement expliqué ça...

    Je devrai peut-être le désinstaller de là avant de l'installer dans "public_html". Je ne suis pas sûr de la commande à écrire pour ça.

  16. #36
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    Oui, je suis également étonné que personne n'ait pris le temps de vous expliquer vite fait comment ça se passait au niveau des répertoires

    A priori, quand vous êtes là où on vous voit sur le dernier screenshot, il existe un lien symolique de public_html vers le "bon" dossier
    Donc si sur cet écran vous tapez : cd public_html vous serez alors au même endroit qu'on vous a vu dans la capture de Filezilla.

    D'ailleurs, si vous faites vos tests dans un sous-dossier, il faudra soit l'ajouter directement à la commande cd soit faire plusieurs commandes cd différentes.

    NB : L'autocompletion existe sur Linux, donc il suffit souvent de taper le début du nom, et s'il trouve une commande, un fichier ou un répertoire, il va directement le compléter. si vous faites TAB.
    S'il n'affiche rien, faites un 2e TAB et soit il n'y aura rien, soit il afficher toutes les possibilités

    EDIT : Sinon, d'après les screenshots, voici ce qui devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd /home/u840737519/domains/dom83.xyz/public_html
    composer require paypal/paypal-checkout-sdk 1.0.1
    A condition que le fichier PHP qui fait le checkout (le code que j'ai donné), se trouve bien dans le dossier public_html

  17. #37
    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
    Ca marche !!! Merci
    J'en reviens pas que c'était juste ça et qu'ils n'aient pas été capables de me le dire depuis trois mois...

    Maintenant j'espère que la suite ira aussi, le live au lieu de sandbox.

    Par contre, ça continue de me mettre des avertissements pour Composer 1 alors que j'ai mis à jour.
    Nom : paypal sdk install 5.jpg
Affichages : 99
Taille : 293,2 Ko

  18. #38
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Ho cool, bonne nouvelle !
    Mais ouais, c'est vraiment 3 fois rien mais si on connait pas, c'est difficile de s'en sortir ^^

    A propos de Composer, ll me semble que j'ai eu le soucis aussi.
    En fait, si je me souviens bien, quand on installe Composer 2, il faut utiliser une commande qui permet de switch vers la version 2 (chose qui ne se fait pas automatiquement)

    Quoi qu'il en soit, le SDK de PayPal est super vieux donc ça ne posera pas de problème

    Il est possible de choisir sa version de Composer en utilisant les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composer self-update --1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composer self-update --2

  19. #39
    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
    Ok.

    Par contre, il reste une chose que je ne comprend pas...
    Une fois le paiement effectué, il y a des actions qui doivent être faites automatiquement sans que j'ai besoin d'intervenir, comme ajouter le contenu acheté sur le compte du joueur dans ma base de données pour qu'il puisse y accéder dans le jeu aussitôt.
    Ca, je sais le faire et c'est déjà prêt. Le problème c'est que j'avais prévu de le faire dans la page définie comme "return_url" car je pensais que c'était une url secrète qui ne serait pas dévoilée à l'utilisateur, alors qu'en fait non c'est là où ça le renvoie après l'achat, donc je ne peux pas mettre ça là...
    Du coup, où est-ce que je fais ça ? Il n'y a pas d'url secrète appelée après le paiement ?

  20. #40
    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 : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

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

    C'est ce qu'on appelle un "webhook"
    Il s'agit d'un service qui va écouter/attendre des appels suivant des variables qu'on appelle souvent "événements"
    Un événement pouvant signifier que le paiement à été effectué ou à l'inverse, refusé.
    La documentation à ce sujet est disponible ici : https://developer.paypal.com/docs/ap...ions/webhooks/

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