mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-03 08:37:53 +08:00
98 lines
2.7 KiB
PHP
98 lines
2.7 KiB
PHP
<?php
|
|
/**
|
|
* The refund factory.
|
|
*
|
|
* @package WooCommerce\PayPalCommerce\ApiClient\Factory
|
|
*/
|
|
|
|
declare( strict_types=1 );
|
|
|
|
namespace WooCommerce\PayPalCommerce\ApiClient\Factory;
|
|
|
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\Refund;
|
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\RefundStatus;
|
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\RefundStatusDetails;
|
|
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
|
|
|
|
/**
|
|
* Class RefundFactory
|
|
*/
|
|
class RefundFactory {
|
|
|
|
/**
|
|
* The Amount factory.
|
|
*
|
|
* @var AmountFactory
|
|
*/
|
|
private $amount_factory;
|
|
|
|
/**
|
|
* The SellerPayableBreakdownFactory factory.
|
|
*
|
|
* @var SellerPayableBreakdownFactory
|
|
*/
|
|
private $seller_payable_breakdown_factory;
|
|
|
|
/**
|
|
* The RefundPayerFactory factory.
|
|
*
|
|
* @var RefundPayerFactory
|
|
*/
|
|
private $refund_payer_factory;
|
|
|
|
/**
|
|
* RefundFactory constructor.
|
|
*
|
|
* @param AmountFactory $amount_factory The amount factory.
|
|
* @param SellerPayableBreakdownFactory $seller_payable_breakdown_factory The payable breakdown factory.
|
|
* @param RefundPayerFactory $refund_payer_factory The payer breakdown factory.
|
|
*/
|
|
public function __construct(
|
|
AmountFactory $amount_factory,
|
|
SellerPayableBreakdownFactory $seller_payable_breakdown_factory,
|
|
RefundPayerFactory $refund_payer_factory
|
|
) {
|
|
$this->amount_factory = $amount_factory;
|
|
$this->seller_payable_breakdown_factory = $seller_payable_breakdown_factory;
|
|
$this->refund_payer_factory = $refund_payer_factory;
|
|
}
|
|
|
|
/**
|
|
* Returns the refund object based off the PayPal response.
|
|
*
|
|
* @param \stdClass $data The PayPal response.
|
|
*
|
|
* @return Refund
|
|
* @throws RuntimeException When refund amount data is invalid.
|
|
*/
|
|
public function from_paypal_response( \stdClass $data ) : Refund {
|
|
$reason = $data->status_details->reason ?? null;
|
|
$seller_payable_breakdown = isset( $data->seller_payable_breakdown ) ?
|
|
$this->seller_payable_breakdown_factory->from_paypal_response( $data->seller_payable_breakdown )
|
|
: null;
|
|
|
|
$payer = isset( $data->payer ) ?
|
|
$this->refund_payer_factory->from_paypal_response( $data->payer )
|
|
: null;
|
|
|
|
$amount = $this->amount_factory->from_paypal_response( $data->amount );
|
|
if ( null === $amount ) {
|
|
throw new RuntimeException( 'Invalid refund amount data.' );
|
|
}
|
|
|
|
return new Refund(
|
|
(string) $data->id,
|
|
new RefundStatus(
|
|
(string) $data->status,
|
|
$reason ? new RefundStatusDetails( $reason ) : null
|
|
),
|
|
$amount,
|
|
(string) ( $data->invoice_id ?? '' ),
|
|
(string) ( $data->custom_id ?? '' ),
|
|
$seller_payable_breakdown,
|
|
(string) ( $data->acquirer_reference_number ?? '' ),
|
|
(string) ( $data->note_to_payer ?? '' ),
|
|
$payer
|
|
);
|
|
}
|
|
}
|