Merge pull request #480 from woocommerce/PCP-230-pass-address-details-to-credit-c

Send checkout form information if payer does not exist
This commit is contained in:
Emili Castells 2022-02-08 11:31:52 +01:00 committed by GitHub
commit b63827d79d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 0 deletions

View file

@ -9,6 +9,7 @@ declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\ApiClient\Factory;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Address;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Payer;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PayerName;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PayerTaxInfo;
@ -147,4 +148,55 @@ class PayerFactory {
$tax_info
);
}
/**
* Returns a Payer object based off the given checkout form fields.
*
* @param array $form_fields The checkout form fields.
* @return Payer
*/
public function from_checkout_form( array $form_fields ): Payer {
$first_name = $form_fields['billing_first_name'] ?? '';
$last_name = $form_fields['billing_last_name'] ?? '';
$billing_email = $form_fields['billing_email'] ?? '';
$billing_country = $form_fields['billing_country'] ?? '';
$billing_address_1 = $form_fields['billing_address_1'] ?? '';
$billing_address_2 = $form_fields['billing_address_2'] ?? '';
$admin_area_1 = $form_fields['billing_state'] ?? '';
$admin_area_2 = $form_fields['billing_city'] ?? '';
$billing_postcode = $form_fields['billing_postcode'] ?? '';
$phone = null;
if ( isset( $form_fields['billing_phone'] ) && '' !== $form_fields['billing_phone'] ) {
// make sure the phone number contains only numbers and is max 14. chars long.
$national_number = $form_fields['billing_phone'];
$national_number = preg_replace( '/[^0-9]/', '', $national_number );
if ( null !== $national_number ) {
$national_number = substr( $national_number, 0, 14 );
$phone = new PhoneWithType(
'HOME',
new Phone( $national_number )
);
}
}
return new Payer(
new PayerName( $first_name, $last_name ),
$billing_email,
'',
new Address(
$billing_country,
$billing_address_1,
$billing_address_2,
$admin_area_1,
$admin_area_2,
$billing_postcode
),
null,
$phone
);
}
}

View file

@ -12,8 +12,10 @@ namespace WooCommerce\PayPalCommerce\Button\Endpoint;
use Exception;
use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Address;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Payer;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PayerName;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentMethod;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit;
use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException;
@ -337,6 +339,15 @@ class CreateOrderEndpoint implements EndpointInterface {
$payer = $this->payer_factory->from_paypal_response( json_decode( wp_json_encode( $data['payer'] ) ) );
}
if ( ! $payer && isset( $data['form'] ) ) {
parse_str( $data['form'], $form_fields );
if ( isset( $form_fields['billing_email'] ) && '' !== $form_fields['billing_email'] ) {
return $this->payer_factory->from_checkout_form( $form_fields );
}
}
return $payer;
}