Bonjour,
Voila je rencontre un petit problème avec mon code. J'ai suivis le tutoriel PHP pour paypal express checkout(
), J'ai tout bien réussi et le paiement via sandbox marche mais en mode live ça ne marche pas. Voici mon code et quelques images espérant que cela puissent mieux vous renseigner:

Nom : Capture_LI.jpg
Affichages : 151
Taille : 619,2 Ko Nom : Capture2.PNG
Affichages : 153
Taille : 29,8 Ko Nom : Capture3.PNG
Affichages : 161
Taille : 34,1 Ko Nom : Capture4.PNG
Affichages : 164
Taille : 28,5 Ko

subscribe.php

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
29
        <?php
                  require 'inc/secret_header.php';
                  require 'inc/function.php';
                  require_once 'inc/db.php';
                  require 'inc/Offer.php';
 
                  logged_only();
 
                  if (isset($_POST['offer'])){
 
                      $_SESSION['offer_key'] = $_POST['offer'];
                      header('location: payment.php');
                  }
 
        ?>
 
        <h3>S'abonner</h3>
 
        <form action="" method="post" class="user">
 
         <ul>
 
        <?php foreach (Offer::getoffers() as $k => $offer): ?>
        <li><input type="radio" name="offer" value="<?= $k; ?>"><?= $offer['name']; ?>= <?= $offer['price_text']; ?></li>
        <?php endforeach; ?>
 
        </ul>
 
   		<button class="btn btn-success" type="submit">S'Abonner</button>
payment.php
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
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
        <?php
 
        require_once 'inc/db.php';
        require 'inc/function.php';
        require 'inc/Offer.php';
        require 'vendor/autoload.php';
        logged_only();
 
        $ids = require 'paypal.php';
 
        //on cree un ApiContext ki contient nos identifiants
        $apiContext = new \PayPal\Rest\ApiContext(
 
            new \PayPal\Auth\OAuthTokenCredential(
 
                $ids['id'],
                $ids['secret']
            )
        );
 
        //on recupere le pannier selectionne par l'utilisateur
        $key_offer = $_SESSION['offer_key'];
        $offer = Offer::getoffers()[$key_offer];
 
 
        //on cree une liste d'item
 
        $list = new \PayPal\Api\ItemList();
 
        if (isset($offer)) {
 
            $item = (new \PayPal\Api\Item())
             ->setName($offer['name'])
             ->setPrice($offer['price'])
             ->setCurrency('EUR')
             ->setQuantity(1);
            $list->addItem($item);
 
            //on cree une partie amount ki contient le paiement et les details sur le paiement
 
            $details = (new \PayPal\Api\Details())
             ->setSubtotal($offer['price'])
             ->setTax($offer['tax']);
 
            $amount = (new \PayPal\Api\Amount())
             ->setTotal($offer['total_price'])
             ->setCurrency('EUR')
             ->setDetails($details);
 
            //A la fin on envoie la transaction au paiement
 
            $transaction = (new \PayPal\Api\Transaction())
             ->setItemList($list)
             ->setDescription($offer['description'])
             ->setAmount($amount)
             ->setCustom('id_utilisateur');
 
            $payment = new \PayPal\Api\Payment();
            $payment->setTransactions([$transaction]);
            $payment->setIntent('sale');
            $redirectUrls = (new \PayPal\Api\RedirectUrls())
            //A modifier
            ->setReturnUrl('https://localhost/pay.php')
             ->setCancelUrl('https://localhost/subscribe.php');
            //End modif
            $payment->setRedirectUrls($redirectUrls);
            $payment->setPayer((new \PayPal\Api\Payer())->setPaymentMethod('paypal'));
 
             try {
                $payment->create($apiContext);
 
                //on sauvegarde le tout dans une variable globale
                $_SESSION['payment'] = $payment;
                header('location: ' . $payment->getApprovalLink());
            } catch (\Paypal\Exception\PayPalConnectionException $e) {
                json_decode($e->getData());
            }
        }
pay.php

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
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
        <?php
 
        require_once 'inc/db.php';
        require 'inc/function.php';
        require 'inc/Offer.php';
        require 'vendor/autoload.php';
 
        logged_only();
 
        $ids = require 'paypal.php';
 
        //on cree un ApiContext ki contient nos identifiants
        $apiContext = new \PayPal\Rest\ApiContext(
 
            new \PayPal\Auth\OAuthTokenCredential(
 
                $ids['id'],
                $ids['secret']
            )
        );
 
        //on recupere la liste des offres choisie par l'utilisateur
        $key_offer = $_SESSION['offer_key'];
        $offer = Offer::getoffers()[$key_offer];
 
        //var_dump($offer);
 
        //on recupere le paiement
        $pay = $payemet = \PayPal\Api\Payment::get($_GET['paymentId'], $apiContext);
 
        //on recupere les infos sur l'acheteur
        $payer_infos = $payemet->getPayer()->getPayerInfo();
 
        //on recupere les dates de debut et de fin d'inscription au forfait de l'acheteur et quelques donnees sur la transaction
        $period_start = (new DateTime($_SESSION['payment']->create_time))->getTimestamp();
        $_SESSION['subscription_start'] = $subscription_start = gmdate("Y-m-d H:i:s", $period_start);
 
        $period = $offer['period'] === 'Month' ? new DateInterval($offer['interval']) : new DateInterval('P1Y');
        $period_end = (new DateTime())->add($period)->getTimestamp();
        $_SESSION['subscription_end'] = $subscription_end = gmdate("Y-m-d H:i:s", $period_end);
 
        $payer_id = $payer_infos->payer_id;
        $payer_email = $payer_infos->email;
        $payer_first_name = $payer_infos->first_name;
        $payer_last_name = $payer_infos->last_name;
        $payer_country_code = $payer_infos->country_code;
        $price_text = $offer['price_text'];
 
        $username = $_SESSION['auth']->username;
 
        $pdo->prepare("UPDATE users SET subscription_start = ?, subscription_end = ?, payer_id = ?, payer_email = ?, payer_first_name = ?, payer_last_name = ?, payer_country_code = ?, price_text = ? where username = ?")->execute([$_SESSION['subscription_start'], $_SESSION['subscription_end'], $payer_id, $payer_email, $payer_first_name, $payer_last_name, $payer_country_code, $price_text, $username]);
 
        $execution = (new \PayPal\Api\PaymentExecution())
         ->setPayerId($_GET['PayerID'])
         ->setTransactions($payemet->getTransactions());
 
        try {
            $pay->execute($execution, $apiContext);
            $_SESSION['flash']['success']="Votre paiement s'est deroulé avec succès et prendra effet lors de votre prochaine reconnection 😊";
            header('location: logoutpaypal.php');
        } catch (\Paypal\Exception\PayPalConnectionException $e) {
            header('HTTP 500 Internal Server Error', true, 500);
            var_dump(json_decode($e->getData()));
        }
Ce que je veux

je voudrais simplement que mon app marche en mode live comme il fonctionne bien sur le mode Sandbox

Ce que j'obtiens

j'ai bien la redirection vers: https://thelockedfile.com/payment.php mais la page est blanche de chez blanche

Merci de votre aide