Version Description
- Add - PayPal credit is now available on checkout.
- Fix - WC 3.3 compatibility.
- Add - Ability to select existing / upload new image(s) for logo / header fields.
- Fix - Shipping address overriden when PayPal returns billing address.
Download this release
Release Info
Developer | bor0 |
Plugin | WooCommerce PayPal Express Checkout Payment Gateway |
Version | 1.5.0 |
Comparing to | |
See all releases |
Code changes from version 1.4.7 to 1.5.0
- assets/js/wc-gateway-ppec-settings.js +96 -0
- includes/abstracts/abstract-wc-gateway-ppec.php +89 -18
- includes/class-wc-gateway-ppec-checkout-handler.php +80 -51
- includes/class-wc-gateway-ppec-client.php +14 -10
- includes/class-wc-gateway-ppec-gateway-loader.php +7 -0
- includes/class-wc-gateway-ppec-settings.php +7 -7
- includes/class-wc-gateway-ppec-with-paypal-credit.php +26 -0
- includes/class-wc-gateway-ppec-with-paypal.php +2 -1
- includes/functions.php +13 -0
- includes/settings/settings-ppec.php +4 -4
- readme.txt +7 -1
- woocommerce-gateway-paypal-express-checkout.php +3 -3
assets/js/wc-gateway-ppec-settings.js
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
;(function ( $, window, document ) {
|
2 |
+
'use strict';
|
3 |
+
|
4 |
+
var uploadField = {
|
5 |
+
frames: [],
|
6 |
+
init: function() {
|
7 |
+
$( 'button.image_upload' )
|
8 |
+
.on( 'click', this.onClickUploadButton );
|
9 |
+
|
10 |
+
$( 'button.image_remove' )
|
11 |
+
.on( 'click', this.removeProductImage );
|
12 |
+
},
|
13 |
+
|
14 |
+
onClickUploadButton: function( event ) {
|
15 |
+
event.preventDefault();
|
16 |
+
|
17 |
+
var data = $( event.target ).data();
|
18 |
+
|
19 |
+
// If the media frame already exists, reopen it.
|
20 |
+
if ( 'undefined' !== typeof uploadField.frames[ data.fieldId ] ) {
|
21 |
+
// Open frame.
|
22 |
+
uploadField.frames[ data.fieldId ].open();
|
23 |
+
return false;
|
24 |
+
}
|
25 |
+
|
26 |
+
// Create the media frame.
|
27 |
+
uploadField.frames[ data.fieldId ] = wp.media( {
|
28 |
+
title: data.mediaFrameTitle,
|
29 |
+
button: {
|
30 |
+
text: data.mediaFrameButton
|
31 |
+
},
|
32 |
+
multiple: false // Set to true to allow multiple files to be selected
|
33 |
+
} );
|
34 |
+
|
35 |
+
// When an image is selected, run a callback.
|
36 |
+
var context = {
|
37 |
+
fieldId: data.fieldId,
|
38 |
+
};
|
39 |
+
|
40 |
+
uploadField.frames[ data.fieldId ]
|
41 |
+
.on( 'select', uploadField.onSelectAttachment, context );
|
42 |
+
|
43 |
+
// Finally, open the modal.
|
44 |
+
uploadField.frames[ data.fieldId ].open();
|
45 |
+
},
|
46 |
+
|
47 |
+
onSelectAttachment: function() {
|
48 |
+
// We set multiple to false so only get one image from the uploader.
|
49 |
+
var attachment = uploadField.frames[ this.fieldId ]
|
50 |
+
.state()
|
51 |
+
.get( 'selection' )
|
52 |
+
.first()
|
53 |
+
.toJSON();
|
54 |
+
|
55 |
+
var $field = $( '#' + this.fieldId );
|
56 |
+
var $img = $( '<img />' )
|
57 |
+
.attr( 'src', getAttachmentUrl( attachment ) );
|
58 |
+
|
59 |
+
$field.siblings( '.image-preview-wrapper' )
|
60 |
+
.html( $img );
|
61 |
+
|
62 |
+
$field.val( attachment.id );
|
63 |
+
$field.siblings( 'button.image_remove' ).show();
|
64 |
+
$field.siblings( 'button.image_upload' ).hide();
|
65 |
+
},
|
66 |
+
|
67 |
+
removeProductImage: function( event ) {
|
68 |
+
event.preventDefault();
|
69 |
+
var $button = $( event.target );
|
70 |
+
var data = $button.data();
|
71 |
+
var $field = $( '#' + data.fieldId );
|
72 |
+
|
73 |
+
//update fields
|
74 |
+
$field.val( '' );
|
75 |
+
$field.siblings( '.image-preview-wrapper' ).html( ' ' );
|
76 |
+
$button.hide();
|
77 |
+
$field.siblings( 'button.image_upload' ).show();
|
78 |
+
},
|
79 |
+
};
|
80 |
+
|
81 |
+
function getAttachmentUrl( attachment ) {
|
82 |
+
if ( attachment.sizes && attachment.sizes.medium ) {
|
83 |
+
return attachment.sizes.medium.url;
|
84 |
+
}
|
85 |
+
if ( attachment.sizes && attachment.sizes.thumbnail ) {
|
86 |
+
return attachment.sizes.thumbnail.url;
|
87 |
+
}
|
88 |
+
return attachment.url;
|
89 |
+
}
|
90 |
+
|
91 |
+
function run() {
|
92 |
+
uploadField.init();
|
93 |
+
}
|
94 |
+
|
95 |
+
$( run );
|
96 |
+
}( jQuery ) );
|
includes/abstracts/abstract-wc-gateway-ppec.php
CHANGED
@@ -14,7 +14,6 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
14 |
*/
|
15 |
public function __construct() {
|
16 |
$this->has_fields = false;
|
17 |
-
$this->icon = 'https://www.paypalobjects.com/webstatic/en_US/i/buttons/pp-acceptance-small.png';
|
18 |
$this->supports[] = 'refunds';
|
19 |
$this->method_title = __( 'PayPal Express Checkout', 'woocommerce-gateway-paypal-express-checkout' );
|
20 |
$this->method_description = __( 'Allow customers to conveniently checkout directly with PayPal.', 'woocommerce-gateway-paypal-express-checkout' );
|
@@ -54,8 +53,8 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
54 |
$this->instant_payments = 'yes' === $this->get_option( 'instant_payments', 'no' );
|
55 |
$this->require_billing = 'yes' === $this->get_option( 'require_billing', 'no' );
|
56 |
$this->paymentaction = $this->get_option( 'paymentaction', 'sale' );
|
57 |
-
$this->logo_image_url = $this->get_option( 'logo_image_url' );
|
58 |
$this->subtotal_mismatch_behavior = $this->get_option( 'subtotal_mismatch_behavior', 'add' );
|
|
|
59 |
|
60 |
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
|
61 |
|
@@ -65,6 +64,11 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
65 |
$this->title = $this->get_option( 'title' );
|
66 |
$this->description = $this->get_option( 'description' );
|
67 |
}
|
|
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
}
|
70 |
|
@@ -93,7 +97,7 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
93 |
try {
|
94 |
return array(
|
95 |
'result' => 'success',
|
96 |
-
'redirect' => $checkout->start_checkout_from_checkout( $order_id ),
|
97 |
);
|
98 |
} catch ( PayPal_API_Exception $e ) {
|
99 |
wc_add_notice( $e->getMessage(), 'error' );
|
@@ -192,14 +196,6 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
192 |
* Do some additonal validation before saving options via the API.
|
193 |
*/
|
194 |
public function process_admin_options() {
|
195 |
-
// Validate logo.
|
196 |
-
$logo_image_url = wc_clean( $_POST['woocommerce_ppec_paypal_logo_image_url'] );
|
197 |
-
|
198 |
-
if ( ! empty( $logo_image_url ) && ! preg_match( '/https?:\/\/[a-zA-Z0-9][a-zA-Z0-9.-]+[a-zA-Z0-9](\/[a-zA-Z0-9.\/?&%#]*)?/', $logo_image_url ) ) {
|
199 |
-
WC_Admin_Settings::add_error( __( 'Error: The logo image URL you provided is not valid and cannot be used.', 'woocommerce-gateway-paypal-express-checkout' ) );
|
200 |
-
unset( $_POST['woocommerce_ppec_paypal_logo_image_url'] );
|
201 |
-
}
|
202 |
-
|
203 |
// If a certificate has been uploaded, read the contents and save that string instead.
|
204 |
if ( array_key_exists( 'woocommerce_ppec_paypal_api_certificate', $_FILES )
|
205 |
&& array_key_exists( 'tmp_name', $_FILES['woocommerce_ppec_paypal_api_certificate'] )
|
@@ -469,15 +465,90 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
469 |
}
|
470 |
|
471 |
/**
|
472 |
-
*
|
473 |
-
*
|
474 |
-
* @since 1.2.0
|
475 |
*
|
476 |
-
* @
|
|
|
|
|
|
|
477 |
*/
|
478 |
-
public function
|
479 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
480 |
|
481 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
482 |
}
|
483 |
}
|
14 |
*/
|
15 |
public function __construct() {
|
16 |
$this->has_fields = false;
|
|
|
17 |
$this->supports[] = 'refunds';
|
18 |
$this->method_title = __( 'PayPal Express Checkout', 'woocommerce-gateway-paypal-express-checkout' );
|
19 |
$this->method_description = __( 'Allow customers to conveniently checkout directly with PayPal.', 'woocommerce-gateway-paypal-express-checkout' );
|
53 |
$this->instant_payments = 'yes' === $this->get_option( 'instant_payments', 'no' );
|
54 |
$this->require_billing = 'yes' === $this->get_option( 'require_billing', 'no' );
|
55 |
$this->paymentaction = $this->get_option( 'paymentaction', 'sale' );
|
|
|
56 |
$this->subtotal_mismatch_behavior = $this->get_option( 'subtotal_mismatch_behavior', 'add' );
|
57 |
+
$this->use_ppc = false;
|
58 |
|
59 |
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
|
60 |
|
64 |
$this->title = $this->get_option( 'title' );
|
65 |
$this->description = $this->get_option( 'description' );
|
66 |
}
|
67 |
+
} else {
|
68 |
+
// Image upload.
|
69 |
+
wp_enqueue_media();
|
70 |
+
|
71 |
+
wp_enqueue_script( 'wc-gateway-ppec-settings', wc_gateway_ppec()->plugin_url . 'assets/js/wc-gateway-ppec-settings.js', array( 'jquery' ), wc_gateway_ppec()->version, true );
|
72 |
}
|
73 |
}
|
74 |
|
97 |
try {
|
98 |
return array(
|
99 |
'result' => 'success',
|
100 |
+
'redirect' => $checkout->start_checkout_from_checkout( $order_id, $this->use_ppc ),
|
101 |
);
|
102 |
} catch ( PayPal_API_Exception $e ) {
|
103 |
wc_add_notice( $e->getMessage(), 'error' );
|
196 |
* Do some additonal validation before saving options via the API.
|
197 |
*/
|
198 |
public function process_admin_options() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
// If a certificate has been uploaded, read the contents and save that string instead.
|
200 |
if ( array_key_exists( 'woocommerce_ppec_paypal_api_certificate', $_FILES )
|
201 |
&& array_key_exists( 'tmp_name', $_FILES['woocommerce_ppec_paypal_api_certificate'] )
|
465 |
}
|
466 |
|
467 |
/**
|
468 |
+
* Generate Image HTML.
|
|
|
|
|
469 |
*
|
470 |
+
* @param mixed $key
|
471 |
+
* @param mixed $data
|
472 |
+
* @since 1.5.0
|
473 |
+
* @return string
|
474 |
*/
|
475 |
+
public function generate_image_html( $key, $data ) {
|
476 |
+
$field_key = $this->get_field_key( $key );
|
477 |
+
$defaults = array(
|
478 |
+
'title' => '',
|
479 |
+
'disabled' => false,
|
480 |
+
'class' => '',
|
481 |
+
'css' => '',
|
482 |
+
'placeholder' => '',
|
483 |
+
'type' => 'text',
|
484 |
+
'desc_tip' => false,
|
485 |
+
'description' => '',
|
486 |
+
'custom_attributes' => array(),
|
487 |
+
);
|
488 |
+
|
489 |
+
$data = wp_parse_args( $data, $defaults );
|
490 |
+
$value = $this->get_option( $key );
|
491 |
+
|
492 |
+
// Hide show add remove buttons.
|
493 |
+
$maybe_hide_add_style = '';
|
494 |
+
$maybe_hide_remove_style = '';
|
495 |
+
|
496 |
+
// For backwards compatibility (customers that already have set a url)
|
497 |
+
$value_is_url = filter_var( $value, FILTER_VALIDATE_URL ) !== false;
|
498 |
+
|
499 |
+
if ( empty( $value ) || $value_is_url ) {
|
500 |
+
$maybe_hide_remove_style = 'display: none;';
|
501 |
+
} else {
|
502 |
+
$maybe_hide_add_style = 'display: none;';
|
503 |
+
}
|
504 |
|
505 |
+
ob_start();
|
506 |
+
?>
|
507 |
+
<tr valign="top">
|
508 |
+
<th scope="row" class="titledesc">
|
509 |
+
<?php echo $this->get_tooltip_html( $data ); ?>
|
510 |
+
<label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?></label>
|
511 |
+
</th>
|
512 |
+
|
513 |
+
<td class="image-component-wrapper">
|
514 |
+
<div class="image-preview-wrapper">
|
515 |
+
<?php
|
516 |
+
if ( ! $value_is_url ) {
|
517 |
+
echo wp_get_attachment_image( $value, 'thumbnail' );
|
518 |
+
} else {
|
519 |
+
echo sprintf( __( 'Already using URL as image: %s', 'woocommerce-gateway-paypal-express-checkout' ), $value );
|
520 |
+
}
|
521 |
+
?>
|
522 |
+
</div>
|
523 |
+
|
524 |
+
<button
|
525 |
+
class="button image_upload"
|
526 |
+
data-field-id="<?php echo esc_attr( $field_key ); ?>"
|
527 |
+
data-media-frame-title="<?php echo esc_attr( __( 'Select a image to upload', 'woocommerce-gateway-paypal-express-checkout' ) ); ?>"
|
528 |
+
data-media-frame-button="<?php echo esc_attr( __( 'Use this image', 'woocommerce-gateway-paypal-express-checkout' ) ); ?>"
|
529 |
+
data-add-image-text="<?php echo esc_attr( __( 'Add image', 'woocommerce-gateway-paypal-express-checkout' ) ); ?>"
|
530 |
+
style="<?php echo esc_attr( $maybe_hide_add_style ); ?>"
|
531 |
+
>
|
532 |
+
<?php echo esc_html__( 'Add image', 'woocommerce-gateway-paypal-express-checkout' ); ?>
|
533 |
+
</button>
|
534 |
+
|
535 |
+
<button
|
536 |
+
class="button image_remove"
|
537 |
+
data-field-id="<?php echo esc_attr( $field_key ); ?>"
|
538 |
+
style="<?php echo esc_attr( $maybe_hide_remove_style ); ?>"
|
539 |
+
>
|
540 |
+
<?php echo esc_html__( 'Remove image', 'woocommerce-gateway-paypal-express-checkout' ); ?>
|
541 |
+
</button>
|
542 |
+
|
543 |
+
<input type="hidden"
|
544 |
+
name="<?php echo esc_attr( $field_key ); ?>"
|
545 |
+
id="<?php echo esc_attr( $field_key ); ?>"
|
546 |
+
value="<?php echo esc_attr( $value ); ?>"
|
547 |
+
/>
|
548 |
+
</td>
|
549 |
+
</tr>
|
550 |
+
<?php
|
551 |
+
|
552 |
+
return ob_get_clean();
|
553 |
}
|
554 |
}
|
includes/class-wc-gateway-ppec-checkout-handler.php
CHANGED
@@ -49,7 +49,6 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
49 |
add_action( 'woocommerce_review_order_after_submit', array( $this, 'maybe_render_cancel_link' ) );
|
50 |
|
51 |
add_action( 'woocommerce_cart_shipping_packages', array( $this, 'maybe_add_shipping_information' ) );
|
52 |
-
add_filter( 'wc_checkout_params', array( $this, 'filter_wc_checkout_params' ), 10, 1 );
|
53 |
}
|
54 |
|
55 |
/**
|
@@ -60,6 +59,11 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
60 |
* sending anything back to the browser.
|
61 |
*/
|
62 |
public function init() {
|
|
|
|
|
|
|
|
|
|
|
63 |
if ( isset( $_GET['startcheckout'] ) && 'true' === $_GET['startcheckout'] ) {
|
64 |
ob_start();
|
65 |
}
|
@@ -186,22 +190,30 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
186 |
}
|
187 |
|
188 |
$shipping_details = $this->get_mapped_shipping_address( $checkout_details );
|
189 |
-
|
190 |
-
$_POST['shipping_' . $key] = $value;
|
191 |
-
}
|
192 |
|
193 |
-
$billing_details = $this->get_mapped_billing_address( $checkout_details );
|
194 |
// If the billing address is empty, copy address from shipping
|
195 |
if ( empty( $billing_details['address_1'] ) ) {
|
|
|
|
|
|
|
196 |
$copyable_keys = array( 'address_1', 'address_2', 'city', 'state', 'postcode', 'country' );
|
197 |
foreach ( $copyable_keys as $copyable_key ) {
|
198 |
if ( array_key_exists( $copyable_key, $shipping_details ) ) {
|
199 |
$billing_details[ $copyable_key ] = $shipping_details[ $copyable_key ];
|
200 |
}
|
201 |
}
|
|
|
|
|
|
|
202 |
}
|
203 |
-
|
204 |
-
|
|
|
|
|
|
|
|
|
|
|
205 |
}
|
206 |
}
|
207 |
|
@@ -237,7 +249,16 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
237 |
<?php if ( ! empty( $checkout_details->payer_details->phone_number ) ) : ?>
|
238 |
<li><strong><?php _e( 'Phone:', 'woocommerce-gateway-paypal-express-checkout' ) ?></strong> <?php echo esc_html( $checkout_details->payer_details->phone_number ); ?></li>
|
239 |
<?php elseif ( 'yes' === wc_gateway_ppec()->settings->require_phone_number ) : ?>
|
240 |
-
<li
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
<?php endif; ?>
|
242 |
</ul>
|
243 |
<?php
|
@@ -598,74 +619,78 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
598 |
}
|
599 |
|
600 |
/**
|
601 |
-
*
|
602 |
*
|
603 |
-
* @
|
604 |
-
*
|
605 |
*
|
606 |
* @throws PayPal_API_Exception
|
|
|
607 |
*/
|
608 |
-
|
609 |
$settings = wc_gateway_ppec()->settings;
|
610 |
$client = wc_gateway_ppec()->client;
|
611 |
-
$context_args = array(
|
612 |
-
'start_from' => 'cart',
|
613 |
-
);
|
614 |
$context_args['create_billing_agreement'] = $this->needs_billing_agreement_creation( $context_args );
|
615 |
|
616 |
$params = $client->get_set_express_checkout_params( $context_args );
|
617 |
$response = $client->set_express_checkout( $params );
|
|
|
618 |
if ( $client->response_has_success_status( $response ) ) {
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
'source' => 'cart',
|
623 |
-
'expires_in' => $settings->get_token_session_length(),
|
624 |
-
'use_paypal_credit' => wc_gateway_ppec_is_using_credit(),
|
625 |
-
)
|
626 |
-
);
|
627 |
|
628 |
-
return $settings->get_paypal_redirect_url( $response['TOKEN'], false );
|
629 |
} else {
|
630 |
throw new PayPal_API_Exception( $response );
|
631 |
}
|
632 |
}
|
633 |
|
634 |
/**
|
635 |
-
* Handler when buyer is checking out from
|
636 |
*
|
637 |
-
* @
|
638 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
639 |
*
|
640 |
-
* @
|
|
|
641 |
*
|
642 |
-
* @
|
643 |
*/
|
644 |
-
public function start_checkout_from_checkout( $order_id ) {
|
645 |
$settings = wc_gateway_ppec()->settings;
|
646 |
-
|
647 |
$context_args = array(
|
648 |
'start_from' => 'checkout',
|
649 |
'order_id' => $order_id,
|
650 |
);
|
651 |
-
$context_args['create_billing_agreement'] = $this->needs_billing_agreement_creation( $context_args );
|
652 |
|
653 |
-
$
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
'source' => 'order',
|
660 |
-
'order_id' => $order_id,
|
661 |
-
'expires_in' => $settings->get_token_session_length()
|
662 |
-
)
|
663 |
-
);
|
664 |
|
665 |
-
|
666 |
-
} else {
|
667 |
-
throw new PayPal_API_Exception( $response );
|
668 |
-
}
|
669 |
}
|
670 |
|
671 |
/**
|
@@ -881,15 +906,14 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
881 |
if ( empty( $_GET['woo-paypal-return'] ) || empty( $_GET['token'] ) || empty( $_GET['PayerID'] ) ) {
|
882 |
return $packages;
|
883 |
}
|
884 |
-
// Shipping details from PayPal
|
885 |
|
|
|
886 |
try {
|
887 |
$checkout_details = $this->get_checkout_details( wc_clean( $_GET['token'] ) );
|
888 |
} catch ( PayPal_API_Exception $e ) {
|
889 |
return $packages;
|
890 |
}
|
891 |
|
892 |
-
|
893 |
$destination = $this->get_mapped_shipping_address( $checkout_details );
|
894 |
|
895 |
$packages[0]['destination']['country'] = $destination['country'];
|
@@ -971,11 +995,16 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
971 |
*
|
972 |
* @since 1.4.7
|
973 |
*
|
974 |
-
* @param array
|
|
|
975 |
*
|
976 |
* @return string URL.
|
977 |
*/
|
978 |
-
public function filter_wc_checkout_params( $params ) {
|
|
|
|
|
|
|
|
|
979 |
$fields = array( 'woo-paypal-return', 'token', 'PayerID' );
|
980 |
|
981 |
$params['wc_ajax_url'] = remove_query_arg( 'wc-ajax', $params['wc_ajax_url'] );
|
49 |
add_action( 'woocommerce_review_order_after_submit', array( $this, 'maybe_render_cancel_link' ) );
|
50 |
|
51 |
add_action( 'woocommerce_cart_shipping_packages', array( $this, 'maybe_add_shipping_information' ) );
|
|
|
52 |
}
|
53 |
|
54 |
/**
|
59 |
* sending anything back to the browser.
|
60 |
*/
|
61 |
public function init() {
|
62 |
+
if ( version_compare( WC_VERSION, '3.3', '<' ) ) {
|
63 |
+
add_filter( 'wc_checkout_params', array( $this, 'filter_wc_checkout_params' ), 10, 1 );
|
64 |
+
} else {
|
65 |
+
add_filter( 'woocommerce_get_script_data', array( $this, 'filter_wc_checkout_params' ), 10, 2 );
|
66 |
+
}
|
67 |
if ( isset( $_GET['startcheckout'] ) && 'true' === $_GET['startcheckout'] ) {
|
68 |
ob_start();
|
69 |
}
|
190 |
}
|
191 |
|
192 |
$shipping_details = $this->get_mapped_shipping_address( $checkout_details );
|
193 |
+
$billing_details = $this->get_mapped_billing_address( $checkout_details );
|
|
|
|
|
194 |
|
|
|
195 |
// If the billing address is empty, copy address from shipping
|
196 |
if ( empty( $billing_details['address_1'] ) ) {
|
197 |
+
// Set flag so that WC copies billing to shipping
|
198 |
+
$_POST['ship_to_different_address'] = 0;
|
199 |
+
|
200 |
$copyable_keys = array( 'address_1', 'address_2', 'city', 'state', 'postcode', 'country' );
|
201 |
foreach ( $copyable_keys as $copyable_key ) {
|
202 |
if ( array_key_exists( $copyable_key, $shipping_details ) ) {
|
203 |
$billing_details[ $copyable_key ] = $shipping_details[ $copyable_key ];
|
204 |
}
|
205 |
}
|
206 |
+
} else {
|
207 |
+
// Shipping may be different from billing, so set flag to not copy address from billing
|
208 |
+
$_POST['ship_to_different_address'] = 1;
|
209 |
}
|
210 |
+
|
211 |
+
foreach ( $shipping_details as $key => $value ) {
|
212 |
+
$_POST[ 'shipping_' . $key ] = $value;
|
213 |
+
}
|
214 |
+
|
215 |
+
foreach ( $billing_details as $key => $value ) {
|
216 |
+
$_POST[ 'billing_' . $key ] = $value;
|
217 |
}
|
218 |
}
|
219 |
|
249 |
<?php if ( ! empty( $checkout_details->payer_details->phone_number ) ) : ?>
|
250 |
<li><strong><?php _e( 'Phone:', 'woocommerce-gateway-paypal-express-checkout' ) ?></strong> <?php echo esc_html( $checkout_details->payer_details->phone_number ); ?></li>
|
251 |
<?php elseif ( 'yes' === wc_gateway_ppec()->settings->require_phone_number ) : ?>
|
252 |
+
<li>
|
253 |
+
<?php
|
254 |
+
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
|
255 |
+
$fields = WC()->checkout->checkout_fields['billing'];
|
256 |
+
} else {
|
257 |
+
$fields = WC()->checkout->get_checkout_fields( 'billing' );
|
258 |
+
}
|
259 |
+
woocommerce_form_field( 'billing_phone', $fields['billing_phone'], WC()->checkout->get_value( 'billing_phone' ) );
|
260 |
+
?>
|
261 |
+
</li>
|
262 |
<?php endif; ?>
|
263 |
</ul>
|
264 |
<?php
|
619 |
}
|
620 |
|
621 |
/**
|
622 |
+
* Generic checkout handler.
|
623 |
*
|
624 |
+
* @param array $context_args Context parameters for checkout.
|
625 |
+
* @param array $session_data_args Session parameters (token pre-populated).
|
626 |
*
|
627 |
* @throws PayPal_API_Exception
|
628 |
+
* @return string Redirect URL.
|
629 |
*/
|
630 |
+
protected function start_checkout( $context_args, $session_data_args ) {
|
631 |
$settings = wc_gateway_ppec()->settings;
|
632 |
$client = wc_gateway_ppec()->client;
|
|
|
|
|
|
|
633 |
$context_args['create_billing_agreement'] = $this->needs_billing_agreement_creation( $context_args );
|
634 |
|
635 |
$params = $client->get_set_express_checkout_params( $context_args );
|
636 |
$response = $client->set_express_checkout( $params );
|
637 |
+
|
638 |
if ( $client->response_has_success_status( $response ) ) {
|
639 |
+
$session_data_args['token'] = $response['TOKEN'];
|
640 |
+
|
641 |
+
WC()->session->paypal = new WC_Gateway_PPEC_Session_Data( $session_data_args );
|
|
|
|
|
|
|
|
|
|
|
642 |
|
643 |
+
return $settings->get_paypal_redirect_url( $response['TOKEN'], false, $session_data_args['use_paypal_credit'] );
|
644 |
} else {
|
645 |
throw new PayPal_API_Exception( $response );
|
646 |
}
|
647 |
}
|
648 |
|
649 |
/**
|
650 |
+
* Handler when buyer is checking out from cart page.
|
651 |
*
|
652 |
+
* @return string Redirect URL.
|
653 |
+
*/
|
654 |
+
public function start_checkout_from_cart() {
|
655 |
+
$settings = wc_gateway_ppec()->settings;
|
656 |
+
|
657 |
+
$context_args = array(
|
658 |
+
'start_from' => 'cart',
|
659 |
+
);
|
660 |
+
|
661 |
+
$session_data_args = array(
|
662 |
+
'source' => 'cart',
|
663 |
+
'expires_in' => $settings->get_token_session_length(),
|
664 |
+
'use_paypal_credit' => wc_gateway_ppec_is_using_credit(),
|
665 |
+
);
|
666 |
+
|
667 |
+
return $this->start_checkout( $context_args, $session_data_args );
|
668 |
+
}
|
669 |
+
|
670 |
+
/**
|
671 |
+
* Handler when buyer is checking out from checkout page.
|
672 |
*
|
673 |
+
* @param int $order_id Order ID.
|
674 |
+
* @param bool $use_ppc Whether to use PayPal credit.
|
675 |
*
|
676 |
+
* @return string Redirect URL.
|
677 |
*/
|
678 |
+
public function start_checkout_from_checkout( $order_id, $use_ppc ) {
|
679 |
$settings = wc_gateway_ppec()->settings;
|
680 |
+
|
681 |
$context_args = array(
|
682 |
'start_from' => 'checkout',
|
683 |
'order_id' => $order_id,
|
684 |
);
|
|
|
685 |
|
686 |
+
$session_data_args = array(
|
687 |
+
'source' => 'order',
|
688 |
+
'order_id' => $order_id,
|
689 |
+
'expires_in' => $settings->get_token_session_length(),
|
690 |
+
'use_paypal_credit' => $use_ppc,
|
691 |
+
);
|
|
|
|
|
|
|
|
|
|
|
692 |
|
693 |
+
return $this->start_checkout( $context_args, $session_data_args );
|
|
|
|
|
|
|
694 |
}
|
695 |
|
696 |
/**
|
906 |
if ( empty( $_GET['woo-paypal-return'] ) || empty( $_GET['token'] ) || empty( $_GET['PayerID'] ) ) {
|
907 |
return $packages;
|
908 |
}
|
|
|
909 |
|
910 |
+
// Shipping details from PayPal
|
911 |
try {
|
912 |
$checkout_details = $this->get_checkout_details( wc_clean( $_GET['token'] ) );
|
913 |
} catch ( PayPal_API_Exception $e ) {
|
914 |
return $packages;
|
915 |
}
|
916 |
|
|
|
917 |
$destination = $this->get_mapped_shipping_address( $checkout_details );
|
918 |
|
919 |
$packages[0]['destination']['country'] = $destination['country'];
|
995 |
*
|
996 |
* @since 1.4.7
|
997 |
*
|
998 |
+
* @param array $params
|
999 |
+
* @param string $handle
|
1000 |
*
|
1001 |
* @return string URL.
|
1002 |
*/
|
1003 |
+
public function filter_wc_checkout_params( $params, $handle = '' ) {
|
1004 |
+
if ( 'wc-checkout' !== $handle && ! doing_action( 'wc_checkout_params' ) ) {
|
1005 |
+
return $params;
|
1006 |
+
}
|
1007 |
+
|
1008 |
$fields = array( 'woo-paypal-return', 'token', 'PayerID' );
|
1009 |
|
1010 |
$params['wc_ajax_url'] = remove_query_arg( 'wc-ajax', $params['wc_ajax_url'] );
|
includes/class-wc-gateway-ppec-client.php
CHANGED
@@ -248,8 +248,10 @@ class WC_Gateway_PPEC_Client {
|
|
248 |
$settings = wc_gateway_ppec()->settings;
|
249 |
|
250 |
$params = array();
|
251 |
-
$
|
252 |
-
$
|
|
|
|
|
253 |
$params['PAGESTYLE'] = $settings->page_style;
|
254 |
$params['BRANDNAME'] = $settings->get_brand_name();
|
255 |
$params['RETURNURL'] = $this->_get_return_url( $args );
|
@@ -794,13 +796,14 @@ class WC_Gateway_PPEC_Client {
|
|
794 |
* @return array Params for DoExpressCheckoutPayment call
|
795 |
*/
|
796 |
public function get_do_express_checkout_params( array $args ) {
|
797 |
-
$settings
|
798 |
-
$order
|
799 |
|
800 |
-
$old_wc
|
801 |
-
$order_id
|
802 |
-
$
|
803 |
-
$
|
|
|
804 |
|
805 |
$params = array(
|
806 |
'TOKEN' => $args['token'],
|
@@ -817,8 +820,9 @@ class WC_Gateway_PPEC_Client {
|
|
817 |
'PAYMENTREQUEST_0_PAYMENTACTION' => $settings->get_paymentaction(),
|
818 |
'PAYMENTREQUEST_0_INVNUM' => $settings->invoice_prefix . $order->get_order_number(),
|
819 |
'PAYMENTREQUEST_0_CUSTOM' => json_encode( array(
|
820 |
-
'order_id'
|
821 |
-
'
|
|
|
822 |
) ),
|
823 |
'NOSHIPPING' => WC_Gateway_PPEC_Plugin::needs_shipping() ? 0 : 1,
|
824 |
);
|
248 |
$settings = wc_gateway_ppec()->settings;
|
249 |
|
250 |
$params = array();
|
251 |
+
$logo_url_or_id = $settings->logo_image_url;
|
252 |
+
$header_url_or_id = $settings->header_image_url;
|
253 |
+
$params['LOGOIMG'] = filter_var( $logo_url_or_id, FILTER_VALIDATE_URL ) ? $logo_url_or_id : wp_get_attachment_image( $logo_url_or_id, 'thumbnail' );
|
254 |
+
$params['HDRIMG'] = filter_var( $header_url_or_id, FILTER_VALIDATE_URL ) ? $header_url_or_id : wp_get_attachment_image( $header_url_or_id, 'thumbnail' );
|
255 |
$params['PAGESTYLE'] = $settings->page_style;
|
256 |
$params['BRANDNAME'] = $settings->get_brand_name();
|
257 |
$params['RETURNURL'] = $this->_get_return_url( $args );
|
796 |
* @return array Params for DoExpressCheckoutPayment call
|
797 |
*/
|
798 |
public function get_do_express_checkout_params( array $args ) {
|
799 |
+
$settings = wc_gateway_ppec()->settings;
|
800 |
+
$order = wc_get_order( $args['order_id'] );
|
801 |
|
802 |
+
$old_wc = version_compare( WC_VERSION, '3.0', '<' );
|
803 |
+
$order_id = $old_wc ? $order->id : $order->get_id();
|
804 |
+
$order_number = $order->get_order_number();
|
805 |
+
$details = $this->_get_details_from_order( $order_id );
|
806 |
+
$order_key = $old_wc ? $order->order_key : $order->get_order_key();
|
807 |
|
808 |
$params = array(
|
809 |
'TOKEN' => $args['token'],
|
820 |
'PAYMENTREQUEST_0_PAYMENTACTION' => $settings->get_paymentaction(),
|
821 |
'PAYMENTREQUEST_0_INVNUM' => $settings->invoice_prefix . $order->get_order_number(),
|
822 |
'PAYMENTREQUEST_0_CUSTOM' => json_encode( array(
|
823 |
+
'order_id' => $order_id,
|
824 |
+
'order_number' => $order_number,
|
825 |
+
'order_key' => $order_key,
|
826 |
) ),
|
827 |
'NOSHIPPING' => WC_Gateway_PPEC_Plugin::needs_shipping() ? 0 : 1,
|
828 |
);
|
includes/class-wc-gateway-ppec-gateway-loader.php
CHANGED
@@ -19,6 +19,7 @@ class WC_Gateway_PPEC_Gateway_Loader {
|
|
19 |
require_once( $includes_path . 'abstracts/abstract-wc-gateway-ppec.php' );
|
20 |
|
21 |
require_once( $includes_path . 'class-wc-gateway-ppec-with-paypal.php' );
|
|
|
22 |
require_once( $includes_path . 'class-wc-gateway-ppec-with-paypal-addons.php' );
|
23 |
|
24 |
add_filter( 'woocommerce_payment_gateways', array( $this, 'payment_gateways' ) );
|
@@ -32,12 +33,18 @@ class WC_Gateway_PPEC_Gateway_Loader {
|
|
32 |
* @return array Payment methods
|
33 |
*/
|
34 |
public function payment_gateways( $methods ) {
|
|
|
|
|
35 |
if ( $this->can_use_addons() ) {
|
36 |
$methods[] = 'WC_Gateway_PPEC_With_PayPal_Addons';
|
37 |
} else {
|
38 |
$methods[] = 'WC_Gateway_PPEC_With_PayPal';
|
39 |
}
|
40 |
|
|
|
|
|
|
|
|
|
41 |
return $methods;
|
42 |
}
|
43 |
|
19 |
require_once( $includes_path . 'abstracts/abstract-wc-gateway-ppec.php' );
|
20 |
|
21 |
require_once( $includes_path . 'class-wc-gateway-ppec-with-paypal.php' );
|
22 |
+
require_once( $includes_path . 'class-wc-gateway-ppec-with-paypal-credit.php' );
|
23 |
require_once( $includes_path . 'class-wc-gateway-ppec-with-paypal-addons.php' );
|
24 |
|
25 |
add_filter( 'woocommerce_payment_gateways', array( $this, 'payment_gateways' ) );
|
33 |
* @return array Payment methods
|
34 |
*/
|
35 |
public function payment_gateways( $methods ) {
|
36 |
+
$settings = wc_gateway_ppec()->settings;
|
37 |
+
|
38 |
if ( $this->can_use_addons() ) {
|
39 |
$methods[] = 'WC_Gateway_PPEC_With_PayPal_Addons';
|
40 |
} else {
|
41 |
$methods[] = 'WC_Gateway_PPEC_With_PayPal';
|
42 |
}
|
43 |
|
44 |
+
if ( $settings->is_credit_enabled() ) {
|
45 |
+
$methods[] = 'WC_Gateway_PPEC_With_PayPal_Credit';
|
46 |
+
}
|
47 |
+
|
48 |
return $methods;
|
49 |
}
|
50 |
|
includes/class-wc-gateway-ppec-settings.php
CHANGED
@@ -157,10 +157,11 @@ class WC_Gateway_PPEC_Settings {
|
|
157 |
* to 'commit' which makes PayPal sets the button text
|
158 |
* to **Pay Now** ont the PayPal _Review your information_
|
159 |
* page.
|
|
|
160 |
*
|
161 |
* @return string PayPal redirect URL
|
162 |
*/
|
163 |
-
public function get_paypal_redirect_url( $token, $commit = false ) {
|
164 |
$url = 'https://www.';
|
165 |
|
166 |
if ( 'live' !== $this->environment ) {
|
@@ -173,6 +174,10 @@ class WC_Gateway_PPEC_Settings {
|
|
173 |
$url .= '&useraction=commit';
|
174 |
}
|
175 |
|
|
|
|
|
|
|
|
|
176 |
return $url;
|
177 |
}
|
178 |
|
@@ -345,12 +350,7 @@ class WC_Gateway_PPEC_Settings {
|
|
345 |
* @return bool Returns true if PayPal Credit is enabled and supported
|
346 |
*/
|
347 |
public function is_credit_enabled() {
|
348 |
-
$
|
349 |
-
if ( ! isset( $gateways['ppec_paypal'] ) ) {
|
350 |
-
return false;
|
351 |
-
}
|
352 |
-
|
353 |
-
return 'yes' === $this->credit_enabled && $gateways['ppec_paypal']->is_credit_supported();
|
354 |
}
|
355 |
|
356 |
/**
|
157 |
* to 'commit' which makes PayPal sets the button text
|
158 |
* to **Pay Now** ont the PayPal _Review your information_
|
159 |
* page.
|
160 |
+
* @param bool $ppc Whether to use PayPal credit.
|
161 |
*
|
162 |
* @return string PayPal redirect URL
|
163 |
*/
|
164 |
+
public function get_paypal_redirect_url( $token, $commit = false, $ppc = false ) {
|
165 |
$url = 'https://www.';
|
166 |
|
167 |
if ( 'live' !== $this->environment ) {
|
174 |
$url .= '&useraction=commit';
|
175 |
}
|
176 |
|
177 |
+
if ( $ppc ) {
|
178 |
+
$url .= '#/checkout/chooseCreditOffer';
|
179 |
+
}
|
180 |
+
|
181 |
return $url;
|
182 |
}
|
183 |
|
350 |
* @return bool Returns true if PayPal Credit is enabled and supported
|
351 |
*/
|
352 |
public function is_credit_enabled() {
|
353 |
+
return 'yes' === $this->credit_enabled && wc_gateway_ppec_is_credit_supported();
|
|
|
|
|
|
|
|
|
|
|
354 |
}
|
355 |
|
356 |
/**
|
includes/class-wc-gateway-ppec-with-paypal-credit.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit; // Exit if accessed directly
|
5 |
+
}
|
6 |
+
|
7 |
+
class WC_Gateway_PPEC_With_PayPal_Credit extends WC_Gateway_PPEC {
|
8 |
+
public function __construct() {
|
9 |
+
$this->icon = 'https://www.paypalobjects.com/webstatic/en_US/i/buttons/ppc-acceptance-small.png';
|
10 |
+
|
11 |
+
parent::__construct();
|
12 |
+
|
13 |
+
if ( ! is_admin() ) {
|
14 |
+
if ( wc_gateway_ppec()->checkout->is_started_from_checkout_page() ) {
|
15 |
+
$this->title = __( 'PayPal Credit', 'woocommerce-gateway-paypal-express-checkout' );;
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
if ( $this->is_available() ) {
|
20 |
+
$ipn_handler = new WC_Gateway_PPEC_IPN_Handler( $this );
|
21 |
+
$ipn_handler->handle();
|
22 |
+
}
|
23 |
+
|
24 |
+
$this->use_ppc = true;
|
25 |
+
}
|
26 |
+
}
|
includes/class-wc-gateway-ppec-with-paypal.php
CHANGED
@@ -6,7 +6,8 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
6 |
|
7 |
class WC_Gateway_PPEC_With_PayPal extends WC_Gateway_PPEC {
|
8 |
public function __construct() {
|
9 |
-
$this->id
|
|
|
10 |
|
11 |
parent::__construct();
|
12 |
|
6 |
|
7 |
class WC_Gateway_PPEC_With_PayPal extends WC_Gateway_PPEC {
|
8 |
public function __construct() {
|
9 |
+
$this->id = 'ppec_paypal';
|
10 |
+
$this->icon = 'https://www.paypalobjects.com/webstatic/en_US/i/buttons/pp-acceptance-small.png';
|
11 |
|
12 |
parent::__construct();
|
13 |
|
includes/functions.php
CHANGED
@@ -68,6 +68,19 @@ function wc_gateway_ppec_log( $message ) {
|
|
68 |
}
|
69 |
}
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
/**
|
72 |
* Checks whether buyer is checking out with PayPal Credit.
|
73 |
*
|
68 |
}
|
69 |
}
|
70 |
|
71 |
+
/**
|
72 |
+
* Whether PayPal credit is supported.
|
73 |
+
*
|
74 |
+
* @since 1.5.0
|
75 |
+
*
|
76 |
+
* @return bool Returns true if PayPal credit is supported
|
77 |
+
*/
|
78 |
+
function wc_gateway_ppec_is_credit_supported() {
|
79 |
+
$base = wc_get_base_location();
|
80 |
+
|
81 |
+
return 'US' === $base['country'];
|
82 |
+
}
|
83 |
+
|
84 |
/**
|
85 |
* Checks whether buyer is checking out with PayPal Credit.
|
86 |
*
|
includes/settings/settings-ppec.php
CHANGED
@@ -44,7 +44,7 @@ if ( $enable_ips && $needs_sandbox_creds ) {
|
|
44 |
}
|
45 |
|
46 |
$credit_enabled_label = __( 'Enable PayPal Credit', 'woocommerce-gateway-paypal-express-checkout' );
|
47 |
-
if ( !
|
48 |
$credit_enabled_label .= '<p><em>' . __( 'This option is disabled. Currently PayPal Credit only available for U.S. merchants.', 'woocommerce-gateway-paypal-express-checkout' ) . '</em></p>';
|
49 |
}
|
50 |
|
@@ -281,7 +281,7 @@ return array(
|
|
281 |
),
|
282 |
'logo_image_url' => array(
|
283 |
'title' => __( 'Logo Image (190×60)', 'woocommerce-gateway-paypal-express-checkout' ),
|
284 |
-
'type' => '
|
285 |
'description' => __( 'If you want PayPal to co-brand the checkout page with your logo, enter the URL of your logo image here.<br/>The image must be no larger than 190x60, GIF, PNG, or JPG format, and should be served over HTTPS.', 'woocommerce-gateway-paypal-express-checkout' ),
|
286 |
'default' => '',
|
287 |
'desc_tip' => true,
|
@@ -289,7 +289,7 @@ return array(
|
|
289 |
),
|
290 |
'header_image_url' => array(
|
291 |
'title' => __( 'Header Image (750×90)', 'woocommerce-gateway-paypal-express-checkout' ),
|
292 |
-
'type' => '
|
293 |
'description' => __( 'If you want PayPal to co-brand the checkout page with your header, enter the URL of your header image here.<br/>The image must be no larger than 750x90, GIF, PNG, or JPG format, and should be served over HTTPS.', 'woocommerce-gateway-paypal-express-checkout' ),
|
294 |
'default' => '',
|
295 |
'desc_tip' => true,
|
@@ -319,7 +319,7 @@ return array(
|
|
319 |
'title' => __( 'Enable PayPal Credit', 'woocommerce-gateway-paypal-express-checkout' ),
|
320 |
'type' => 'checkbox',
|
321 |
'label' => $credit_enabled_label,
|
322 |
-
'disabled' => !
|
323 |
'default' => 'no',
|
324 |
'desc_tip' => true,
|
325 |
'description' => __( 'This enables PayPal Credit, which displays a PayPal Credit button next to the Express Checkout button. PayPal Express Checkout lets you give customers access to financing through PayPal Credit® - at no additional cost to you. You get paid up front, even though customers have more time to pay. A pre-integrated payment button shows up next to the PayPal Button, and lets customers pay quickly with PayPal Credit®.', 'woocommerce-gateway-paypal-express-checkout' ),
|
44 |
}
|
45 |
|
46 |
$credit_enabled_label = __( 'Enable PayPal Credit', 'woocommerce-gateway-paypal-express-checkout' );
|
47 |
+
if ( ! wc_gateway_ppec_is_credit_supported() ) {
|
48 |
$credit_enabled_label .= '<p><em>' . __( 'This option is disabled. Currently PayPal Credit only available for U.S. merchants.', 'woocommerce-gateway-paypal-express-checkout' ) . '</em></p>';
|
49 |
}
|
50 |
|
281 |
),
|
282 |
'logo_image_url' => array(
|
283 |
'title' => __( 'Logo Image (190×60)', 'woocommerce-gateway-paypal-express-checkout' ),
|
284 |
+
'type' => 'image',
|
285 |
'description' => __( 'If you want PayPal to co-brand the checkout page with your logo, enter the URL of your logo image here.<br/>The image must be no larger than 190x60, GIF, PNG, or JPG format, and should be served over HTTPS.', 'woocommerce-gateway-paypal-express-checkout' ),
|
286 |
'default' => '',
|
287 |
'desc_tip' => true,
|
289 |
),
|
290 |
'header_image_url' => array(
|
291 |
'title' => __( 'Header Image (750×90)', 'woocommerce-gateway-paypal-express-checkout' ),
|
292 |
+
'type' => 'image',
|
293 |
'description' => __( 'If you want PayPal to co-brand the checkout page with your header, enter the URL of your header image here.<br/>The image must be no larger than 750x90, GIF, PNG, or JPG format, and should be served over HTTPS.', 'woocommerce-gateway-paypal-express-checkout' ),
|
294 |
'default' => '',
|
295 |
'desc_tip' => true,
|
319 |
'title' => __( 'Enable PayPal Credit', 'woocommerce-gateway-paypal-express-checkout' ),
|
320 |
'type' => 'checkbox',
|
321 |
'label' => $credit_enabled_label,
|
322 |
+
'disabled' => ! wc_gateway_ppec_is_credit_supported(),
|
323 |
'default' => 'no',
|
324 |
'desc_tip' => true,
|
325 |
'description' => __( 'This enables PayPal Credit, which displays a PayPal Credit button next to the Express Checkout button. PayPal Express Checkout lets you give customers access to financing through PayPal Credit® - at no additional cost to you. You get paid up front, even though customers have more time to pay. A pre-integrated payment button shows up next to the PayPal Button, and lets customers pay quickly with PayPal Credit®.', 'woocommerce-gateway-paypal-express-checkout' ),
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: automattic, woothemes, akeda, dwainm, royho, allendav, slash1andy,
|
|
3 |
Tags: ecommerce, e-commerce, commerce, woothemes, wordpress ecommerce, store, sales, sell, shop, shopping, cart, checkout, configurable, paypal
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 4.9.0
|
6 |
-
Stable tag: 1.
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
@@ -85,6 +85,12 @@ https://gist.github.com/mikejolley/ad2ecc286c9ad6cefbb7065ba6dfef48
|
|
85 |
|
86 |
== Changelog ==
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
= 1.4.7 =
|
89 |
* Fix - Issue with missing paypal session information.
|
90 |
* Fix - Dependency error when using LibreSSL.
|
3 |
Tags: ecommerce, e-commerce, commerce, woothemes, wordpress ecommerce, store, sales, sell, shop, shopping, cart, checkout, configurable, paypal
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 4.9.0
|
6 |
+
Stable tag: 1.5.0
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
85 |
|
86 |
== Changelog ==
|
87 |
|
88 |
+
= 1.5.0 =
|
89 |
+
* Add - PayPal credit is now available on checkout.
|
90 |
+
* Fix - WC 3.3 compatibility.
|
91 |
+
* Add - Ability to select existing / upload new image(s) for logo / header fields.
|
92 |
+
* Fix - Shipping address overriden when PayPal returns billing address.
|
93 |
+
|
94 |
= 1.4.7 =
|
95 |
* Fix - Issue with missing paypal session information.
|
96 |
* Fix - Dependency error when using LibreSSL.
|
woocommerce-gateway-paypal-express-checkout.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: WooCommerce PayPal Express Checkout Gateway
|
4 |
* Plugin URI: https://woocommerce.com/products/woocommerce-gateway-paypal-express-checkout/
|
5 |
* Description: A payment gateway for PayPal Express Checkout (https://www.paypal.com/us/webapps/mpp/express-checkout).
|
6 |
-
* Version: 1.
|
7 |
* Author: WooCommerce
|
8 |
* Author URI: https://woocommerce.com
|
9 |
* Copyright: © 2017 WooCommerce / PayPal.
|
@@ -11,7 +11,7 @@
|
|
11 |
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
12 |
* Text Domain: woocommerce-gateway-paypal-express-checkout
|
13 |
* Domain Path: /languages
|
14 |
-
* WC tested up to: 3.
|
15 |
* WC requires at least: 2.6
|
16 |
*/
|
17 |
/**
|
@@ -27,7 +27,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
27 |
exit; // Exit if accessed directly
|
28 |
}
|
29 |
|
30 |
-
define( 'WC_GATEWAY_PPEC_VERSION', '1.
|
31 |
|
32 |
/**
|
33 |
* Return instance of WC_Gateway_PPEC_Plugin.
|
3 |
* Plugin Name: WooCommerce PayPal Express Checkout Gateway
|
4 |
* Plugin URI: https://woocommerce.com/products/woocommerce-gateway-paypal-express-checkout/
|
5 |
* Description: A payment gateway for PayPal Express Checkout (https://www.paypal.com/us/webapps/mpp/express-checkout).
|
6 |
+
* Version: 1.5.0
|
7 |
* Author: WooCommerce
|
8 |
* Author URI: https://woocommerce.com
|
9 |
* Copyright: © 2017 WooCommerce / PayPal.
|
11 |
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
12 |
* Text Domain: woocommerce-gateway-paypal-express-checkout
|
13 |
* Domain Path: /languages
|
14 |
+
* WC tested up to: 3.3
|
15 |
* WC requires at least: 2.6
|
16 |
*/
|
17 |
/**
|
27 |
exit; // Exit if accessed directly
|
28 |
}
|
29 |
|
30 |
+
define( 'WC_GATEWAY_PPEC_VERSION', '1.5.0' );
|
31 |
|
32 |
/**
|
33 |
* Return instance of WC_Gateway_PPEC_Plugin.
|