114 lines
4.3 KiB
PHP
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;
|
|
}
|
|
}
|
|
} |