Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de connexion avec le serveur paypal

paypal API REST SDK

16 septembre 2019 à 15:27:50

Bonjour,

Voila je rencontre un petit problème avec mon code. J'ai suivis le tutoriel PHP pour paypal express checkout( https://youtu.be/n-Vbjd2eI_4 ), J'ai tout bien réussi et le paiement via sandbox marche :D mais en mode live ca ne marche pas. Voici mon code et quelques images esperant que cela puissent mieux vous renseigner:

mon code: 

subscribe.php

<?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

<?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

<?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()));
}

et biensur en live jai deja change mon clientID et mon Secret.

Merci de votre aide !!!!!

  • Partager sur Facebook
  • Partager sur Twitter
Staff 16 septembre 2019 à 17:09:18

Bonjour, Ceci n'est pas une présentation de projet.

Doublon

Les doublons nuisent au bon fonctionnement du forum et sont donc interdits. Si vous vous êtes trompé de section, il suffit de signaler votre sujet au staff pour qu'il le déplace au bon endroit.

Je vous invite à continuer la discussion sur l'autre sujet :  https://openclassrooms.com/forum/sujet/probleme-de-connexion-avec-le-serveur-paypal

Je ferme ce sujet. 

  • Partager sur Facebook
  • Partager sur Twitter