Merge branch 'trunk' into pcp-328-mismatch

This commit is contained in:
Alex P 2022-06-20 16:35:37 +03:00
commit 84a5d9cd0f
22 changed files with 215 additions and 58 deletions

View file

@ -47,6 +47,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Factory\WebhookEventFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\WebhookFactory;
use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies;
use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper;
use WooCommerce\PayPalCommerce\ApiClient\Repository\ApplicationContextRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\CartRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\CustomerRepository;
@ -671,4 +672,7 @@ return array(
'SE',
);
},
'api.order-helper' => static function( ContainerInterface $container ): OrderHelper {
return new OrderHelper();
},
);

View file

@ -69,13 +69,8 @@ class AddressFactory {
* @throws RuntimeException When JSON object is malformed.
*/
public function from_paypal_response( \stdClass $data ): Address {
if ( ! isset( $data->country_code ) ) {
throw new RuntimeException(
__( 'No country given for address.', 'woocommerce-paypal-payments' )
);
}
return new Address(
$data->country_code,
( isset( $data->country_code ) ) ? $data->country_code : '',
( isset( $data->address_line_1 ) ) ? $data->address_line_1 : '',
( isset( $data->address_line_2 ) ) ? $data->address_line_2 : '',
( isset( $data->admin_area_1 ) ) ? $data->admin_area_1 : '',

View file

@ -15,6 +15,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Entity\PayerName;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PayerTaxInfo;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Phone;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PhoneWithType;
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
/**
* Class PayerFactory
@ -158,6 +159,7 @@ class PayerFactory {
*
* @param array $form_fields The checkout form fields.
* @return Payer
* @throws RuntimeException When invalid data.
*/
public function from_checkout_form( array $form_fields ): Payer {
@ -189,6 +191,14 @@ class PayerFactory {
}
}
if ( ! is_email( $billing_email ) ) {
/*
phpcs:disable WordPress.WP.I18n.TextDomainMismatch
translators: %s: email address
*/
throw new RuntimeException( sprintf( __( '%s is not a valid email address.', 'woocommerce' ), esc_html( $billing_email ) ) );
}
return new Payer(
new PayerName( $first_name, $last_name ),
$billing_email,

View file

@ -0,0 +1,34 @@
<?php
/**
* PayPal order helper.
*
* @package WooCommerce\PayPalCommerce\ApiClient\Helper
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\ApiClient\Helper;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
/**
* Class OrderHelper
*/
class OrderHelper {
/**
* Checks if order contains physical goods.
*
* @param Order $order PayPal order.
* @return bool
*/
public function contains_physical_goods( Order $order ): bool {
foreach ( $order->purchase_units() as $unit ) {
if ( $unit->contains_physical_goods() ) {
return true;
}
}
return false;
}
}