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


PHP WC_Order::add_order_note方法代码示例

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


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

示例1: save_tracking_code

 /**
  * Save tracking code.
  *
  * @param  int $post_id Current post type ID.
  *
  * @return void
  */
 public function save_tracking_code($post_id)
 {
     if (isset($_POST['correios_tracking'])) {
         $old = get_post_meta($post_id, 'correios_tracking', true);
         $new = $_POST['correios_tracking'];
         if ($new && $new != $old) {
             update_post_meta($post_id, 'correios_tracking', $new);
             // Gets order data.
             $order = new WC_Order($post_id);
             // Add order note.
             $order->add_order_note(sprintf(__('Added a Correios tracking code: %s', 'woocommerce-correios'), $new));
             // Send email notification.
             $this->trigger_email_notification($order, $new);
         } elseif ('' == $new && $old) {
             delete_post_meta($post_id, 'correios_tracking', $old);
         }
     }
 }
开发者ID:rodrigo-mamangava,项目名称:nofluxo,代码行数:25,代码来源:class-wc-correios-admin-orders.php

示例2: new_comment

 /**
  * Submit a comment for an order
  *
  * @param object $orders
  *
  * @return unknown
  */
 public static function new_comment($orders)
 {
     global $woocommerce;
     $user = wp_get_current_user();
     $user = $user->ID;
     // Security
     if (!wp_verify_nonce($_POST['_wpnonce'], 'add-comment')) {
         return false;
     }
     // Check if this product belongs to the vendor submitting the comment
     $product_id = (int) $_POST['product_id'];
     $author = PV_Vendors::get_vendor_from_product($product_id);
     if ($author != $user) {
         return false;
     }
     // Find the order belonging to this comment
     foreach ($orders as $order) {
         if ($order->order_id == $_POST['order_id']) {
             $found_order = $order;
             break;
         }
     }
     // No order was found
     if (empty($found_order)) {
         return false;
     }
     // Don't submit empty comments
     if (empty($_POST['comment_text'])) {
         if (function_exists('wc_add_error')) {
             wc_add_error(__('You\'ve left the comment field empty!', 'wc_product_vendor'));
         } else {
             $woocommerce->add_error(__('You\'ve left the comment field empty!', 'wc_product_vendor'));
         }
         return false;
     }
     // Only submit if the order has the product belonging to this vendor
     $found_order = new WC_Order($found_order->order_id);
     $valid_order = false;
     foreach ($found_order->get_items() as $item) {
         if ($item['product_id'] == $product_id) {
             $valid_order = true;
             break;
         }
     }
     if ($valid_order) {
         $comment = esc_textarea($_POST['comment_text']);
         add_filter('woocommerce_new_order_note_data', array(__CLASS__, 'filter_comment'), 10, 2);
         $found_order->add_order_note($comment, 1);
         remove_filter('woocommerce_new_order_note_data', array(__CLASS__, 'filter_comment'), 10, 2);
         if (function_exists('wc_add_message')) {
             wc_add_message(__('Success. The customer has been notified of your comment.', 'wc_product_vendor'));
         } else {
             $woocommerce->add_message(__('Success. The customer has been notified of your comment.', 'wc_product_vendor'));
         }
     }
 }
开发者ID:shahadat014,项目名称:geleyi,代码行数:63,代码来源:class-submit-comment.php

示例3: tiago_auto_stock_reduce

 public function tiago_auto_stock_reduce($order_id)
 {
     $j = get_post_meta($order_id, '_payment_method');
     if ($j[0] == 'pagseguro') {
         $order = new WC_Order($order_id);
         $order->reduce_order_stock();
         // Payment is complete so reduce stock levels
         $order->add_order_note('Estoque reduzido automaticamente ao criar pedido.');
     }
 }
开发者ID:TiagoSilvestre,项目名称:PluginParaBaixarEstoqueNoPedido,代码行数:10,代码来源:woocommerce-reduces-inventory-in-order.php

