当前位置: 首页>>代码示例>>PHP>>正文


PHP WC_Subscriptions_Order::get_subscription_length方法代码示例

本文整理汇总了PHP中WC_Subscriptions_Order::get_subscription_length方法的典型用法代码示例。如果您正苦于以下问题:PHP WC_Subscriptions_Order::get_subscription_length方法的具体用法?PHP WC_Subscriptions_Order::get_subscription_length怎么用?PHP WC_Subscriptions_Order::get_subscription_length使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WC_Subscriptions_Order的用法示例。


在下文中一共展示了WC_Subscriptions_Order::get_subscription_length方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: calculate_subscription_expiration_date

 /**
  * Takes a subscription key and calculates the date on which the subscription is scheduled to expire 
  * or 0 if it will never expire.
  *
  * @param $subscription_key string A subscription key of the form created by @see self::get_subscription_key()
  * @param $user_id int The ID of the user who owns the subscriptions. Although this parameter is optional, if you have the User ID you should pass it to improve performance.
  * @param $type string (optional) The format for the Either 'mysql' or 'timestamp'.
  * @since 1.1
  */
 public static function calculate_subscription_expiration_date($subscription_key, $user_id = '', $type = 'mysql')
 {
     $subscription = self::get_subscription($subscription_key, $user_id);
     if (empty($subscription)) {
         $expiration_date = 0;
     } else {
         $order = new WC_Order($subscription['order_id']);
         $subscription_period = WC_Subscriptions_Order::get_subscription_period($order, $subscription['product_id']);
         $subscription_length = WC_Subscriptions_Order::get_subscription_length($order, $subscription['product_id']);
         $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order, $subscription['product_id']);
         $subscription_trial_length = WC_Subscriptions_Order::get_subscription_trial_length($order, $subscription['product_id']);
         $subscription_trial_period = WC_Subscriptions_Order::get_subscription_trial_period($order, $subscription['product_id']);
         if ($subscription_length > 0) {
             if (isset($subscription['start_date']) && !empty($subscription['start_date'])) {
                 $start_date = $subscription['start_date'];
             } elseif (!empty($order->order_date)) {
                 $start_date = $order->order_date - get_option('gmt_offset') * 3600;
             } else {
                 date('Y-m-d H:i:s');
             }
             $expiration_date = strtotime("+ {$subscription_trial_length} {$subscription_trial_period}s", strtotime($start_date));
             $expiration_date = strtotime("+ {$subscription_length} {$subscription_period}s", $expiration_date);
         } else {
             $expiration_date = 0;
         }
     }
     $expiration_date = 'mysql' == $type && 0 != $expiration_date ? date('Y-m-d H:i:s', $expiration_date) : $expiration_date;
     return apply_filters('woocommerce_subscription_calculated_expiration_date', $expiration_date, $subscription_key, $user_id);
 }
开发者ID:edelkevis,项目名称:git-plus-wordpress,代码行数:38,代码来源:class-wc-subscriptions-manager.php

示例2: calculate_subscription_expiration_date

 /**
  * Takes a subscription key and calculates the date on which the subscription is scheduled to expire 
  * or 0 if it will never expire.
  *
  * @param $subscription_key string A subscription key of the form created by @see self::get_subscription_key()
  * @param $user_id int The ID of the user who owns the subscriptions. Although this parameter is optional, if you have the User ID you should pass it to improve performance.
  * @param $type string (optional) The format for the Either 'mysql' or 'timestamp'.
  * @since 1.1
  */
 public static function calculate_subscription_expiration_date($subscription_key, $user_id = '', $type = 'mysql')
 {
     $subscription = self::get_subscription($subscription_key, $user_id);
     if (empty($subscription)) {
         $expiration_date = 0;
     } else {
         $order = new WC_Order($subscription['order_id']);
         $subscription_period = WC_Subscriptions_Order::get_subscription_period($order, $subscription['product_id']);
         $subscription_length = WC_Subscriptions_Order::get_subscription_length($order, $subscription['product_id']);
         $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order, $subscription['product_id']);
         if ($subscription_length > 0) {
             // If there is a free trial period, calculate the expiration from the end of that, otherwise, use the subscription start date or order date
             if (isset($subscription['trial_expiry_date']) && !empty($subscription['trial_expiry_date'])) {
                 $start_date = $subscription['trial_expiry_date'];
             } elseif (WC_Subscriptions_Order::get_subscription_trial_length($order, $subscription['product_id']) > 0) {
                 $start_date = self::calculate_trial_expiration_date($subscription_key, $user_id);
             } elseif (isset($subscription['start_date']) && !empty($subscription['start_date'])) {
                 $start_date = $subscription['start_date'];
             } elseif (!empty($order->order_date)) {
                 $start_date = get_gmt_from_date($order->order_date);
             } else {
                 $start_date = gmdate('Y-m-d H:i:s');
             }
             if ('month' == $subscription_period) {
                 $expiration_date = WC_Subscriptions::add_months(strtotime($start_date), $subscription_length);
             } else {
                 // Safe to just add the billing periods
                 $expiration_date = strtotime("+ {$subscription_length} {$subscription_period}s", strtotime($start_date));
             }
         } else {
             $expiration_date = 0;
         }
     }
     $expiration_date = 'mysql' == $type && 0 != $expiration_date ? date('Y-m-d H:i:s', $expiration_date) : $expiration_date;
     return apply_filters('woocommerce_subscription_calculated_expiration_date', $expiration_date, $subscription_key, $user_id);
 }
