Witam.
Mam problem przy integracji z paypalem metodą server-side przy użyciu CURL (nie gotowych bibliotek SDK). Nie wiem czemu może nie działać, wrzucam kod źródłowy na dole z 3 plików.
server-checkout.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div id="paypal-button"></div>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
paypal.Button.render(
{
env: "sandbox",
payment: function(resolve, reject) {
var CREATE_PAYMENT_URL = "server-checkout-payment.php";
return paypal.request
.post(CREATE_PAYMENT_URL)
.then(function(data) {
resolve(data.paymentID);
})
.catch(function(err) {
reject(err);
});
},
// Execute the payment
onAuthorize: function(data) {
var EXECUTE_PAYMENT_URL = "server-checkout-execute.php";
return paypal.request
.post(EXECUTE_PAYMENT_URL, {
paymentID: data.paymentID,
payerID: data.payerID
})
.then(function(data) {
document.querySelector("#paypal-button").innerText =
"Payment Complete!";
})
.catch(function(err) {
document.querySelector("#paypal-button").innerText =
"Payment Failed!";
});
}
},
"#paypal-button"
);
</script>
</body>
</html>
server-checkout-payment.php
<?php
$requestData = array(
'intent' => 'sale',
'redirect_urls' => array(
'return_url' => 'server-checkout.html',
'cancel_url' => 'server-checkout.html'
),
'payer' => array(
'payment_method' => 'paypal',
),
'transactions' => array(
array(
'amount' => array(
'total' => '10.00',
'currency' => 'USD',
),
'items_list' => array(
'items' => array(
array(
'quantity' => '1',
'name' => 'item1',
'price' => '10.00',
'currency' => 'USD',
),
),
),
),
),
);
$requestJson = json_encode($requestJson);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.sandbox.paypal.com/v1/payments/payment');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer A21AAGaAT5GsrcjRtvmnUjNwTGOefdc7sY_L7OLllpXPMzyMtFHxZ5O7Nv2BWm5P1tdtO4xJQU8js3izip5H0skQlmlbA4kbA'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson);
$result = curl_exec($ch);
if (!$result) {
$error = curl_error($ch);
curl_close($ch);
throw new \Exception($error);
}
$result = json_decode($result);
$response = array(
'paymentID' => $result->id
);
echo json_encode($response);
server-checkout-execute.php
<?php
$requestData = array(
'payer_id' => $_REQUEST['payerID']
);
$requestJson = json_encode($requestData);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/payments/payment/{$_REQUEST['paymentID']}/execute");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer A21AAGaAT5GsrcjRtvmnUjNwTGOefdc7sY_L7OLllpXPMzyMtFHxZ5O7Nv2BWm5P1tdtO4xJQU8js3izip5H0skQlmlbA4kbA'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson);
$result = curl_exec($ch);
if (!$result) {
$error = curl_error($ch);
curl_close($ch);
throw new \Exception($error);
}
$resultArray = json_decode($result);
if ($resultArray->state != 'approved') {
throw new \Exception("Failed to approve the payment.");
}
echo json_encode(array(
'status' => 'OK',
));
I jeszcze consoli logi z chroma