示例4: process_payment

 /**
  * Process the payment and return the result
  *
  * @param  int $order_id
  *
  * @return array
  */
 public function process_payment($order_id)
 {
     $order = new WC_Order($order_id);
     // Add meta
     update_post_meta($order_id, '_booking_order', '1');
     // Add custom order note.
     $order->add_order_note(__('This order is awaiting confirmation from the shop manager', 'woocommerce-bookings'));
     // Remove cart
     WC()->cart->empty_cart();
     // Return thankyou redirect
     return array('result' => 'success', 'redirect' => $this->get_return_url($order));
 }
开发者ID:nomadicmarc,项目名称:goodbay,代码行数:19,代码来源:class-wc-bookings-gateway.php

示例5: webhook_handler

 public function webhook_handler()
 {
     header('HTTP/1.1 200 OK');
     $obj = file_get_contents('php://input');
     $json = json_decode($obj);
     if ($json->type == 'charge.succeeded') {
         $order_id = $json->transaction->order_id;
         $payment_date = date("Y-m-d", $json->event_date);
         $order = new WC_Order($order_id);
         update_post_meta($order->id, 'openpay_payment_date', $payment_date);
         $order->payment_complete();
         $order->add_order_note(sprintf("Payment completed."));
     }
 }
开发者ID:open-pay,项目名称:openpay-woocommerce,代码行数:14,代码来源:openpay_stores_gateway.php

示例6: webhook_handler

 /**
  * Updates the status of the order.
  * Webhook needs to be added to Conekta account tusitio.com/wc-api/WC_Conekta_Cash_Gateway
  */
 public function webhook_handler()
 {
     header('HTTP/1.1 200 OK');
     $body = @file_get_contents('php://input');
     $event = json_decode($body);
     $charge = $event->data->object;
     $order_id = $charge->reference_id;
     $paid_at = date("Y-m-d", $charge->paid_at);
     $order = new WC_Order($order_id);
     if (strpos($event->type, "charge.paid") !== false) {
         update_post_meta($order->id, 'conekta-paid-at', $paid_at);
         $order->payment_complete();
         $order->add_order_note(sprintf("Payment completed in Oxxo and notification of payment received"));
     }
 }
开发者ID:danisdead,项目名称:gastrointernacional,代码行数:19,代码来源:conekta_cash_gateway.php

示例7: explode

 function check_ipn_response()
 {
     global $woocommerce;
     $posted = $_POST['payment'];
     $hash = sha1(md5($posted . $this->merchant_password));
     if (isset($_POST['payment']) && $hash === $_POST['signature']) {
         $items = explode("&", $_POST['payment']);
         $ar = array();
         foreach ($items as $it) {
             $key = "";
             $value = "";
             list($key, $value) = explode("=", $it, 2);
             $payment_items[$key] = $value;
         }
         $order = new WC_Order($payment_items['order']);
         $order->update_status('processing', __('Платеж успешно оплачен', 'woocommerce'));
         $order->add_order_note(__('Клиент успешно оплатил заказ', 'woocommerce'));
         $woocommerce->cart->empty_cart();
     } else {
         wp_die('IPN Request Failure');
     }
 }
开发者ID:kindaemail,项目名称:privat24,代码行数:22,代码来源:privavat24.php

示例8: SCMerchantClient

 function check_spectrocoin_callback()
 {
     global $woocommerce;
     $ipn = $_REQUEST;
     // Exit now if the $_POST was empty.
     if (empty($ipn)) {
         echo 'Invalid request!';
         return;
     }
     $scMerchantClient = new SCMerchantClient(SC_API_URL, $this->get_option('merchant_id'), $this->get_option('project_id'), $this->get_option('private_key'));
     $callback = $scMerchantClient->parseCreateOrderCallback($ipn);
     if ($callback != null && $scMerchantClient->validateCreateOrderCallback($callback)) {
         switch ($callback->getStatus()) {
             case OrderStatusEnum::$New:
             case OrderStatusEnum::$Pending:
                 break;
             case OrderStatusEnum::$Expired:
             case OrderStatusEnum::$Failed:
                 break;
             case OrderStatusEnum::$Test:
             case OrderStatusEnum::$Paid:
                 $order_number = (int) $ipn['invoice_id'];
                 $order = new WC_Order(absint($order_number));
                 $order->add_order_note(__('Callback payment completed', 'woocomerce'));
                 $order->payment_complete();
                 $order->reduce_order_stock();
                 break;
             default:
                 echo 'Unknown order status: ' . $callback->getStatus();
                 break;
         }
         $woocommerce->cart->empty_cart();
         echo '*ok*';
     } else {
         echo 'Invalid callback!';
     }
     exit;
 }
