Option to choose EITHER PDT or IPN

Closes #7208
This commit is contained in:
Mike Jolley 2015-01-26 12:58:33 +00:00
parent 0b252d03f4
commit 7e1ca1d3a3
3 changed files with 59 additions and 37 deletions

View File

@ -0,0 +1,11 @@
jQuery(function( $ ){
$('#woocommerce_paypal_payment_notification_handler').change(function(){
if ( $(this).val() === 'IPN' ) {
$('#woocommerce_paypal_receiver_email').closest('tr').show();
$('#woocommerce_paypal_identity_token').closest('tr').hide();
} else {
$('#woocommerce_paypal_receiver_email').closest('tr').hide();
$('#woocommerce_paypal_identity_token').closest('tr').show();
}
}).change();
});

View File

@ -36,21 +36,23 @@ class WC_Gateway_Paypal extends WC_Payment_Gateway {
$this->init_settings(); $this->init_settings();
// Define user set variables // Define user set variables
$this->title = $this->get_option( 'title' ); $this->title = $this->get_option( 'title' );
$this->description = $this->get_option( 'description' ); $this->description = $this->get_option( 'description' );
$this->testmode = 'yes' === $this->get_option( 'testmode', 'no' ); $this->testmode = 'yes' === $this->get_option( 'testmode', 'no' );
$this->email = $this->get_option( 'email' ); $this->email = $this->get_option( 'email' );
$this->receiver_email = $this->get_option( 'receiver_email', $this->email ); $this->receiver_email = $this->get_option( 'receiver_email', $this->email );
$this->identity_token = $this->get_option( 'identity_token' );
$this->payment_notification_handler = $this->get_option( 'payment_notification_handler', ( $this->identity_token ? 'PDT' : 'IPN' ) );
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
if ( ! $this->is_valid_for_use() ) { if ( ! $this->is_valid_for_use() ) {
$this->enabled = 'no'; $this->enabled = 'no';
} else { } else {
include_once( 'includes/class-wc-gateway-paypal-ipn-handler.php' ); if ( 'IPN' === $this->payment_notification_handler ) {
$ipn_handler = new WC_Gateway_Paypal_IPN_Handler( $this->testmode, $this->receiver_email ); include_once( 'includes/class-wc-gateway-paypal-ipn-handler.php' );
$ipn_handler = new WC_Gateway_Paypal_IPN_Handler( $this->testmode, $this->receiver_email );
if ( $identity_token = $this->get_option( 'identity_token' ) ) { } else {
include_once( 'includes/class-wc-gateway-paypal-pdt-handler.php' ); include_once( 'includes/class-wc-gateway-paypal-pdt-handler.php' );
$pdt_handler = new WC_Gateway_Paypal_PDT_Handler( $this->testmode, $identity_token ); $pdt_handler = new WC_Gateway_Paypal_PDT_Handler( $this->testmode, $identity_token );
} }
@ -184,6 +186,8 @@ class WC_Gateway_Paypal extends WC_Payment_Gateway {
* @since 1.0.0 * @since 1.0.0
*/ */
public function admin_options() { public function admin_options() {
wp_enqueue_script( 'wc-paypal-settings', WC_HTTPS::force_https_url( WC()->plugin_url() . '/includes/gateways/paypal/assets/js/paypal-settings.js' ), array( 'jquery' ), WC_VERSION, true );
if ( $this->is_valid_for_use() ) { if ( $this->is_valid_for_use() ) {
parent::admin_options(); parent::admin_options();
} else { } else {

View File

@ -37,7 +37,7 @@ return array(
'placeholder' => 'you@youremail.com' 'placeholder' => 'you@youremail.com'
), ),
'testmode' => array( 'testmode' => array(
'title' => __( 'PayPal sandbox', 'woocommerce' ), 'title' => __( 'PayPal Sandbox', 'woocommerce' ),
'type' => 'checkbox', 'type' => 'checkbox',
'label' => __( 'Enable PayPal sandbox', 'woocommerce' ), 'label' => __( 'Enable PayPal sandbox', 'woocommerce' ),
'default' => 'no', 'default' => 'no',
@ -50,30 +50,23 @@ return array(
'default' => 'no', 'default' => 'no',
'description' => sprintf( __( 'Log PayPal events, such as IPN requests, inside <code>%s</code>', 'woocommerce' ), wc_get_log_file_path( 'paypal' ) ) 'description' => sprintf( __( 'Log PayPal events, such as IPN requests, inside <code>%s</code>', 'woocommerce' ), wc_get_log_file_path( 'paypal' ) )
), ),
'shipping' => array(
'title' => __( 'Shipping options', 'woocommerce' ),
'type' => 'title',
'description' => '',
),
'send_shipping' => array(
'title' => __( 'Shipping details', 'woocommerce' ),
'type' => 'checkbox',
'label' => __( 'Send shipping details to PayPal instead of billing.', 'woocommerce' ),
'description' => __( 'PayPal allows us to send 1 address. If you are using PayPal for shipping labels you may prefer to send the shipping address rather than billing.', 'woocommerce' ),
'default' => 'no'
),
'address_override' => array(
'title' => __( 'Address override', 'woocommerce' ),
'type' => 'checkbox',
'label' => __( 'Enable "address_override" to prevent address information from being changed.', 'woocommerce' ),
'description' => __( 'PayPal verifies addresses therefore this setting can cause errors (we recommend keeping it disabled).', 'woocommerce' ),
'default' => 'no'
),
'advanced' => array( 'advanced' => array(
'title' => __( 'Advanced options', 'woocommerce' ), 'title' => __( 'Advanced options', 'woocommerce' ),
'type' => 'title', 'type' => 'title',
'description' => '', 'description' => '',
), ),
'payment_notification_handler' => array(
'title' => __( 'Payment Notification Handler', 'woocommerce' ),
'type' => 'select',
'class' => 'wc-enhanced-select',
'description' => __( 'Choose either IPN or PDT. This will be used to update orders after payment.', 'woocommerce' ),
'default' => 'IPN',
'desc_tip' => true,
'options' => array(
'IPN' => __( 'PayPal IPN', 'woocommerce' ),
'PDT' => __( 'Payment Data Transfer (PDT)', 'woocommerce' )
)
),
'receiver_email' => array( 'receiver_email' => array(
'title' => __( 'Receiver Email', 'woocommerce' ), 'title' => __( 'Receiver Email', 'woocommerce' ),
'type' => 'email', 'type' => 'email',
@ -82,6 +75,14 @@ return array(
'desc_tip' => true, 'desc_tip' => true,
'placeholder' => 'you@youremail.com' 'placeholder' => 'you@youremail.com'
), ),
'identity_token' => array(
'title' => __( 'PayPal Identity Token', 'woocommerce' ),
'type' => 'text',
'description' => __( 'Optionally enable "Payment Data Transfer" (Profile > Website Payment Preferences) and then copy your identity token here. This will allow payments to be verified without the need for PayPal IPN.', 'woocommerce' ),
'default' => '',
'desc_tip' => true,
'placeholder' => ''
),
'invoice_prefix' => array( 'invoice_prefix' => array(
'title' => __( 'Invoice Prefix', 'woocommerce' ), 'title' => __( 'Invoice Prefix', 'woocommerce' ),
'type' => 'text', 'type' => 'text',
@ -89,6 +90,20 @@ return array(
'default' => 'WC-', 'default' => 'WC-',
'desc_tip' => true, 'desc_tip' => true,
), ),
'send_shipping' => array(
'title' => __( 'Shipping Details', 'woocommerce' ),
'type' => 'checkbox',
'label' => __( 'Send shipping details to PayPal instead of billing.', 'woocommerce' ),
'description' => __( 'PayPal allows us to send one address. If you are using PayPal for shipping labels you may prefer to send the shipping address rather than billing.', 'woocommerce' ),
'default' => 'no'
),
'address_override' => array(
'title' => __( 'Address Override', 'woocommerce' ),
'type' => 'checkbox',
'label' => __( 'Enable "address_override" to prevent address information from being changed.', 'woocommerce' ),
'description' => __( 'PayPal verifies addresses therefore this setting can cause errors (we recommend keeping it disabled).', 'woocommerce' ),
'default' => 'no'
),
'paymentaction' => array( 'paymentaction' => array(
'title' => __( 'Payment Action', 'woocommerce' ), 'title' => __( 'Payment Action', 'woocommerce' ),
'type' => 'select', 'type' => 'select',
@ -109,14 +124,6 @@ return array(
'desc_tip' => true, 'desc_tip' => true,
'placeholder' => __( 'Optional', 'woocommerce' ) 'placeholder' => __( 'Optional', 'woocommerce' )
), ),
'identity_token' => array(
'title' => __( 'PayPal Identity Token', 'woocommerce' ),
'type' => 'text',
'description' => __( 'Optionally enable "Payment Data Transfer" (Profile > Website Payment Preferences) and then copy your identity token here. This will allow payments to be verified without the need for PayPal IPN.', 'woocommerce' ),
'default' => '',
'desc_tip' => true,
'placeholder' => __( 'Optional', 'woocommerce' )
),
'api_details' => array( 'api_details' => array(
'title' => __( 'API Credentials', 'woocommerce' ), 'title' => __( 'API Credentials', 'woocommerce' ),
'type' => 'title', 'type' => 'title',