Files
redline.com.pl/modules/paypal/classes/API/Request/V_1/PaypalOrderCaptureRequest.php
2024-11-11 18:46:54 +01:00

171 lines
5.0 KiB
PHP

<?php
/**
* 2007-2020 PayPal
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author 2007-2020 PayPal
* @author 202 ecommerce <tech@202-ecommerce.com>
* @copyright PayPal
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
namespace PaypalAddons\classes\API\Request\V_1;
use Context;
use Customer;
use Exception;
use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;
use PaypalAddons\classes\API\Response\ResponseOrderCapture;
use PaypalAddons\services\ServicePaypalVaulting;
use Symfony\Component\VarDumper\VarDumper;
use Validate;
class PaypalOrderCaptureRequest extends RequestAbstractMB
{
public function execute()
{
$response = new ResponseOrderCapture();
// Get the payment Object by passing paymentId
// payment id was previously stored in session in
// CreatePaymentUsingPayPal.php
$payment = Payment::get($this->method->getPaymentId(), $this->getApiContext());
// ### Payment Execute
// PaymentExecution object includes information necessary
// to execute a PayPal account payment.
// The payer_id is added to the request query parameters
// when the user is redirected from paypal back to your site
$execution = new PaymentExecution();
$execution->setPayerId($this->method->getPayerId());
// ### Optional Changes to Amount
// If you wish to update the amount that you wish to charge the customer,
// based on the shipping address or any other reason, you could
// do that by passing the transaction object with just `amount` field in it.
$exec = $payment->execute($execution, $this->getApiContext());
return $response->setSuccess(true)
->setData($exec)
->setPaymentId($this->getPaymentId($exec))
->setTransactionId($this->getTransactionId($exec))
->setCurrency($this->getCurrency($exec))
->setCapture($this->getCapture($exec))
->setTotalPaid($this->getTotalPaid($exec))
->setStatus($this->getPaymentStatus($exec))
->setPaymentMethod($this->getPaymentMethod($exec))
->setPaymentTool($this->getPaymentTool($exec))
->setMethod($this->getMethodTransaction())
->setDateTransaction($this->getDateTransaction($exec));
}
/**
* @param Payment $payment
* @return string
*/
protected function getPaymentId(Payment $payment)
{
return (string) $payment->getId();
}
/**
* @param Payment $payment
* @return string
*/
protected function getTransactionId(Payment $payment)
{
$paymentInfo = $payment->transactions[0];
return (string) $paymentInfo->related_resources[0]->sale->id;
}
/**
* @param Payment $payment
* @return string
*/
protected function getCurrency(Payment $payment)
{
$paymentInfo = $payment->transactions[0];
return (string) $paymentInfo->amount->currency;
}
/**
* @param Payment $payment
* @return bool
*/
protected function getCapture(Payment $payment)
{
return false;
}
/**
* @param Payment $payment
* @return float
*/
protected function getTotalPaid(Payment $payment)
{
$paymentInfo = $payment->transactions[0];
return (float) $paymentInfo->amount->total;
}
/**
* @param Payment $payment
* @return string
*/
protected function getPaymentMethod(Payment $payment)
{
return (string) $payment->payer->payment_method;
}
/**
* @param Payment $payment
* @return string
*/
protected function getPaymentStatus(Payment $payment)
{
return (string) $payment->state;
}
/**
* @param Payment $payment
* @return string
*/
protected function getPaymentTool(Payment $payment)
{
return (string) isset($payment->payment_instruction)? $payment->payment_instruction->instruction_type:'';
}
/**
* @return string
*/
protected function getMethodTransaction()
{
return 'MB';
}
/**
* @param Payment $payment
* @return \DateTime
*/
protected function getDateTransaction($payment)
{
$date = \DateTime::createFromFormat(\DateTime::ISO8601, $payment->update_time);
return $date;
}
}