开发者ID:alcharkov,项目名称:spectrocoin-payment-gateway-for-woocommerce,代码行数:38,代码来源:index.php

示例9: process_payment

 public function process_payment($order_id)
 {
     global $woocommerce;
     $customer_order = new WC_Order($order_id);
     $environment = $this->environment == "yes" ? 'TRUE' : 'FALSE';
     $environment_url = "FALSE" == $environment ? 'https://secure.authorize.net/gateway/transact.dll' : 'https://test.authorize.net/gateway/transact.dll';
     $payload = array("x_tran_key" => $this->trans_key, "x_login" => $this->api_login, "x_version" => "3.1", "x_amount" => $customer_order->order_total, "x_card_num" => str_replace(array(' ', '-'), '', $_POST['GP_authorize_gateway-card-number']), "x_card_code" => isset($_POST['GP_authorize_gateway-card-cvc']) ? $_POST['GP_authorize_gateway-card-cvc'] : '', "x_exp_date" => str_replace(array('/', ' '), '', $_POST['GP_authorize_gateway-card-expiry']), "x_type" => 'AUTH_CAPTURE', "x_invoice_num" => str_replace("#", "", $customer_order->get_order_number()), "x_test_request" => $environment, "x_delim_char" => '|', "x_encap_char" => '', "x_delim_data" => "TRUE", "x_relay_response" => "FALSE", "x_method" => "CC", "x_first_name" => $customer_order->billing_first_name, "x_last_name" => $customer_order->billing_last_name, "x_address" => $customer_order->billing_address_1, "x_city" => $customer_order->billing_city, "x_state" => $customer_order->billing_state, "x_zip" => $customer_order->billing_postcode, "x_country" => $customer_order->billing_country, "x_phone" => $customer_order->billing_phone, "x_email" => $customer_order->billing_email, "x_ship_to_first_name" => $customer_order->shipping_first_name, "x_ship_to_last_name" => $customer_order->shipping_last_name, "x_ship_to_company" => $customer_order->shipping_company, "x_ship_to_address" => $customer_order->shipping_address_1, "x_ship_to_city" => $customer_order->shipping_city, "x_ship_to_country" => $customer_order->shipping_country, "x_ship_to_state" => $customer_order->shipping_state, "x_ship_to_zip" => $customer_order->shipping_postcode, "x_cust_id" => $customer_order->user_id, "x_customer_ip" => $_SERVER['REMOTE_ADDR']);
     $response = wp_remote_post($environment_url, array('method' => 'POST', 'body' => http_build_query($payload), 'timeout' => 90, 'sslverify' => false));
     if (is_wp_error($response)) {
         do_action('gp_order_online_completed_failed', $response);
     }
     if (empty($response['body'])) {
         do_action('gp_order_online_completed_failed', $response);
     }
     $response_body = wp_remote_retrieve_body($response);
     // Parse the response into something we can read
     foreach (preg_split("/\r?\n/", $response_body) as $line) {
         $resp = explode("|", $line);
     }
     // Get the values we need
     $r['response_code'] = $resp[0];
     $r['response_sub_code'] = $resp[1];
     $r['response_reason_code'] = $resp[2];
     $r['response_reason_text'] = $resp[3];
     if ($r['response_code'] == 1 || $r['response_code'] == 4) {
         $customer_order->add_order_note(__('Authorize.net payment completed.', 'GP_authorize_gateway'));
         if ($this->mark_order == 'yes') {
             $woocommerce->cart->empty_cart();
             $customer_order->payment_complete();
             $customer_order->update_status('completed');
         }
         do_action('gp_order_online_completed_successfully', $response);
         return array('result' => 'success', 'redirect' => $this->get_return_url($customer_order));
     } else {
         do_action('gp_error_occurred', $r['response_reason_text']);
     }
 }