开发者ID:bulats,项目名称:chef,代码行数:45,代码来源:class-wc-subscriptions-manager.php

示例3: get_next_payment_date

 /**
  * Takes a subscription key and returns the date on which the next recurring payment is to be billed, if any.
  *
  * @param string $subscription_key A subscription key of the form created by @see self::get_subscription_key()
  * @param int $user_id The ID of the user who owns the subscriptions. Although this parameter is optional, if you have the User ID you should pass it to improve performance.
  * @param string $type (optional) The format for the Either 'mysql' or 'timestamp'.
  * @return mixed If there is no future payment set, returns 0, otherwise it will return a date of the next payment in the form specified by $type
  * @since 1.2
  */
 public static function get_next_payment_date($subscription_key, $user_id = '', $type = 'mysql')
 {
     if (empty($user_id)) {
         $user_id = self::get_user_id_from_subscription_key($subscription_key);
     }
     $subscription = self::get_subscription($subscription_key);
     $next_payment_date = wp_next_scheduled('scheduled_subscription_payment', array('user_id' => (int) $user_id, 'subscription_key' => $subscription_key));
     // No date scheduled, try calculating it (if the length of the subscription hasn't been reached)
     $subscription_length = WC_Subscriptions_Order::get_subscription_length($subscription['order_id'], $subscription['product_id']);
     if (false === $next_payment_date && 'active' == $subscription['status'] && (0 == $subscription_length || self::get_subscriptions_completed_payment_count($subscription_key) < $subscription_length)) {
         $next_payment_date = self::calculate_next_payment_date($subscription_key, $user_id, 'timestamp');
         // Repair the schedule next payment date
         if ($next_payment_date != 0) {
             self::set_next_payment_date($subscription_key, $user_id, $next_payment_date);
             self::update_wp_cron_lock($subscription_key, $next_payment_date - gmdate('U'), $user_id);
         }
     }
     $next_payment_date = 'mysql' == $type && 0 != $next_payment_date ? date('Y-m-d H:i:s', $next_payment_date) : $next_payment_date;
     return apply_filters('woocommerce_subscription_next_payment_date', $next_payment_date, $subscription_key, $user_id, $type);
 }
开发者ID:jgabrielfreitas,项目名称:MultipagosTestesAPP,代码行数:29,代码来源:class-wc-subscriptions-manager.php

示例4: get_subscription_expiration_date

 /**
  * Takes a subscription key and returns the date on which the subscription is scheduled to expire 
  * or 0 if it is cancelled, expired, or never going to expire.
  * 
  * @param $subscription_key string A subscription key of the form created by @see self::get_subscription_key()
  * @param $user_id int The ID of the user who owns the subscriptions. Although this parameter is optional, if you have the User ID you should pass it to improve performance.
  * @since 1.1
  */
 public static function get_subscription_expiration_date($subscription_key, $user_id = '')
 {
     $subscription = self::get_subscription($subscription_key, $user_id);
     if (empty($subscription)) {
         $expiration_date = 0;
     } else {
         $order = new WC_Order($subscription['order_id']);
         $subscription_period = WC_Subscriptions_Order::get_subscription_period($order, $subscription['product_id']);
         $subscription_length = WC_Subscriptions_Order::get_subscription_length($order, $subscription['product_id']);
         if ($subscription_length > 0) {
             $order_date = empty($order->order_date) ? date('Y-m-d H:i:s') : $order->order_date;
             $expiration_date = date('Y-m-d H:i:s', strtotime("{$order_date} + {$subscription_length} {$subscription_period}s"));
         } else {
             $expiration_date = 0;
         }
     }
     return apply_filters('woocommerce_subscription_expiration_date', $expiration_date, $subscription_key, $user_id);
 }
开发者ID:picassentviu,项目名称:AMMPro,代码行数:26,代码来源:class-wc-subscriptions-manager.php

