Files
ms1inscription-v5/paypal_advanced_checkout_in_php/PaypalCheckout.class.php
2026-05-13 09:43:32 -04:00

114 lines
4.3 KiB
PHP

<?php
/**
*
* This PayPal Checkout API handler class is a custom PHP library to handle the PayPal REST API calls.
*
* @class PaypalCheckout
* @author CodexWorld
* @link https://www.codexworld.com
* @version 1.0
*/
// Include the configuration file
include_once 'config.php';
class PaypalCheckout
{
//public $paypalAuthAPI = PAYPAL_SANDBOX ? 'https://api-m.sandbox.paypal.com/v1/oauth2/token' : 'https://api-m.paypal.com/v1/oauth2/token';
//public $paypalAPI = PAYPAL_SANDBOX ? 'https://api-m.sandbox.paypal.com/v2/checkout' : 'https://api-m.paypal.com/v2/checkout';
public $paypalAuthAPI = PAYPAL_BASE_URL.'/v1/oauth2/tocken';
public $paypalAPI = PAYPAL_BASE_URL.'/v2/checkout';
public $paypalClientID = PAYPAL_CLIENT_ID;
private $paypalSecret = PAYPAL_CLIENT_SECRET;
public function generateAccessToken()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $this->paypalAuthAPI);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $this->paypalClientID . ":" . $this->paypalSecret);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
$auth_response = json_decode(curl_exec($ch));
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code != 200 && !empty($auth_response->error)) {
throw new Exception('Failed to generate Access Token: ' . $auth_response->error . ' >>> ' . $auth_response->error_description);
}
if (!empty($auth_response)) {
return $auth_response->access_token;
} else {
return false;
}
}
public function createOrder($productInfo, $paymentSource)
{
$accessToken = $this->generateAccessToken();
if (empty($accessToken)) {
return false;
} else {
$postParams = $productInfo;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->paypalAPI . '/orders/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $accessToken));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postParams));
$api_resp = curl_exec($ch);
$api_data = json_decode($api_resp, true);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code != 200 && $http_code != 201) {
throw new Exception('Failed to create Order sl (' . $http_code . '): ' . $api_resp . json_encode($postParams));
}
return !empty($api_data) && ($http_code == 200 || $http_code == 201) ? $api_data : false;
}
}
public function captureOrder($orderId)
{
$accessToken = $this->generateAccessToken();
if (empty($accessToken)) {
return false;
} else {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->paypalAPI . '/orders/' . $orderId . '/capture');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $accessToken));
curl_setopt($ch, CURLOPT_POST, true);
$api_resp = curl_exec($ch);
$api_data = json_decode($api_resp, true);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlsl_code = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
// $result = urldecode ($ch );
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code != 200 && $http_code != 201) {
throw new Exception('Failed to create Order sl4(' . $http_code . '): ' . '1- ' . $api_resp);
}
curl_close($ch);
return !empty($api_data) && ($http_code == 200 || $http_code == 201) ? $api_data : false;
}
}
}