开发者ID:GammaPartners,项目名称:WooCommerce-Payment-Gateways,代码行数:37,代码来源:authorizenet.php

示例10: process_order_status

 /**
  * Process the order status.
  *
  * @param  WC_Order $order
  * @param  string   $payment_id
  * @param  string   $status
  * @param  string   $auth_code
  *
  * @return bool
  */
 public function process_order_status($order, $payment_id, $status, $auth_code)
 {
     if ('APPROVED' == $status) {
         // Payment complete
         $order->payment_complete($payment_id);
         // Add order note
         $order->add_order_note(sprintf(__('Simplify payment approved (ID: %1$s, Auth Code: %2$s)', 'woocommerce'), $payment_id, $auth_code));
         // Remove cart
         WC()->cart->empty_cart();
         return true;
     }
     return false;
 }
开发者ID:nishitlangaliya,项目名称:woocommerce,代码行数:23,代码来源:class-wc-gateway-simplify-commerce.php

示例11: woocommerce_add_order_note

function woocommerce_add_order_note()
{
    global $woocommerce;
    check_ajax_referer('add-order-note', 'security');
    $post_id = (int) $_POST['post_id'];
    $note = strip_tags(woocommerce_clean($_POST['note']));
    $note_type = $_POST['note_type'];
    $is_customer_note = $note_type == 'customer' ? 1 : 0;
    if ($post_id > 0) {
        $order = new WC_Order($post_id);
        $comment_id = $order->add_order_note($note, $is_customer_note);
        echo '<li rel="' . $comment_id . '" class="note ';
        if ($is_customer_note) {
            echo 'customer-note';
        }
        echo '"><div class="note_content">';
        echo wpautop(wptexturize($note));
        echo '</div><p class="meta">' . sprintf(__('added %s ago', 'woocommerce'), human_time_diff(current_time('timestamp'))) . ' - <a href="#" class="delete_note">' . __('Delete note', 'woocommerce') . '</a></p>';
        echo '</li>';
    }
    // Quit out
    die;
}
开发者ID:bidhanbaral,项目名称:fotodep_store,代码行数:23,代码来源:woocommerce-ajax.php

示例12: executepay

 public function executepay()
 {
     if (empty(WC()->session->token) || empty(WC()->session->PayerID) || empty(WC()->session->paymentId)) {
         return;
     }
     $execution = new PaymentExecution();
     $execution->setPayerId(WC()->session->PayerID);
     try {
         $payment = Payment::get(WC()->session->paymentId, $this->getAuth());
         $payment->execute($execution, $this->getAuth());
         $this->add_log(print_r($payment, true));
         if ($payment->state == "approved") {
             //if state = approved continue..
             global $wpdb;
             $this->log->add('paypal_plus', sprintf(__('Response: %s', 'paypal-for-woocommerce'), print_r($payment, true)));
             $order = new WC_Order(WC()->session->orderId);
             if ($this->billing_address == 'yes') {
                 require_once "lib/NameParser.php";
                 $parser = new FullNameParser();
                 $split_name = $parser->split_full_name($payment->payer->payer_info->shipping_address->recipient_name);
                 $shipping_first_name = $split_name['fname'];
                 $shipping_last_name = $split_name['lname'];
                 $full_name = $split_name['fullname'];
                 update_post_meta(WC()->session->orderId, '_billing_first_name', $shipping_first_name);
                 update_post_meta(WC()->session->orderId, '_billing_last_name', $shipping_last_name);
                 update_post_meta(WC()->session->orderId, '_billing_full_name', $full_name);
                 update_post_meta(WC()->session->orderId, '_billing_address_1', $payment->payer->payer_info->shipping_address->line1);
                 update_post_meta(WC()->session->orderId, '_billing_address_2', $payment->payer->payer_info->shipping_address->line2);
                 update_post_meta(WC()->session->orderId, '_billing_city', $payment->payer->payer_info->shipping_address->city);
                 update_post_meta(WC()->session->orderId, '_billing_postcode', $payment->payer->payer_info->shipping_address->postal_code);
                 update_post_meta(WC()->session->orderId, '_billing_country', $payment->payer->payer_info->shipping_address->country_code);
                 update_post_meta(WC()->session->orderId, '_billing_state', $payment->payer->payer_info->shipping_address->state);
             }
             $order->add_order_note(__('PayPal Plus payment completed', 'paypal-for-woocommerce'));
             $order->payment_complete($payment->id);
             //add hook
             do_action('woocommerce_checkout_order_processed', WC()->session->orderId);
             wp_redirect($this->get_return_url($order));
         }
     } catch (PayPal\Exception\PayPalConnectionException $ex) {
         wc_add_notice(__("Error processing checkout. Please try again. ", 'woocommerce'), 'error');
         $this->add_log($ex->getData());
     } catch (Exception $ex) {
         $this->add_log($ex->getMessage());
         // Prints the Error Code
         wc_add_notice(__("Error processing checkout. Please try again.", 'woocommerce'), 'error');
     }
 }
