Привет, ребята. Я использую PayPal API Checkout для осуществления платежей с моего сайта.
Это код, который я использую для захвата продуктов на стороне сервера, и он хорошо работает
<?php
require('../ini.php');
require 'vendor/autoload.php';
$ids = [
'id' => getSetting('paypalLiveKey','return',$con),
'secret' => getSetting('paypalSecretKey','return',$con)
];
$apiContext = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
$ids['id'],
$ids['secret']
)
);
$redirectUrls = (new \PayPal\Api\RedirectUrls())
->setReturnUrl('/include/paypalPHP/payProducts.php')
->setCancelUrl('/checkout.php');
$list = new \PayPal\Api\ItemList();
$item = (new \PayPal\Api\Item())
->setName('title')
->setPrice('100')
->setCurrency('USD')
->setQuantity('1');
$list->addItem($item);
$details = (new \PayPal\Api\Details())
->setSubtotal($total )
->setTax('0.00')
->setShipping('0.00')
->setShippingDiscount('0.00');
$amount = (new \PayPal\Api\Amount())
->setTotal('100')
->setCurrency("USD")
->setDetails($details);
$transaction = (new \PayPal\Api\Transaction())
->setItemList($list)
->setDescription('New Payment from ')
->setAmount($amount)
->setCustom('site');
$payer = (new \PayPal\Api\Payer())
->setPaymentMethod('paypal');
$payment = (new \PayPal\Api\Payment())
->setTransactions([$transaction])
->setIntent('sale')
->setRedirectUrls($redirectUrls)
->setPayer($payer);
try {
$payment->Create($apiContext);
// header("location: ".$payment->getApprovalLink());
echo json_encode([
'token' => $payment->getToken(),
]);
} catch (\PayPal\Exception\PayPalConnectionException $e){
header('loaction: '.ERROR_PAGE);
var_dump(json_decode($e->getData()));
}
. второй код, который я использую для совершения платежей
<?php
require('../ini.php');
require 'vendor/autoload.php';
$ids = [
'id' => getSetting('paypalLiveKey','return',$con),
'secret' => getSetting('paypalSecretKey','return',$con)
];
$apiContext = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
$ids['id'],
$ids['secret']
)
);
$payment = \PayPal\Api\Payment::get($_POST['paymentID'],$apiContext);
$execution = (new \PayPal\Api\PaymentExecution())
->setPayerId($_POST['payerID'])
->setTransactions($payment->getTransactions());
try{
$payment->execute($execution,$apiContext);
// payment is done
echo json_encode([
'id' => $payment->getId()
]);
var_dump($payment->getTransactions()[0]->getCustom());
var_dump($payment);
}catch(\PayPal\Exeception\PayPalConnectionException $e){
header('loaction: '.ERROR_PAGE);
var_dump(json_decode($e->getData()));
}
код, который я использую на стороне клиента для получения этих кодов
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return fetch('/include/paypalPHP/prepareProducts.php', {
method: 'post',
headers: {
'content-type': 'application/json'
},
}).then(function(res) {
return res.json();
}).then(function(data) {
return data.token;
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return fetch('/include/paypalPHP/payProducts.php', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
paymentID: data.paymentID,
payerID: data.payerID
})
})
}
}).render('#paypal-button-container');
теперь, если я нажимаю на кнопки PayPal, товар хорошо показал себя, но проблема в том, что когда он нажимает кнопку оплаты в окне PayPal, ничего не платится, я думаю, что проблема с onApprove
функцией
любая помощь, пожалуйста