From eb2eb58a1ca2766ecafff2fc79036c41c8310ddc Mon Sep 17 00:00:00 2001 From: dinamiko Date: Wed, 4 May 2022 15:06:17 +0200 Subject: [PATCH] Update transaction id --- .../Gateway/PayUponInvoice/PayUponInvoice.php | 52 ++++++++++++++----- .../PayUponInvoice/PayUponInvoiceGateway.php | 34 ++++++++++-- 2 files changed, 67 insertions(+), 19 deletions(-) diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php index 19fcaf9f7..2faf5df38 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php @@ -11,9 +11,11 @@ namespace WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice; use Psr\Log\LoggerInterface; use WC_Order; +use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PayUponInvoiceOrderEndpoint; use WooCommerce\PayPalCommerce\Button\Exception\RuntimeException; use WooCommerce\PayPalCommerce\Onboarding\Environment; +use WooCommerce\PayPalCommerce\WcGateway\Processor\TransactionIdHandlingTrait; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\WcGateway\Exception\NotFoundException; use WP_Error; @@ -23,6 +25,8 @@ use WP_Error; */ class PayUponInvoice { + use TransactionIdHandlingTrait; + /** * The module URL. * @@ -38,11 +42,11 @@ class PayUponInvoice { protected $fraud_net; /** - * The order endpoint. + * The pui order endpoint. * * @var PayUponInvoiceOrderEndpoint */ - protected $order_endpoint; + protected $pui_order_endpoint; /** * The logger. @@ -72,33 +76,43 @@ class PayUponInvoice { */ protected $asset_version; + /** + * The order endpoint. + * + * @var OrderEndpoint + */ + protected $order_endpoint; + /** * PayUponInvoice constructor. * * @param string $module_url The module URL. * @param FraudNet $fraud_net The FraudNet entity. - * @param PayUponInvoiceOrderEndpoint $order_endpoint The order endpoint. + * @param PayUponInvoiceOrderEndpoint $pui_order_endpoint The PUI order endpoint. * @param LoggerInterface $logger The logger. * @param Settings $settings The settings. * @param Environment $environment The environment. * @param string $asset_version The asset version. + * @param OrderEndpoint $order_endpoint The order endpoint. */ public function __construct( string $module_url, FraudNet $fraud_net, - PayUponInvoiceOrderEndpoint $order_endpoint, + PayUponInvoiceOrderEndpoint $pui_order_endpoint, LoggerInterface $logger, Settings $settings, Environment $environment, - string $asset_version + string $asset_version, + OrderEndpoint $order_endpoint ) { - $this->module_url = $module_url; - $this->fraud_net = $fraud_net; - $this->order_endpoint = $order_endpoint; - $this->logger = $logger; - $this->settings = $settings; - $this->environment = $environment; - $this->asset_version = $asset_version; + $this->module_url = $module_url; + $this->fraud_net = $fraud_net; + $this->pui_order_endpoint = $pui_order_endpoint; + $this->logger = $logger; + $this->settings = $settings; + $this->environment = $environment; + $this->asset_version = $asset_version; + $this->order_endpoint = $order_endpoint; } /** @@ -132,9 +146,19 @@ class PayUponInvoice { 'ppcp_payment_capture_completed_webhook_handler', function ( WC_Order $wc_order, string $order_id ) { try { - $payment_instructions = $this->order_endpoint->order_payment_instructions( $order_id ); - $wc_order->update_meta_data( 'ppcp_ratepay_payment_instructions_payment_reference', $payment_instructions ); + $order = $this->order_endpoint->order( $order_id ); + $transaction_id = $this->get_paypal_order_transaction_id( $order ); + if ( $transaction_id ) { + $this->update_transaction_id( $transaction_id, $wc_order ); + } + + $payment_instructions = $this->pui_order_endpoint->order_payment_instructions( $order_id ); + $wc_order->update_meta_data( + 'ppcp_ratepay_payment_instructions_payment_reference', + $payment_instructions + ); $this->logger->info( "Ratepay payment instructions added to order #{$wc_order->get_id()}." ); + } catch ( RuntimeException $exception ) { $this->logger->error( $exception->getMessage() ); } diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php index b153da161..f26deaece 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php @@ -11,11 +11,13 @@ namespace WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice; use Psr\Log\LoggerInterface; use RuntimeException; +use WC_Order; use WC_Payment_Gateway; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PayUponInvoiceOrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\ApiClient\Factory\PurchaseUnitFactory; use WooCommerce\PayPalCommerce\Onboarding\Environment; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\TransactionUrlProvider; use WooCommerce\PayPalCommerce\WcGateway\Processor\OrderMetaTrait; /** @@ -55,6 +57,13 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { */ protected $environment; + /** + * The transaction url provider. + * + * @var TransactionUrlProvider + */ + protected $transaction_url_provider; + /** * The logger interface. * @@ -76,6 +85,7 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { PurchaseUnitFactory $purchase_unit_factory, PaymentSourceFactory $payment_source_factory, Environment $environment, + TransactionUrlProvider $transaction_url_provider, LoggerInterface $logger ) { $this->id = self::ID; @@ -98,11 +108,12 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { ) ); - $this->order_endpoint = $order_endpoint; - $this->purchase_unit_factory = $purchase_unit_factory; - $this->payment_source_factory = $payment_source_factory; - $this->logger = $logger; - $this->environment = $environment; + $this->order_endpoint = $order_endpoint; + $this->purchase_unit_factory = $purchase_unit_factory; + $this->payment_source_factory = $payment_source_factory; + $this->logger = $logger; + $this->environment = $environment; + $this->transaction_url_provider = $transaction_url_provider; } /** @@ -223,4 +234,17 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { ); } } + + /** + * Return transaction url for this gateway and given order. + * + * @param WC_Order $order WC order to get transaction url by. + * + * @return string + */ + public function get_transaction_url( $order ): string { + $this->view_transaction_url = $this->transaction_url_provider->get_transaction_url_base( $order ); + + return parent::get_transaction_url( $order ); + } }