开发者ID:spirit1977,项目名称:paypal-woocommerce,代码行数:48,代码来源:wc-gateway-paypal-plus-angelleye.php

示例13: update_order_status

 /**
  * Update order status.
  *
  * @param array $posted PagSeguro post data.
  */
 public function update_order_status($posted)
 {
     if (isset($posted->reference)) {
         $order_id = (int) str_replace($this->invoice_prefix, '', $posted->reference);
         $order = new WC_Order($order_id);
         // Checks whether the invoice number matches the order.
         // If true processes the payment.
         if ($order->id === $order_id) {
             if ('yes' == $this->debug) {
                 $this->log->add($this->id, 'PagSeguro payment status for order ' . $order->get_order_number() . ' is: ' . intval($posted->status));
             }
             // Order details.
             $order_details = array('type' => '', 'method' => '', 'installments' => '', 'link' => '');
             if (isset($posted->code)) {
                 update_post_meta($order->id, __('PagSeguro Transaction ID', 'woocommerce-pagseguro'), (string) $posted->code);
             }
             if (isset($posted->sender->email)) {
                 update_post_meta($order->id, __('Payer email', 'woocommerce-pagseguro'), (string) $posted->sender->email);
             }
             if (isset($posted->sender->name)) {
                 update_post_meta($order->id, __('Payer name', 'woocommerce-pagseguro'), (string) $posted->sender->name);
             }
             if (isset($posted->paymentMethod->type)) {
                 $order_details['type'] = intval($posted->paymentMethod->type);
                 update_post_meta($order->id, __('Payment type', 'woocommerce-pagseguro'), $this->api->get_payment_name_by_type($order_details['type']));
             }
             if (isset($posted->paymentMethod->code)) {
                 $order_details['method'] = $this->api->get_payment_method_name(intval($posted->paymentMethod->code));
                 update_post_meta($order->id, __('Payment method', 'woocommerce-pagseguro'), $order_details['method']);
             }
             if (isset($posted->installmentCount)) {
                 $order_details['installments'] = (string) $posted->installmentCount;
                 update_post_meta($order->id, __('Installments', 'woocommerce-pagseguro'), $order_details['installments']);
             }
             if (isset($posted->paymentLink)) {
                 $order_details['link'] = (string) $posted->paymentLink;
                 update_post_meta($order->id, __('Payment url', 'woocommerce-pagseguro'), $order_details['link']);
             }
             // Save/update payment information for transparente checkout.
             if ('transparent' == $this->method) {
                 update_post_meta($order->id, '_wc_pagseguro_payment_data', $order_details);
             }
             switch (intval($posted->status)) {
                 case 1:
                     $order->update_status('on-hold', __('PagSeguro: The buyer initiated the transaction, but so far the PagSeguro not received any payment information.', 'woocommerce-pagseguro'));
                     break;
                 case 2:
                     $order->update_status('on-hold', __('PagSeguro: Payment under review.', 'woocommerce-pagseguro'));
                     break;
                 case 3:
                     $order->add_order_note(__('PagSeguro: Payment approved.', 'woocommerce-pagseguro'));
                     // For WooCommerce 2.2 or later.
                     add_post_meta($order->id, '_transaction_id', (string) $posted->code, true);
                     // Changing the order for processing and reduces the stock.
                     $order->payment_complete();
                     break;
                 case 4:
                     $order->add_order_note(__('PagSeguro: Payment completed and credited to your account.', 'woocommerce-pagseguro'));
                     break;
                 case 5:
                     $order->update_status('on-hold', __('PagSeguro: Payment came into dispute.', 'woocommerce-pagseguro'));
                     $this->send_email(sprintf(__('Payment for order %s came into dispute', 'woocommerce-pagseguro'), $order->get_order_number()), __('Payment in dispute', 'woocommerce-pagseguro'), sprintf(__('Order %s has been marked as on-hold, because the payment came into dispute in PagSeguro.', 'woocommerce-pagseguro'), $order->get_order_number()));
                     break;
                 case 6:
                     $order->update_status('refunded', __('PagSeguro: Payment refunded.', 'woocommerce-pagseguro'));
                     $this->send_email(sprintf(__('Payment for order %s refunded', 'woocommerce-pagseguro'), $order->get_order_number()), __('Payment refunded', 'woocommerce-pagseguro'), sprintf(__('Order %s has been marked as refunded by PagSeguro.', 'woocommerce-pagseguro'), $order->get_order_number()));
                     break;
                 case 7:
                     $order->update_status('cancelled', __('PagSeguro: Payment canceled.', 'woocommerce-pagseguro'));
                     break;
                 default:
                     // No action xD.
                     break;
             }
         } else {
             if ('yes' == $this->debug) {
                 $this->log->add($this->id, 'Error: Order Key does not match with PagSeguro reference.');
             }
         }
     }
 }