示例5: set_switch_details_in_cart

 /**
  * When a subscription switch is added to the cart, store a record of pertinent meta about the switch.
  *
  * @since 1.4
  */
 public static function set_switch_details_in_cart($cart_item_data, $product_id, $variation_id)
 {
     global $woocommerce;
     if (!isset($_GET['switch-subscription'])) {
         return $cart_item_data;
     }
     $subscription = WC_Subscriptions_Manager::get_subscription($_GET['switch-subscription']);
     // Requesting a switch for someone elses subscription
     if (!WC_Subscriptions_Manager::user_owns_subscription($_GET['switch-subscription'])) {
         WC_Subscriptions::add_notice(__('You can not switch this subscription. It appears you do not own the subscription.', 'woocommerce-subscriptions'), 'error');
         $woocommerce->cart->empty_cart(true);
         wp_redirect(get_permalink($subscription['product_id']));
         exit;
     }
     // Else it's a valid switch
     $product = get_product($subscription['product_id']);
     $child_products = 0 !== $product->post->post_parent ? get_product($product->post->post_parent)->get_children() : array();
     if ($product_id != $subscription['product_id'] && !in_array($subscription['product_id'], $child_products)) {
         return $cart_item_data;
     }
     $next_payment_timestamp = WC_Subscriptions_Manager::get_next_payment_date($_GET['switch-subscription'], get_current_user_id(), 'timestamp');
     // If there are no more payments due on the subscription, because we're in the last billing period, we need to use the subscription's expiration date, not next payment date
     if (false == $next_payment_timestamp && WC_Subscriptions_Manager::get_subscriptions_completed_payment_count($_GET['switch-subscription']) >= WC_Subscriptions_Order::get_subscription_length($subscription['order_id'], $subscription['product_id'])) {
         $next_payment_timestamp = WC_Subscriptions_Manager::get_subscription_expiration_date($_GET['switch-subscription'], get_current_user_id(), 'timestamp');
     }
     $cart_item_data['subscription_switch'] = array('subscription_key' => $_GET['switch-subscription'], 'next_payment_timestamp' => $next_payment_timestamp, 'upgraded_or_downgraded' => '');
     return $cart_item_data;
 }
开发者ID:Ezyva2015,项目名称:SMSF-Academy-Wordpress,代码行数:33,代码来源:class-wc-subscriptions-switcher.php

