From 753b8bae3e708cf7d98fad6296fdb562e2c6f88b Mon Sep 17 00:00:00 2001 From: dinamiko Date: Wed, 9 Mar 2022 16:23:03 +0100 Subject: [PATCH] Get fraudNet session id from WC session --- .../resources/js/pay-upon-invoice.js | 4 -- modules/ppcp-wc-gateway/services.php | 20 ++++++ .../src/Gateway/PayUponInvoice/FraudNet.php | 38 +++++++++++ .../PayUponInvoice/FraudNetSessionId.php | 18 ++++++ .../Gateway/PayUponInvoice/OrderEndpoint.php | 15 ++++- .../Gateway/PayUponInvoice/PayUponInvoice.php | 63 +++++++++++++++++++ .../ppcp-wc-gateway/src/WCGatewayModule.php | 43 +------------ 7 files changed, 155 insertions(+), 46 deletions(-) create mode 100644 modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNet.php create mode 100644 modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNetSessionId.php create mode 100644 modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php diff --git a/modules/ppcp-wc-gateway/resources/js/pay-upon-invoice.js b/modules/ppcp-wc-gateway/resources/js/pay-upon-invoice.js index d5671fab9..db862b962 100644 --- a/modules/ppcp-wc-gateway/resources/js/pay-upon-invoice.js +++ b/modules/ppcp-wc-gateway/resources/js/pay-upon-invoice.js @@ -1,8 +1,4 @@ document.addEventListener('DOMContentLoaded', () => { - const script = document.createElement('script'); - script.setAttribute('src', 'https://c.paypal.com/da/r/fb.js'); - document.body.append(script); - jQuery(document.body).on('updated_checkout payment_method_selected', () => { jQuery('#ppcp-pui-legal-text').hide(); if(jQuery('input[name="payment_method"]:checked').val() === 'ppcp-pay-upon-invoice-gateway') { diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index ca52026d1..9d635fab8 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -29,7 +29,10 @@ use WooCommerce\PayPalCommerce\WcGateway\Endpoint\ReturnUrlEndpoint; use WooCommerce\PayPalCommerce\WcGateway\FundingSource\FundingSourceRenderer; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\FraudNet; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\FraudNetSessionId; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\OrderEndpoint; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\PayUponInvoice; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\PayUponInvoiceGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\TransactionUrlProvider; use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCProductStatus; @@ -2125,6 +2128,7 @@ return array( $container->get( 'api.host' ), $container->get( 'api.bearer' ), $container->get( 'api.factory.order' ), + $container->get('wcgateway.pay-upon-invoice-fraudnet'), $container->get( 'woocommerce.logger.woocommerce' ) ); }, @@ -2135,4 +2139,20 @@ return array( $container->get( 'woocommerce.logger.woocommerce' ) ); }, + 'wcgateway.pay-upon-invoice-fraudnet-session-id' => static function (ContainerInterface $container): FraudNetSessionId { + return new FraudNetSessionId(); + }, + 'wcgateway.pay-upon-invoice-fraudnet' => static function (ContainerInterface $container): FraudNet { + $session_id = $container->get('wcgateway.pay-upon-invoice-fraudnet-session-id'); + return new FraudNet( + (string)$session_id(), + 'bar' + ); + }, + 'wcgateway.pay-upon-invoice' => static function (ContainerInterface $container): PayUponInvoice { + return new PayUponInvoice( + $container->get('wcgateway.url'), + $container->get('wcgateway.pay-upon-invoice-fraudnet') + ); + } ); diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNet.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNet.php new file mode 100644 index 000000000..b6ddf43a1 --- /dev/null +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNet.php @@ -0,0 +1,38 @@ +session_id = $session_id; + $this->source_website_id = $source_website_id; + } + + /** + * @return string + */ + public function sessionId(): string + { + return $this->session_id; + } + + /** + * @return string + */ + public function sourceWebsiteId(): string + { + return $this->source_website_id; + } +} diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNetSessionId.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNetSessionId.php new file mode 100644 index 000000000..7e138d13f --- /dev/null +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/FraudNetSessionId.php @@ -0,0 +1,18 @@ +session->get( 'ppcp_fraudnet_session_id' )) { + return WC()->session->get( 'ppcp_fraudnet_session_id' ); + } + + $session_id = bin2hex(random_bytes(16)); + WC()->session->set( 'ppcp_fraudnet_session_id', $session_id); + + return bin2hex($session_id); + } +} diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/OrderEndpoint.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/OrderEndpoint.php index 090aa72d5..74877be59 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/OrderEndpoint.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/OrderEndpoint.php @@ -36,12 +36,23 @@ class OrderEndpoint { * @var LoggerInterface */ protected $logger; + /** + * @var FraudNet + */ + protected $fraudNet; - public function __construct( string $host, Bearer $bearer, OrderFactory $order_factory, LoggerInterface $logger ) { + public function __construct( + string $host, + Bearer $bearer, + OrderFactory $order_factory, + FraudNet $fraudNet, + LoggerInterface $logger + ) { $this->host = $host; $this->bearer = $bearer; $this->order_factory = $order_factory; $this->logger = $logger; + $this->fraudNet = $fraudNet; } /** @@ -98,7 +109,7 @@ class OrderEndpoint { 'Authorization' => 'Bearer ' . $bearer->token(), 'Content-Type' => 'application/json', 'Prefer' => 'return=representation', - 'PayPal-Client-Metadata-Id' => 'd4e0d7b9-4f75-43f9-9437-d8a57c901585', + 'PayPal-Client-Metadata-Id' => $this->fraudNet->sessionId(), 'PayPal-Request-Id' => uniqid( 'ppcp-', true ), ), 'body' => wp_json_encode( $data ), diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php new file mode 100644 index 000000000..1a27480e0 --- /dev/null +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php @@ -0,0 +1,63 @@ +module_url = $module_url; + $this->fraud_net = $fraud_net; + } + + public function init() { + add_action( + 'wp_footer', + array( $this, 'add_parameter_block' ) + ); + + add_action( + 'woocommerce_review_order_after_submit', + array( $this, 'add_legal_text' ) + ); + + add_action( + 'wp_enqueue_scripts', + array( $this, 'register_assets' ) + ); + } + + public function add_parameter_block() { ?> + + + + + module_url ) . 'assets/js/pay-upon-invoice.js', + array(), + 1 + ); + } +} diff --git a/modules/ppcp-wc-gateway/src/WCGatewayModule.php b/modules/ppcp-wc-gateway/src/WCGatewayModule.php index 280678937..460863398 100644 --- a/modules/ppcp-wc-gateway/src/WCGatewayModule.php +++ b/modules/ppcp-wc-gateway/src/WCGatewayModule.php @@ -185,46 +185,9 @@ class WCGatewayModule implements ModuleInterface { add_action( 'init', - function() use ( $c ) { - if ( 'DE' === $c->get( 'api.shop.country' ) ) { // TODO && is_checkout() does not work, we are on admin-ajax.php - - add_action( - 'wp_footer', - function () { - ?> - - get( 'wcgateway.url' ); - wp_enqueue_script( - 'ppcp-pay-upon-invoice', - trailingslashit( $gateway_module_url ) . 'assets/js/pay-upon-invoice.js', - array(), - 1 - ); - } - ); - - add_action( - 'woocommerce_review_order_after_submit', - function () { - $gateway_settings = get_option( 'woocommerce_ppcp-pay-upon-invoice-gateway_settings' ); - ?> - - get( 'api.shop.country' ) ) { + ($c->get('wcgateway.pay-upon-invoice'))->init(); } } );