Fix psalm

This commit is contained in:
Emili Castells Guasch 2023-10-27 15:28:01 +02:00
parent 48c5773ecd
commit 00d9cf52a4
7 changed files with 54 additions and 25 deletions

View file

@ -146,13 +146,18 @@ class OrderFactory {
$payment_source = null; $payment_source = null;
if ( isset( $order_data->payment_source ) ) { if ( isset( $order_data->payment_source ) ) {
$payment_source_as_array = json_decode( json_encode( $order_data->payment_source ), true ); $json_encoded_payment_source = wp_json_encode( $order_data->payment_source );
if ( $payment_source_as_array ) { if ( $json_encoded_payment_source ) {
$name = array_key_first( $payment_source_as_array ); $payment_source_as_array = json_decode( $json_encoded_payment_source, true );
$payment_source = new PaymentSource( if ( $payment_source_as_array ) {
array_key_first( $payment_source_as_array ), $name = array_key_first( $payment_source_as_array );
$order_data->payment_source->$name if ( $name ) {
); $payment_source = new PaymentSource(
$name,
$order_data->payment_source->$name
);
}
}
} }
} }

View file

@ -14,6 +14,7 @@ use Exception;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentSource;
use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException;
use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies;
use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper; use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper;
@ -144,10 +145,13 @@ class ApproveOrderEndpoint implements EndpointInterface {
$order = $this->api_endpoint->order( $data['order_id'] ); $order = $this->api_endpoint->order( $data['order_id'] );
if ( $order->payment_source() && $order->payment_source()->name() === 'card' ) { $payment_source = $order->payment_source();
assert( $payment_source instanceof PaymentSource );
if ( $payment_source->name() === 'card' ) {
if ( $this->settings->has( 'disable_cards' ) ) { if ( $this->settings->has( 'disable_cards' ) ) {
$disabled_cards = (array) $this->settings->get( 'disable_cards' ); $disabled_cards = (array) $this->settings->get( 'disable_cards' );
$card = strtolower( $order->payment_source()->properties()->brand ?? '' ); $card = strtolower( $payment_source->properties()->brand ?? '' );
if ( 'master_card' === $card ) { if ( 'master_card' === $card ) {
$card = 'mastercard'; $card = 'mastercard';
} }

View file

@ -12,6 +12,7 @@ namespace WooCommerce\PayPalCommerce\Button\Helper;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Entity\CardAuthenticationResult as AuthResult; use WooCommerce\PayPalCommerce\ApiClient\Entity\CardAuthenticationResult as AuthResult;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentSource;
/** /**
* Class ThreeDSecure * Class ThreeDSecure
@ -49,17 +50,19 @@ class ThreeDSecure {
* @return int * @return int
*/ */
public function proceed_with_order( Order $order ): int { public function proceed_with_order( Order $order ): int {
if ( ! $order->payment_source() ) { $payment_source = $order->payment_source();
return self::NO_DECISION; if ( ! $payment_source ) {
}
if ( ! $order->payment_source()->properties()->brand ?? '' ) {
return self::NO_DECISION;
}
if ( ! $order->payment_source()->properties()->authentication_result ?? '' ) {
return self::NO_DECISION; return self::NO_DECISION;
} }
$result = $order->payment_source()->properties()->authentication_result; if ( ! $payment_source->properties()->brand ?? '' ) {
return self::NO_DECISION;
}
if ( ! $payment_source->properties()->authentication_result ?? '' ) {
return self::NO_DECISION;
}
$result = $payment_source->properties()->authentication_result;
$this->logger->info( '3DS authentication result: ' . wc_print_r( $result->to_array(), true ) ); $this->logger->info( '3DS authentication result: ' . wc_print_r( $result->to_array(), true ) );
if ( $result->liability_shift() === AuthResult::LIABILITY_SHIFT_POSSIBLE ) { if ( $result->liability_shift() === AuthResult::LIABILITY_SHIFT_POSSIBLE ) {

View file

@ -80,6 +80,11 @@ class CreatePaymentToken implements EndpointInterface {
try { try {
$data = $this->request_data->read_request( $this->nonce() ); $data = $this->request_data->read_request( $this->nonce() );
/**
* Suppress ArgumentTypeCoercion
*
* @psalm-suppress ArgumentTypeCoercion
*/
$payment_source = new PaymentSource( $payment_source = new PaymentSource(
'token', 'token',
(object) array( (object) array(

View file

@ -69,6 +69,11 @@ class CreateSetupToken implements EndpointInterface {
try { try {
$this->request_data->read_request( $this->nonce() ); $this->request_data->read_request( $this->nonce() );
/**
* Suppress ArgumentTypeCoercion
*
* @psalm-suppress ArgumentTypeCoercion
*/
$payment_source = new PaymentSource( $payment_source = new PaymentSource(
'paypal', 'paypal',
(object) array( (object) array(

View file

@ -9,20 +9,17 @@ declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\SavePaymentMethods; namespace WooCommerce\PayPalCommerce\SavePaymentMethods;
use Exception;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use stdClass;
use WC_Order; use WC_Order;
use WC_Payment_Tokens;
use WooCommerce\PayPalCommerce\ApiClient\Authentication\UserIdToken; use WooCommerce\PayPalCommerce\ApiClient\Authentication\UserIdToken;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentSource;
use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException;
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
use WooCommerce\PayPalCommerce\SavePaymentMethods\Endpoint\CreatePaymentToken; use WooCommerce\PayPalCommerce\SavePaymentMethods\Endpoint\CreatePaymentToken;
use WooCommerce\PayPalCommerce\SavePaymentMethods\Endpoint\CreateSetupToken; use WooCommerce\PayPalCommerce\SavePaymentMethods\Endpoint\CreateSetupToken;
use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenFactory; use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenFactory;
use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenHelper; use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenHelper;
use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenPayPal;
use WooCommerce\PayPalCommerce\Vendor\Dhii\Container\ServiceProvider; use WooCommerce\PayPalCommerce\Vendor\Dhii\Container\ServiceProvider;
use WooCommerce\PayPalCommerce\Vendor\Dhii\Modular\Module\ModuleInterface; use WooCommerce\PayPalCommerce\Vendor\Dhii\Modular\Module\ModuleInterface;
use WooCommerce\PayPalCommerce\Vendor\Interop\Container\ServiceProviderInterface; use WooCommerce\PayPalCommerce\Vendor\Interop\Container\ServiceProviderInterface;
@ -91,7 +88,7 @@ class SavePaymentMethodsModule implements ModuleInterface {
// Adds attributes needed to save payment method. // Adds attributes needed to save payment method.
add_filter( add_filter(
'ppcp_create_order_request_body_data', 'ppcp_create_order_request_body_data',
function( $data ) { function( array $data ): array {
$data['payment_source'] = array( $data['payment_source'] = array(
'paypal' => array( 'paypal' => array(
'attributes' => array( 'attributes' => array(
@ -110,7 +107,10 @@ class SavePaymentMethodsModule implements ModuleInterface {
add_action( add_action(
'woocommerce_paypal_payments_after_order_processor', 'woocommerce_paypal_payments_after_order_processor',
function( WC_Order $wc_order, Order $order ) use ( $c ) { function( WC_Order $wc_order, Order $order ) use ( $c ) {
$payment_vault_attributes = $order->payment_source()->properties()->attributes->vault ?? null; $payment_source = $order->payment_source();
assert( $payment_source instanceof PaymentSource );
$payment_vault_attributes = $payment_source->properties()->attributes->vault ?? null;
if ( $payment_vault_attributes ) { if ( $payment_vault_attributes ) {
update_user_meta( $wc_order->get_customer_id(), '_ppcp_target_customer_id', $payment_vault_attributes->customer->id ); update_user_meta( $wc_order->get_customer_id(), '_ppcp_target_customer_id', $payment_vault_attributes->customer->id );
@ -129,7 +129,7 @@ class SavePaymentMethodsModule implements ModuleInterface {
$wc_payment_tokens->create_payment_token_paypal( $wc_payment_tokens->create_payment_token_paypal(
$wc_order->get_customer_id(), $wc_order->get_customer_id(),
$payment_vault_attributes->id, $payment_vault_attributes->id,
$order->payment_source()->properties()->email_address ?? '' $payment_source->properties()->email_address ?? ''
); );
} }
}, },

View file

@ -14,6 +14,7 @@ use WC_Order;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentSource;
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory;
use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper; use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper;
@ -324,7 +325,13 @@ class OrderProcessor {
return true; return true;
} }
if ( ! $order->payment_source() || $order->payment_source()->name() !== 'card' ) { $payment_source = $order->payment_source();
if ( ! $payment_source ) {
return false;
}
assert( $payment_source instanceof PaymentSource );
if ( $payment_source->name() !== 'card' ) {
return false; return false;
} }