示例6: paypal_standard_subscription_args

 /**
  * Override the default PayPal standard args in WooCommerce for subscription purchases.
  *
  * Based on the HTML Variables documented here: https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/#id08A6HI00JQU
  *
  * @since 1.0
  */
 public static function paypal_standard_subscription_args($paypal_args)
 {
     extract(self::get_order_id_and_key($paypal_args));
     if (WC_Subscriptions_Order::order_contains_subscription($order_id) && 'yes' !== get_option(WC_Subscriptions_Admin::$option_prefix . '_turn_off_automatic_payments', 'no')) {
         $order = new WC_Order($order_id);
         $order_items = $order->get_items();
         // Only one subscription allowed in the cart when PayPal Standard is active
         $product = $order->get_product_from_item(array_pop($order_items));
         // It's a subscription
         $paypal_args['cmd'] = '_xclick-subscriptions';
         if (count($order->get_items()) > 1) {
             foreach ($order->get_items() as $item) {
                 if ($item['qty'] > 1) {
                     $item_names[] = $item['qty'] . ' x ' . $item['name'];
                 } else {
                     if ($item['qty'] > 0) {
                         $item_names[] = $item['name'];
                     }
                 }
             }
             $paypal_args['item_name'] = sprintf(__('Order %s', WC_Subscriptions::$text_domain), $order->get_order_number());
         } else {
             $paypal_args['item_name'] = $product->get_title();
         }
         $unconverted_periods = array('billing_period' => WC_Subscriptions_Order::get_subscription_period($order), 'trial_period' => WC_Subscriptions_Order::get_subscription_trial_period($order));
         $converted_periods = array();
         // Convert period strings into PayPay's format
         foreach ($unconverted_periods as $key => $period) {
             switch (strtolower($period)) {
                 case 'day':
                     $converted_periods[$key] = 'D';
                     break;
                 case 'week':
                     $converted_periods[$key] = 'W';
                     break;
                 case 'year':
                     $converted_periods[$key] = 'Y';
                     break;
                 case 'month':
                 default:
                     $converted_periods[$key] = 'M';
                     break;
             }
         }
         $price_per_period = WC_Subscriptions_Order::get_recurring_total($order);
         $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order);
         $subscription_length = WC_Subscriptions_Order::get_subscription_length($order);
         $subscription_installments = $subscription_length / $subscription_interval;
         $is_payment_change = WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment;
         $is_switch_order = WC_Subscriptions_Switcher::order_contains_subscription_switch($order->id);
         $sign_up_fee = $is_payment_change ? 0 : WC_Subscriptions_Order::get_sign_up_fee($order);
         $initial_payment = $is_payment_change ? 0 : WC_Subscriptions_Order::get_total_initial_payment($order);
         if ($is_payment_change) {
             // Add a nonce to the order ID to avoid "This invoice has already been paid" error when changing payment method to PayPal when it was previously PayPal
             $paypal_args['invoice'] = $paypal_args['invoice'] . '-wcscpm-' . wp_create_nonce();
             // Set a flag on the order if changing from PayPal *to* PayPal to prevent incorrectly cancelling the subscription
             if ('paypal' == $order->recurring_payment_method) {
                 add_post_meta($order_id, '_wcs_changing_payment_from_paypal_to_paypal', 'true', true);
             }
         }
         // If we're changing the payment date or switching subs, we need to set the trial period to the next payment date & installments to be the number of installments left
         if ($is_payment_change || $is_switch_order) {
             $subscription_key = WC_Subscriptions_Manager::get_subscription_key($order_id, $product->id);
             // Give a free trial until the next payment date
             $next_payment_timestamp = WC_Subscriptions_Manager::get_next_payment_date($subscription_key, $order->user_id, 'timestamp');
             // When the subscription is on hold
             if ($next_payment_timestamp != false) {
                 $trial_until = self::calculate_trial_periods_until($next_payment_timestamp);
                 $subscription_trial_length = $trial_until['first_trial_length'];
                 $converted_periods['trial_period'] = $trial_until['first_trial_period'];
                 $second_trial_length = $trial_until['second_trial_length'];
                 $second_trial_period = $trial_until['second_trial_period'];
             }
             // If is a payment change, we need to account for completed payments on the number of installments owing
             if ($is_payment_change && $subscription_length > 0) {
                 $subscription_installments -= WC_Subscriptions_Manager::get_subscriptions_completed_payment_count($subscription_key);
             }
         } else {
             $subscription_trial_length = WC_Subscriptions_Order::get_subscription_trial_length($order);
         }
         if ($subscription_trial_length > 0) {
             // Specify a free trial period
             if ($is_switch_order) {
                 $paypal_args['a1'] = $initial_payment > 0 ? $initial_payment : 0;
             } else {
                 $paypal_args['a1'] = $sign_up_fee > 0 ? $sign_up_fee : 0;
             }
             // Maybe add the sign up fee to the free trial period
             // Trial period length
             $paypal_args['p1'] = $subscription_trial_length;
             // Trial period
             $paypal_args['t1'] = $converted_periods['trial_period'];
             // We need to use a second trial period before we have more than 90 days until the next payment
//.........这里部分代码省略.........
开发者ID:bulats,项目名称:chef,代码行数:101,代码来源:gateway-paypal-standard-subscriptions.php

示例7: paypal_standard_subscription_args

 /**
  * Override the default PayPal standard args in WooCommerce for subscription purchases when
  * automatic payments are enabled and when the recurring order totals is over $0.00 (because
  * PayPal doesn't support subscriptions with a $0 recurring total, we need to circumvent it and
  * manage it entirely ourselves.)
  *
  * Based on the HTML Variables documented here: https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/#id08A6HI00JQU
  *
  * @since 1.0
  */
 public static function paypal_standard_subscription_args($paypal_args)
 {
     extract(self::get_order_id_and_key($paypal_args));
     $order = new WC_Order($order_id);
     if ($cart_item = WC_Subscriptions_Cart::cart_contains_failed_renewal_order_payment() || false !== WC_Subscriptions_Renewal_Order::get_failed_order_replaced_by($order_id)) {
         $renewal_order = $order;
         $order = WC_Subscriptions_Renewal_Order::get_parent_order($renewal_order);
         $order_contains_failed_renewal = true;
     } else {
         $order_contains_failed_renewal = false;
     }
     if ($order_contains_failed_renewal || WC_Subscriptions_Order::order_contains_subscription($order) && WC_Subscriptions_Order::get_recurring_total($order) > 0 && 'yes' !== get_option(WC_Subscriptions_Admin::$option_prefix . '_turn_off_automatic_payments', 'no')) {
         // Only one subscription allowed in the cart when PayPal Standard is active
         $product = $order->get_product_from_item(array_pop(WC_Subscriptions_Order::get_recurring_items($order)));
         // It's a subscription
         $paypal_args['cmd'] = '_xclick-subscriptions';
         if (count($order->get_items()) > 1) {
             foreach ($order->get_items() as $item) {
                 if ($item['qty'] > 1) {
                     $item_names[] = $item['qty'] . ' x ' . self::paypal_item_name($item['name']);
                 } elseif ($item['qty'] > 0) {
                     $item_names[] = self::paypal_item_name($item['name']);
                 }
             }
             $paypal_args['item_name'] = self::paypal_item_name(sprintf(__('Order %s', 'woocommerce-subscriptions'), $order->get_order_number() . " - " . implode(', ', $item_names)));
         } else {
             $paypal_args['item_name'] = self::paypal_item_name($product->get_title());
         }
         $unconverted_periods = array('billing_period' => WC_Subscriptions_Order::get_subscription_period($order), 'trial_period' => WC_Subscriptions_Order::get_subscription_trial_period($order));
         $converted_periods = array();
         // Convert period strings into PayPay's format
         foreach ($unconverted_periods as $key => $period) {
             switch (strtolower($period)) {
                 case 'day':
                     $converted_periods[$key] = 'D';
                     break;
                 case 'week':
                     $converted_periods[$key] = 'W';
                     break;
                 case 'year':
                     $converted_periods[$key] = 'Y';
                     break;
                 case 'month':
                 default:
                     $converted_periods[$key] = 'M';
                     break;
             }
         }
         $price_per_period = WC_Subscriptions_Order::get_recurring_total($order);
         $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order);
         $subscription_length = WC_Subscriptions_Order::get_subscription_length($order);
         $subscription_installments = $subscription_length / $subscription_interval;
         $is_payment_change = WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment;
         $is_switch_order = WC_Subscriptions_Switcher::order_contains_subscription_switch($order->id);
         $is_synced_subscription = WC_Subscriptions_Synchroniser::order_contains_synced_subscription($order->id);
         $sign_up_fee = $is_payment_change ? 0 : WC_Subscriptions_Order::get_sign_up_fee($order);
         $initial_payment = $is_payment_change ? 0 : WC_Subscriptions_Order::get_total_initial_payment($order);
         if ($is_payment_change) {
             // Add a nonce to the order ID to avoid "This invoice has already been paid" error when changing payment method to PayPal when it was previously PayPal
             $paypal_args['invoice'] = $paypal_args['invoice'] . '-wcscpm-' . wp_create_nonce();
         } elseif ($order_contains_failed_renewal) {
             // Set the invoice details to the original order's invoice but also append a special string and this renewal orders ID so that we can match it up as a failed renewal order payment later
             $paypal_args['invoice'] = self::$invoice_prefix . ltrim($order->get_order_number(), '#') . '-wcsfrp-' . $renewal_order->id;
             $paypal_args['custom'] = serialize(array($order->id, $order->order_key));
         }
         if ($order_contains_failed_renewal) {
             $sign_up_fee = 0;
             $initial_payment = $renewal_order->get_total();
             // Initial payment can be left in case the customer is purchased other products with the payment
             $subscription_trial_length = 0;
             $subscription_installments = max($subscription_installments - WC_Subscriptions_Manager::get_subscriptions_completed_payment_count(WC_Subscriptions_Manager::get_subscription_key($order_id, $product->id)), 0);
             // If we're changing the payment date or switching subs, we need to set the trial period to the next payment date & installments to be the number of installments left
         } elseif ($is_payment_change || $is_switch_order || $is_synced_subscription) {
             $subscription_key = WC_Subscriptions_Manager::get_subscription_key($order_id, $product->id);
             // Give a free trial until the next payment date
             if ($is_switch_order) {
                 $next_payment_timestamp = get_post_meta($order->id, '_switched_subscription_first_payment_timestamp', true);
             } elseif ($is_synced_subscription) {
                 $next_payment_timestamp = WC_Subscriptions_Synchroniser::calculate_first_payment_date($product, 'timestamp');
             } else {
                 $next_payment_timestamp = WC_Subscriptions_Manager::get_next_payment_date($subscription_key, $order->user_id, 'timestamp');
             }
             // When the subscription is on hold
             if ($next_payment_timestamp != false && !empty($next_payment_timestamp)) {
                 $trial_until = self::calculate_trial_periods_until($next_payment_timestamp);
                 $subscription_trial_length = $trial_until['first_trial_length'];
                 $converted_periods['trial_period'] = $trial_until['first_trial_period'];
                 $second_trial_length = $trial_until['second_trial_length'];
                 $second_trial_period = $trial_until['second_trial_period'];
             } else {
//.........这里部分代码省略.........
开发者ID:Ezyva2015,项目名称:SMSF-Academy-Wordpress,代码行数:101,代码来源:gateway-paypal-standard-subscriptions.php

示例8: paypal_standard_subscription_args

 /**
  * Override the default PayPal standard args in WooCommerce for subscription purchases.
  *
  * @since 1.0
  */
 public static function paypal_standard_subscription_args($paypal_args)
 {
     extract(self::get_order_id_and_key($paypal_args));
     if (WC_Subscriptions_Order::order_contains_subscription($order_id)) {
         $order = new WC_Order($order_id);
         $order_items = $order->get_items();
         // Only one subscription allowed in the cart when PayPal Standard is active
         $product = $order->get_product_from_item($order_items[0]);
         // It's a subscription
         $paypal_args['cmd'] = '_xclick-subscriptions';
         if (count($order->get_items()) > 1) {
             foreach ($order->get_items() as $item) {
                 if ($item['qty'] > 1) {
                     $item_names[] = $item['qty'] . ' x ' . $item['name'];
                 } else {
                     if ($item['qty'] > 0) {
                         $item_names[] = $item['name'];
                     }
                 }
             }
             $paypal_args['item_name'] = sprintf(__('Order %s', WC_Subscriptions::$text_domain), $order->get_order_number());
         } else {
             $paypal_args['item_name'] = $product->get_title();
         }
         // Subscription unit of duration
         switch (strtolower(WC_Subscriptions_Order::get_subscription_period($order))) {
             case 'day':
                 $subscription_period = 'D';
                 break;
             case 'week':
                 $subscription_period = 'W';
                 break;
             case 'year':
                 $subscription_period = 'Y';
                 break;
             case 'month':
             default:
                 $subscription_period = 'M';
                 break;
         }
         $sign_up_fee = WC_Subscriptions_Order::get_sign_up_fee($order);
         $price_per_period = WC_Subscriptions_Order::get_price_per_period($order);
         $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order);
         $subscription_length = WC_Subscriptions_Order::get_subscription_length($order);
         $subscription_trial_length = WC_Subscriptions_Order::get_subscription_trial_length($order);
         if ($subscription_trial_length > 0) {
             // Specify a free trial period
             $paypal_args['a1'] = $sign_up_fee > 0 ? $sign_up_fee : 0;
             // Add the sign up fee to the free trial period
             // Sign Up interval
             $paypal_args['p1'] = $subscription_trial_length;
             // Sign Up unit of duration
             $paypal_args['t1'] = $subscription_period;
         } elseif ($sign_up_fee > 0) {
             // No trial period, so charge sign up fee and per period price for the first period
             if ($subscription_length == 1) {
                 $param_number = 3;
             } else {
                 $param_number = 1;
             }
             $paypal_args['a' . $param_number] = $price_per_period + $sign_up_fee;
             // Sign Up interval
             $paypal_args['p' . $param_number] = $subscription_interval;
             // Sign Up unit of duration
             $paypal_args['t' . $param_number] = $subscription_period;
         }
         // We have a recurring payment
         if (!isset($param_number) || $param_number == 1) {
             // Subscription price
             $paypal_args['a3'] = $price_per_period;
             // Subscription duration
             $paypal_args['p3'] = $subscription_interval;
             // Subscription period
             $paypal_args['t3'] = $subscription_period;
         }
         // Recurring payments
         if ($subscription_length == 1 || $sign_up_fee > 0 && $subscription_trial_length == 0 && $subscription_length == 2) {
             // Non-recurring payments
             $paypal_args['src'] = 0;
         } else {
             $paypal_args['src'] = 1;
             if ($subscription_length > 0) {
                 if ($sign_up_fee > 0 && $subscription_trial_length == 0) {
                     // An initial period is being used to charge a sign-up fee
                     $subscription_length--;
                 }
                 $paypal_args['srt'] = $subscription_length / $subscription_interval;
             }
         }
         // Force return URL so that order description & instructions display
         $paypal_args['rm'] = 2;
     }
     return $paypal_args;
 }
开发者ID:picassentviu,项目名称:AMMPro,代码行数:99,代码来源:gateway-paypal-standard-subscriptions.php

示例9: calculate_lifetime_subscription_total

 /**
  * Calculate the maximum amount that can be charged throughout the life of a subscription. Amazon displays this
  * to the customer when they're authorizing their payment.
  *
  * @since 2.0
  * @param WC_Order $order the WC order object
  * @return float the maximum total amount that can be charged, rounded to the nearest whole number
  */
 private function calculate_lifetime_subscription_total(WC_Order $order)
 {
     // start with the total initial payment, which includes any sign up fee or one-off shipping/tax charge
     $total = WC_Subscriptions_Order::get_total_initial_payment($order);
     // add the total from all the recurring periods
     if (WC_Subscriptions_Order::get_subscription_length($order) > 0) {
         $total += WC_Subscriptions_Order::get_recurring_total($order) * WC_Subscriptions_Order::get_subscription_length($order);
         // If a subscription never ends, use 5 years worth of recurring charges as a sensible maximum
     } else {
         // first get the subscription period in year terms
         switch (WC_Subscriptions_Order::get_subscription_period($order)) {
             case 'day':
                 $period = 365;
                 break;
             case 'week':
                 $period = 52;
                 break;
             case 'month':
                 $period = 12;
                 break;
             case 'year':
                 $period = 1;
                 break;
             default:
                 $period = 1;
                 break;
         }
         // divide by the interval (e.g. recurs every Xth week)
         $period = $period / WC_Subscriptions_Order::get_subscription_interval($order);
         // multiply by recurring total per period by the number of periods in a year by 5 years to get the total
         $total += WC_Subscriptions_Order::get_recurring_total($order) * $period * 5;
     }
     // finally increase by 25% to account for price increases / upgrades
     $total *= 1.25;
     /**
      * Round to whole number and allow an entirely different total to be set
      *
      * @since 2.0
      * @param float $lifetime_subscription_total the total amount that may be charged, as shown to the customer during checkout @ Amazon
      * @param WC_Order $order the WC Order object
      */
     return apply_filters('wc_amazon_fps_lifetime_subscription_total', round($total, 0), $order);
 }
开发者ID:Qualitair,项目名称:ecommerce,代码行数:51,代码来源:class-wc-gateway-amazon-fps-addons.php

示例10: paypal_standard_subscription_args

 /**
  * Override the default PayPal standard args in WooCommerce for subscription purchases.
  *
  * @since 1.0
  */
 public static function paypal_standard_subscription_args($paypal_args)
 {
     extract(self::get_order_id_and_key($paypal_args));
     if (WC_Subscriptions_Order::order_contains_subscription($order_id) && 'yes' !== get_option(WC_Subscriptions_Admin::$option_prefix . '_turn_off_automatic_payments', 'no')) {
         $order = new WC_Order($order_id);
         $order_items = $order->get_items();
         // Only one subscription allowed in the cart when PayPal Standard is active
         $product = $order->get_product_from_item(array_pop($order_items));
         // It's a subscription
         $paypal_args['cmd'] = '_xclick-subscriptions';
         if (count($order->get_items()) > 1) {
             foreach ($order->get_items() as $item) {
                 if ($item['qty'] > 1) {
                     $item_names[] = $item['qty'] . ' x ' . $item['name'];
                 } else {
                     if ($item['qty'] > 0) {
                         $item_names[] = $item['name'];
                     }
                 }
             }
             $paypal_args['item_name'] = sprintf(__('Order %s', WC_Subscriptions::$text_domain), $order->get_order_number());
         } else {
             $paypal_args['item_name'] = $product->get_title();
         }
         $unconverted_periods = array('billing_period' => WC_Subscriptions_Order::get_subscription_period($order), 'trial_period' => WC_Subscriptions_Order::get_subscription_trial_period($order));
         $converted_periods = array();
         // Convert period strings into PayPay's format
         foreach ($unconverted_periods as $key => $period) {
             switch (strtolower($period)) {
                 case 'day':
                     $converted_periods[$key] = 'D';
                     break;
                 case 'week':
                     $converted_periods[$key] = 'W';
                     break;
                 case 'year':
                     $converted_periods[$key] = 'Y';
                     break;
                 case 'month':
                 default:
                     $converted_periods[$key] = 'M';
                     break;
             }
         }
         $sign_up_fee = WC_Subscriptions_Order::get_sign_up_fee($order);
         $initial_payment = WC_Subscriptions_Order::get_total_initial_payment($order);
         $price_per_period = WC_Subscriptions_Order::get_recurring_total($order);
         $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order);
         $subscription_installments = WC_Subscriptions_Order::get_subscription_length($order) / $subscription_interval;
         $subscription_trial_length = WC_Subscriptions_Order::get_subscription_trial_length($order);
         if ($subscription_trial_length > 0) {
             // Specify a free trial period
             $paypal_args['a1'] = $sign_up_fee > 0 ? $sign_up_fee : 0;
             // Maybe add the sign up fee to the free trial period
             // Trial period length
             $paypal_args['p1'] = $subscription_trial_length;
             // Trial period
             $paypal_args['t1'] = $converted_periods['trial_period'];
         } elseif ($sign_up_fee > 0 || $initial_payment !== $price_per_period) {
             // No trial period, so charge sign up fee and per period price for the first period
             if ($subscription_installments == 1) {
                 $param_number = 3;
             } else {
                 $param_number = 1;
             }
             $paypal_args['a' . $param_number] = $initial_payment;
             // Sign Up interval
             $paypal_args['p' . $param_number] = $subscription_interval;
             // Sign Up unit of duration
             $paypal_args['t' . $param_number] = $converted_periods['billing_period'];
         }
         // We have a recurring payment
         if (!isset($param_number) || $param_number == 1) {
             // Subscription price
             $paypal_args['a3'] = $price_per_period;
             // Subscription duration
             $paypal_args['p3'] = $subscription_interval;
             // Subscription period
             $paypal_args['t3'] = $converted_periods['billing_period'];
         }
         // Recurring payments
         if ($subscription_installments == 1 || $sign_up_fee > 0 && $subscription_trial_length == 0 && $subscription_installments == 2) {
             // Non-recurring payments
             $paypal_args['src'] = 0;
         } else {
             $paypal_args['src'] = 1;
             if ($subscription_installments > 0) {
                 if ($sign_up_fee > 0 && $subscription_trial_length == 0) {
                     // An initial period is being used to charge a sign-up fee
                     $subscription_installments--;
                 }
                 $paypal_args['srt'] = $subscription_installments;
             }
         }
         // Force return URL so that order description & instructions display
//.........这里部分代码省略.........
开发者ID:bulats,项目名称:chef,代码行数:101,代码来源:gateway-paypal-standard-subscriptions.php

示例11: notify_handler

 /**
  * notify handler
  * @since 2.2.0
  */
 function notify_handler()
 {
     global $woocommerce;
     $redirect = get_permalink(woocommerce_get_page_id('cart'));
     if (isset($_GET['stripeListener']) && $_GET['stripeListener'] == 'stripe') {
         if ($this->debug == 'yes') {
             $this->log->add('stripe', __('Post form: ', 'woocommerce') . print_r($_POST, true));
         }
         if ($woocommerce->verify_nonce('stripe_payment_submit')) {
             $order_id = $this->get_request('order');
             $order = new WC_Order($order_id);
             if ($order->order_key != $_REQUEST['key']) {
                 $woocommerce->add_error(__('Order key do not match!', 'woocommerce'));
                 wp_redirect($redirect);
                 //redirect page
                 exit;
             }
             $order_items = $order->get_items();
             $product = $order->get_product_from_item(array_pop($order_items));
             $this->product_type = $product->product_type;
             $params = $this->get_params($order);
             if ($this->debug == 'yes') {
                 $this->log->add('stripe', __('Post paramaters: ', 'woocommerce') . print_r($params, true));
             }
             $request = new stripe_request($this->get_config());
             $response = '';
             if ('subscription' == $product->product_type || 'subscription_variation' == $product->product_type) {
                 if ($this->debug == 'yes') {
                     $this->log->add('stripe', 'Starting subscription ... ');
                 }
                 $sign_up_fee = WC_Subscriptions_Order::get_sign_up_fee($order);
                 $price_per_period = WC_Subscriptions_Order::get_price_per_period($order);
                 $subscription_interval = WC_Subscriptions_Order::get_subscription_interval($order);
                 $subscription_length = WC_Subscriptions_Order::get_subscription_length($order);
                 $subscription_trial_length = WC_Subscriptions_Order::get_subscription_trial_length($order);
                 // Subscription unit of duration
                 switch (strtolower(WC_Subscriptions_Order::get_subscription_period($order))) {
                     case 'year':
                         $subscription_period = 'year';
                         break;
                     case 'month':
                     default:
                         $subscription_period = 'month';
                         break;
                 }
                 // add more param
                 $sparams = array();
                 $plan_name = get_post($product->id)->post_title;
                 //$plan_id = $product->id;
                 $plan_id = $order_id;
                 $response = $request->send($plan_id, 'retrieve');
                 if (!$response->success()) {
                     //create plan if not exists
                     if ($this->debug == 'yes') {
                         $this->log->add('stripe', sprintf(__('Create plan id: %s', 'woocommerce'), $plan_id));
                     }
                     $response = $request->send(array('amount' => number_format($price_per_period, 2, '.', '') * 100, 'interval' => $subscription_period, "currency" => $params['currency'], "id" => $plan_id, 'name' => $plan_name, 'trial_period_days' => $subscription_trial_length), 'plan');
                 }
                 if ($response->success()) {
                     if ($this->debug == 'yes') {
                         $this->log->add('stripe', print_r($response, true));
                     }
                     $response = $request->send(array("card" => $params['card'], "plan" => $plan_id, "email" => $order->billing_email), 'customer');
                     if ($this->debug == 'yes') {
                         $this->log->add('stripe', 'Customer create: ' . print_r($response->results, true));
                     }
                     if ($response->success() && $sign_up_fee > 0) {
                         $response = $request->send(array("customer" => $response->results->id, "amount" => number_format($sign_up_fee, 2, '.', '') * 100, "currency" => $params['currency'], "description" => __("Sign-up Fee", 'woocommerce')));
                         if ($this->debug == 'yes') {
                             $this->log->add('stripe', 'Sign-up fee response: ' . print_r($response->results, true));
                         }
                     }
                 } else {
                     //error
                     if ($this->debug == 'yes') {
                         $this->log->add('stripe', __('Error can not create plan', 'woocommerce'));
                     }
                     $woocommerce->add_error(__('Error can not create plan', 'woocommerce'));
                 }
             } else {
                 $response = $request->send($params);
             }
             //response result
             if ($response->success()) {
                 $order->add_order_note(__('Stripe payment completed', 'woocommerce') . ' (Transaction ID: ' . $response->get_transaction_id() . ')');
                 $order->payment_complete();
                 $woocommerce->cart->empty_cart();
                 $redirect = add_query_arg('key', $order->order_key, add_query_arg('order', $order_id, get_permalink(woocommerce_get_page_id('thanks'))));
             } else {
                 if ($this->debug == 'yes') {
                     $this->log->add('stripe', 'Error: ' . $response->get_error(), true);
                 }
                 $woocommerce->add_error(__('Payment error', 'woocommerce') . ': ' . $response->get_error() . '');
             }
         }
         wp_redirect($redirect);
//.........这里部分代码省略.........
开发者ID:shahadat014,项目名称:geleyi,代码行数:101,代码来源:wc-gateway-stripe.php


注:本文中的WC_Subscriptions_Order::get_subscription_length方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。