Bonjour,
J'ai un problème avec paypal depuis les mises à jours vers TLS 1.2 et HTTP 1.1. J'ai bien fais une requête de test vers https://tlstest.paypal.com et je reçois bien le message "Paypal_Connection_OK" donc j'en déduis que mon serveur est opérationnel. Je précise qu'avant cette mise à jour mon code fonctionnait très bien.
Voila le code en question que j'ai retiré de mon projet afin de le rendre plus clair
paypal_form.php
<!DOCTYPE html>
<html lang="fr" dir="ltr">
<head>
<meta charset="utf-8">
<title>Paypal</title>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
</head>
<body>
<div id="paypal-button-container"></div>
<script>
paypal.Button.render({
env: 'sandbox',
commit: true,
locale: 'fr_FR',
style: { size: 'medium', color: 'gold', shape: 'rect', label: 'paypal' },
payment: function(){
return paypal.request.get('http://MON_SITE.DOMAINE/paypal_create.php')
.then(function(res) {
console.log(res);
return res.id;
});
},
onAuthorize: function(data, actions) {
console.log(data);
return paypal.request.post('http://MON_SITE.DOMAINE/paypal_execute.php', { paymentID: data.paymentID, payerID: data.payerID})
.then(function(res){
console.log(res);
})
.catch(function(error){ console.log("error", error); });
}
}, '#paypal-button-container');
</script>
</body>
</html>
paypal_create.php
<?php
require __DIR__ .'/vendor/autoload.php';
$id = 'MON_ID_PAYPAL';
$secret = 'MON_SECRET_PAYPAL';
$token = 10.0;
$context = new PayPal\Rest\ApiContext(
new PayPal\Auth\OAuthTokenCredential(
$id,
$secret
)
);
$payment = new \PayPal\Api\Payment();
$redirectUrls = (new \PayPal\Api\RedirectUrls())
->setReturnUrl('http://MON_SITE.DOMAINE/return.php')
->setCancelUrl('http://MON_SITE.DOMAINE/cancel.php');
$payment->setRedirectUrls($redirectUrls);
$payer = (new \PayPal\Api\Payer())->setPaymentMethod('PayPal');
$payment->setPayer($payer);
$list = new \PayPal\Api\ItemList();
$item = new \PayPal\Api\Item();
$item->setName(sprintf('Achat de %g Token sur MON SITE',$token));
$item->setPrice($token);
$item->setCurrency('EUR');
$item->setQuantity(1);
$list->addItem($item);
$details = (new \PayPal\Api\Details())->setSubtotal($token);
$amount = (new \PayPal\Api\Amount())
->setTotal($token)
->setCurrency('EUR')
->setDetails($details);
$transaction = (new \PayPal\Api\Transaction())
->setItemList($list)
->setDescription(sprintf('Achat de %g Token sur MON SITE',$token))
->setAmount($amount);
$payment->setTransactions([$transaction]);
$payment->setIntent('sale');
$payment->create($context);
echo json_encode(array('id' => $payment->getId()));
?>
paypal_execute.php
<?php
require __DIR__ .'/vendor/autoload.php';
$id = 'MON_ID_PAYPAL';
$secret = 'MON_SECRET';
$context = new PayPal\Rest\ApiContext(
new PayPal\Auth\OAuthTokenCredential(
$id, // PayPal API Account ID
$secret // PayPal API Account Secret
)
);
$payment = \PayPal\Api\Payment::get($_POST['paymentID'], $context);
$execution = (new \PayPal\Api\PaymentExecution())
->setPayerId($_POST['payerID'])
->setTransactions($payment->getTransactions());
$payment->execute($execution, $this->context);
if($payment->getState() == 'approved'){
echo json_encode(array('status' => 'success'));
}
else{
echo json_encode(array('status' => 'error', 'message' => "error"));
}
?>
Lorsque je vais sur paypal_form.php j'ai bien le bouton Paypal qui apparaît, je clique, une fenêtre s'ouvre et la j'ai le droit à un chargement infini ... Si je lance la console sur la fenêtre de Paypal j'ai cette erreur :
Error: Parent component window is on a different domain - expected https://www.sandbox.paypal.com - can not retrieve props
Merci d'avance pour vos réponses, en éspérant trouver une solution.