AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Contains helper class to work with PayPal REST API.
*
* @package core_payment
* @copyright 2020 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace paygw_paypal;
use curl;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/filelib.php');
class paypal_helper {
/**
* @var string The payment was authorized or the authorized payment was captured for the order.
*/
public const CAPTURE_STATUS_COMPLETED = 'COMPLETED';
/**
* @var string The merchant intends to capture payment immediately after the customer makes a payment.
*/
public const ORDER_INTENT_CAPTURE = 'CAPTURE';
/**
* @var string The customer approved the payment.
*/
public const ORDER_STATUS_APPROVED = 'APPROVED';
/**
* @var string The base API URL
*/
private $baseurl;
/**
* @var string Client ID
*/
private $clientid;
/**
* @var string PayPal App secret
*/
private $secret;
/**
* @var string The oath bearer token
*/
private $token;
/**
* helper constructor.
*
* @param string $clientid The client id.
* @param string $secret PayPal secret.
* @param bool $sandbox Whether we are working with the sandbox environment or not.
*/
public function __construct(string $clientid, string $secret, bool $sandbox) {
$this->clientid = $clientid;
$this->secret = $secret;
$this->baseurl = $sandbox ? 'https://api.sandbox.paypal.com' : 'https://api.paypal.com';
$this->token = $this->get_token();
}
/**
* Captures an authorized payment, by ID.
*
* @param string $authorizationid The PayPal-generated ID for the authorized payment to capture.
* @param float $amount The amount to capture.
* @param string $currency The currency code for the amount.
* @param bool $final Indicates whether this is the final captures against the authorized payment.
* @return array|null Formatted API response.
*/
public function capture_authorization(string $authorizationid, float $amount, string $currency, bool $final = true): ?array {
$location = "{$this->baseurl}/v2/payments/authorizations/{$authorizationid}/capture";
$options = [
'CURLOPT_RETURNTRANSFER' => true,
'CURLOPT_TIMEOUT' => 30,
'CURLOPT_HTTP_VERSION' => CURL_HTTP_VERSION_1_1,
'CURLOPT_SSLVERSION' => CURL_SSLVERSION_TLSv1_2,
'CURLOPT_HTTPHEADER' => [
'Content-Type: application/json',
"Authorization: Bearer {$this->token}",
],
];
$command = [
'amount' => [
'value' => (string) $amount,
'currency_code' => $currency,
],
'final_capture' => $final,
];
$command = json_encode($command);
$curl = new curl();
$result = $curl->post($location, $command, $options);
return json_decode($result, true);
}
/**
* Captures order details from PayPal.
*
* @param string $orderid The order we want to capture.
* @return array|null Formatted API response.
*/
public function capture_order(string $orderid): ?array {
$location = "{$this->baseurl}/v2/checkout/orders/{$orderid}/capture";
$options = [
'CURLOPT_RETURNTRANSFER' => true,
'CURLOPT_TIMEOUT' => 30,
'CURLOPT_HTTP_VERSION' => CURL_HTTP_VERSION_1_1,
'CURLOPT_SSLVERSION' => CURL_SSLVERSION_TLSv1_2,
'CURLOPT_HTTPHEADER' => [
'Content-Type: application/json',
"Authorization: Bearer {$this->token}",
],
];
$command = '{}';
$curl = new curl();
$result = $curl->post($location, $command, $options);
return json_decode($result, true);
}
public function get_order_details(string $orderid): ?array {
$location = "{$this->baseurl}/v2/checkout/orders/{$orderid}";
$options = [
'CURLOPT_RETURNTRANSFER' => true,
'CURLOPT_TIMEOUT' => 30,
'CURLOPT_HTTP_VERSION' => CURL_HTTP_VERSION_1_1,
'CURLOPT_SSLVERSION' => CURL_SSLVERSION_TLSv1_2,
'CURLOPT_HTTPHEADER' => [
'Content-Type: application/json',
"Authorization: Bearer {$this->token}",
],
];
$curl = new curl();
$result = $curl->get($location, [], $options);
return json_decode($result, true);
}
/**
* Request for PayPal REST oath bearer token.
*
* @return string
*/
private function get_token(): string {
$location = "{$this->baseurl}/v1/oauth2/token";
$options = [
'CURLOPT_RETURNTRANSFER' => true,
'CURLOPT_TIMEOUT' => 30,
'CURLOPT_HTTP_VERSION' => CURL_HTTP_VERSION_1_1,
'CURLOPT_SSLVERSION' => CURL_SSLVERSION_TLSv1_2,
'CURLOPT_USERPWD' => "{$this->clientid}:{$this->secret}",
];
$command = 'grant_type=client_credentials';
$curl = new curl();
$result = $curl->post($location, $command, $options);
$result = json_decode($result, true);
return $result['access_token'];
}
}