开发者ID:pensesmart,项目名称:woocommerce-pagseguro,代码行数:86,代码来源:class-wc-pagseguro-gateway.php

示例14: save

 /**
  * Save metabox data.
  *
  * @param  int $post_id Current post type ID.
  *
  * @return void
  */
 public function save($post_id)
 {
     // Verify nonce.
     if (!isset($_POST['wcboleto_metabox_nonce']) || !wp_verify_nonce($_POST['wcboleto_metabox_nonce'], basename(__FILE__))) {
         return $post_id;
     }
     // Verify if this is an auto save routine.
     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
         return $post_id;
     }
     // Check permissions.
     if ('shop_order' == $_POST['post_type']) {
         if (!current_user_can('edit_page', $post_id)) {
             return $post_id;
         }
     } elseif (!current_user_can('edit_post', $post_id)) {
         return $post_id;
     }
     if (isset($_POST['wcboleto_expiration_date']) && !empty($_POST['wcboleto_expiration_date'])) {
         // Gets boleto data.
         $boleto_data = get_post_meta($post_id, 'wc_boleto_data', true);
         $boleto_data['data_vencimento'] = sanitize_text_field($_POST['wcboleto_expiration_date']);
         // Update boleto data.
         update_post_meta($post_id, 'wc_boleto_data', $boleto_data);
         // Gets order data.
         $order = new WC_Order($post_id);
         // Add order note.
         $order->add_order_note(sprintf(__('Expiration date updated to: %s', 'wcboleto'), $boleto_data['data_vencimento']));
         // Send email notification.
         $this->email_notification($order, $boleto_data['data_vencimento']);
     }
 }
开发者ID:jgabrielfreitas,项目名称:MultipagosTestesAPP,代码行数:39,代码来源:class-wc-boleto-metabox.php

示例15: payment_fail

 /**
  * Payment failed process
  *
  * @param WC_Order $order
  * @param $reason
  * @param null $order_note
  * @param null $custom_order_note
  *
  * @return string
  */
 protected function payment_fail(WC_Order $order, $reason, $order_note = null, $custom_order_note = null)
 {
     wc_add_notice($reason, 'error');
     if ($order_note) {
         $order->add_order_note($order_note);
     }
     if ($this->get_option('enable_custom_order_note') == 'yes' && strlen($custom_order_note) > 0) {
         $order->add_order_note($custom_order_note);
     }
     $order->update_status('failed', __('Payment was declined by LUUP.', 'woocommerce'));
 }
开发者ID:LUUP-payments,项目名称:woocommerce-luup,代码行数:21,代码来源:class-wc-luup-abstract.php


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