Process Order API - How To Scripts

本文档汇集了ProcessOrder API的各种“如何做”脚本,包括订单创建、更新、取消等操作,并覆盖从Oracle Order Management 11.5到12.2.3版本。提供了详细的脚本说明及应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In this Document

 Purpose
 Questions and Answers
 References

APPLIES TO:

Oracle Order Management - Version 11.5 to 12.2.3 [Release 11.5 to 12.2]
Information in this document applies to any platform.
***Checked for relevance on 08-Sep-2014*** 

PURPOSE

This document is a compilation of Process Order API 'How To' Scripts

QUESTIONS AND ANSWERS

Note Number
Script Description
Document 364316.1How does one import Credit Card Payments using Process Order API ?
Document 427947.1How does one process orders from different operating units using Process Order API ?
Document 470741.1How Does One Book An Order Using Process Order API ?
Document 745369.1How Does One Update Order Header Details Using Process Order API For R12 ?
Document 746783.1Script To Create An Order With One Line
Document 746787.1Process Order API In Order Management
Document 746796.1Script To Add A New Line To An Existing Order
Document 746797.1Script To Cancel An Existing Order
Document 746798.1Script To Cancel An Existing Order Line
Document 746802.1Script To Update An Existing Order Line
Document 746803.1Script To Reserve an Order Line
Document 746804.1Script To Unreserve An Order Line
Document 746808.1Script To Split An Order Line
Document 746809.1Script To Delete An Order
Document 746810.1Script To Delete An Order Line
Document 746811.1Script To Apply Hold in Sales Order
Document 746812.1Script To Release Hold In A Sales Order
Document 755135.1How does one update Unit Price using Process Order API?
Document 811264.1How Does One Book An Order Using OE_INBOUND_INT.PROCESS_ORDER() ?
Document 869085.1Process Order API In Order Management - R12 Updates
Document 1128445.1Need Script To Apply Hold using Process Order API in R12 ?
Document 1907954.1Seeded API Not Generating Trxn_Extension_id In Oe_payments Table For ACH Payment Type Information

 

Still Have Questions? 
To discuss this information further with Oracle experts and industry peers, we encourage you to review, join or start a discussion in the My Oracle Support Order Management EBS Community


Let us know your feedback! 
We hope you find this information useful. Our desire is to provide the right information when you need it. Please let us know how we are doing. To provide feedback on this note: 
1. Select the "Rate this document" link. Depending on how you are viewing the note, you will find the link on the: 
  a) bottom left when viewing the note in a separate window. 
  b) upper right when viewing the note in the My Oracle Support window. 
2. In the resulting pop-up box, enter your comments and ratings for the document. 
3. Select Send Rating.

REFERENCES

NOTE:1396053.1  - How to apply a HOLD at Line Level using an API ?
NOTE:1066731.1  - Is There Any Documentation for the OE_HOLDS_PUB API?
AI Overview Implementing selective checkout with checkboxes on a cart page typically involves allowing users to select specific items in their cart for purchase, rather than requiring them to purchase all items. This functionality is not a standard feature in most e-commerce platforms and usually requires custom development or the use of specialized plugins/apps. General Approach: Modify the Cart Template: Add a checkbox next to each item in the cart. Ensure the checkbox is linked to the specific product or line item. Handle User Selections: Use JavaScript to detect changes in checkbox states (checked/unchecked). When a checkbox is selected or deselected, update the cart's subtotal and potentially the items that will be included in the checkout process. Adjust the Checkout Process: When the user proceeds to checkout, ensure that only the items corresponding to the selected checkboxes are passed to the order. This may involve modifying the platform's core checkout logic or using hooks/filters provided by the platform. Platform-Specific Considerations: WooCommerce (WordPress): Requires custom code in functions.php or a custom plugin to add checkboxes, manage selections, and modify the checkout process. You might use AJAX to update the cart dynamically as selections are made. Shopify: Involves modifying theme files (e.g., cart-template.liquid, theme.js) to add checkboxes and JavaScript to handle the logic. This often requires familiarity with Liquid (Shopify's templating language) and JavaScript. Other Platforms: The specific implementation will vary based on the platform's architecture and extensibility options. It may involve similar approaches of template modification and custom code. Important Notes: Complexity: Implementing selective checkout can be complex and may require advanced coding skills. User Experience: Carefully consider the user experience implications of selective checkout to ensure it is intuitive and does not cause confusion. Testing: Thoroughly test the functionality to ensure that selected items are correctly processed and that no loopholes exist (e.g., refreshing the page causing issues with selected items). I want to achieve this selective checkbox function in my cart page. Im using woocommerce and woodmart theme. Please advice on what to do
最新发布
07-30
<think>We are going to implement a selective checkout feature for WooCommerce using the Woodmart theme. Steps: 1. Add checkboxes to each cart item in the cart page. 2. Use JavaScript to handle the checkbox selections and update the cart total to reflect only the selected items. 3. When the user proceeds to checkout, we need to ensure that only the selected items are included in the order. However, note that WooCommerce doesn't natively support partial checkout. Therefore, we have to: a) Either remove the unselected items from the cart when proceeding to checkout (but then the user might lose those items). b) Or, create a temporary cart with only the selected items and then redirect to checkout with that cart. Approach (a) is simpler but has the downside of removing items from the cart. We can restore them if the user comes back? Not ideal. Approach (b) is more complex but user-friendly. We can use session to store the original cart, then create a temporary cart with selected items and proceed to checkout. After checkout, we can restore the original cart? But note: the user might not come back. Alternatively, we can use the following approach: 1. On the cart page, when the user selects some items and clicks "Proceed to Checkout", we intercept the click. 2. We send an AJAX request to the server with the selected product keys (or cart item keys). 3. On the server, we create a new cart in the session (or temporary cart) that contains only the selected items. 4. Then, we redirect the user to the checkout page with the temporary cart. However, this approach might be complex because we have to manage temporary carts and then merge back after checkout? But what if the user abandons checkout? We have to clean up. Alternatively, we can use the following simpler method: We can use a custom field in the cart item to mark it as selected or not. Then, during the checkout process, we remove the unselected items. But note: the cart page would still show all items until the next page load. But the requirement is to have the cart page show the total for selected items only? And then when they go to checkout, only selected items are there. We'll break it down: Step 1: Add checkboxes to the cart items in the cart page. We can override the WooCommerce cart template. Since we are using Woodmart, we should create a child theme and override the template. Template to override: `woocommerce/cart/cart.php` or more specifically, the item row. In Woodmart, the cart item template might be located in the theme's `woocommerce` folder. Alternatively, we can use hooks. We'll use the hook `woocommerce_after_cart_item_name` to add a checkbox. Step 2: Update the cart total when checkboxes are checked/unchecked. We'll use JavaScript to calculate the total of selected items and update the displayed total. However, note that the actual cart total in WooCommerce remains unchanged until we update the cart. We don't want to update the cart until the user explicitly does so (like clicking "Update Cart") because removing items would require a page reload. But we don't want to remove items from the cart until they proceed to checkout. So we are just showing a "virtual" total for the selected items. Step 3: When the user clicks "Proceed to Checkout", we need to remove the unselected items from the cart. We can do this by: - Intercepting the "Proceed to Checkout" button click. - Collecting the keys of the unselected cart items. - Sending an AJAX request to remove those items from the cart. - Then redirecting to checkout. But note: if the user then goes back to the cart, the items are gone. We can store the removed items in a session and restore them if they come back? That might be complex. Alternatively, we can use a different approach: when the user clicks "Proceed to Checkout", we create a temporary order with only the selected items and then redirect to checkout for that temporary order? That's not standard. Given the complexity, I propose a simpler approach that might meet the requirement: We'll add a new button next to "Proceed to Checkout" that says "Checkout Selected Items". When clicked, we will: 1. Use JavaScript to collect the cart item keys of the selected items. 2. Then, set a cookie or sessionStorage with these keys. 3. Redirect the user to a custom URL that triggers a PHP function to remove the unselected items from the cart. But then, after checkout, we need to restore the cart? Or if the user cancels? We can store the entire cart in a session and then restore it after checkout or when returning to the cart. However, this is a multi-step process and might be error-prone. Alternatively, we can use the following method: - On the cart page, we have the checkboxes. - We add a button "Update Cart and Checkout Selected" that does: * Update the cart: remove the unselected items and then redirect to checkout. But then the user loses the unselected items? We can store them in a session and then if they come back to the cart, we restore. How to store the entire cart in a session? We can use `WC()->session` to store the full cart when they remove items for checkout. Steps: a) When the user clicks "Checkout Selected", we store the current cart in a session variable (as an array of cart contents). b) Then, we remove the unselected items and redirect to checkout. c) On returning to the cart (if they cancel the order), we check if there is a stored cart and restore it. But note: what if they complete the order? Then we should clear the stored cart. We can set a flag in the session to know when to restore. This is complex but doable. Given the complexity and the fact that this is a custom requirement, we'll break it into parts. Let's start with the first part: adding checkboxes and updating the displayed total without actually updating the cart. Implementation Plan: Part 1: Add Checkboxes to Cart Items We'll use the hook `woocommerce_after_cart_item_name` to add a checkbox. But note: this hook is inside the table row and might not be the best place. Alternatively, we can use `woocommerce_cart_item_name` but that would be before the product name. We can also use `woocommerce_cart_item_subtotal` to add after the price? Or we can override the template. Since Woodmart is a theme, we should look for the template that renders the cart item. In Woodmart, the cart template is located in: `wp-content/themes/woodmart/woocommerce/cart/` We are going to copy the relevant template to our child theme and then modify it. The template for cart items is: `cart-item.php` We'll add a checkbox at the beginning of the cart item row. Example: In `cart-item.php`, after the opening `<tr>` and before the first `<td>`, we can add: ```php <td class="product-select"> <input type="checkbox" name="cart_item_selected[]" value="<?php echo esc_attr( $cart_item_key ); ?>" checked /> </td> ``` Then, we need to adjust the table headers to include a "Select" column. We also need to override `cart.php` to add the header for the new column. Alternatively, we can use JavaScript to add the checkboxes without overriding templates? But that might be less reliable. We'll go with overriding the template. Steps for template override: - Create a child theme if not already done. - Copy `woodmart/woocommerce/cart/cart.php` to `child-theme/woocommerce/cart/cart.php` - Copy `woodmart/woocommerce/cart/cart-item.php` to `child-theme/woocommerce/cart/cart-item.php` In `cart.php`: Find the table header (`<thead>`) and add a new `<th>` for "Select" at the beginning. Example: <thead> <tr> <th class="product-select"><?php esc_html_e( 'Select', 'woocommerce' ); ?></th> ... existing headers ... </tr> </thead> In `cart-item.php`: Add a new `<td>` at the beginning of the row with the checkbox. Part 2: JavaScript to update the displayed total for selected items. We'll add a script that: - Listens to changes on the checkboxes. - For each checked item, it adds the item's subtotal to the total. - Updates a display element with the new total. But note: the cart page already shows the cart total. We want to show two totals: one for the entire cart and one for the selected items? Or replace the total with the selected total? We'll add a new row for "Selected Total". We can add a row in the cart totals table for selected items. We'll use a hook to add a row after the cart totals table. Hook: `woocommerce_cart_totals_after_order_total` But we don't want to update the actual cart totals, only display a virtual total. Alternatively, we can add a new table above or below the cart that shows the selected total and a button to checkout selected. We'll add: <tr class="selected-total"> <th><?php esc_html_e( 'Selected Total', 'woocommerce' ); ?></th> <td data-title="<?php esc_attr_e( 'Selected Total', 'woocommerce' ); ?>"> <span class="selected-total-amount"><?php wc_cart_totals_selected_total_html(); ?></span> </td> </tr> But we don't have such function. We'll create a custom function to calculate the selected total and then update it via JavaScript. We'll also add a button for "Proceed to Checkout (Selected Items)". We'll put this button next to the existing checkout button. Steps: - In `cart.php`, we'll add a new row in the cart actions for our custom button. Alternatively, we can add the button via JavaScript. Let's write the JavaScript: We'll calculate the selected total by iterating over the checked checkboxes and summing the subtotal of each. How to get the subtotal for an item? We can store the subtotal in a data attribute on the row or on the checkbox. In `cart-item.php`, when rendering the item row, we can add a data attribute to the row with the item's subtotal. <tr class="woocommerce-cart-form__cart-item" data-item-key="<?php echo esc_attr( $cart_item_key ); ?>" data-item-subtotal="<?php echo esc_attr( $cart_item['line_subtotal'] ); ?>"> Then, in JavaScript: $('input[name="cart_item_selected[]"]').change(function() { var selectedTotal = 0; $('input[name="cart_item_selected[]"]:checked').each(function() { var itemKey = $(this).val(); var row = $(this).closest('tr'); var subtotal = parseFloat(row.data('item-subtotal')); selectedTotal += subtotal; }); // Update the selected total display $('.selected-total-amount').text(selectedTotal.toFixed(2)); }); But note: the subtotal might be displayed including tax or excluding tax? We are using the line subtotal which is without tax by default. We should use the same as the cart total display. The cart total row in the table shows the total including tax? It depends on the tax settings. We can use the same method as the cart total row: `wc_cart_totals_order_total_html` uses the total including tax if set. We might need to calculate tax? This could get complicated. Alternatively, we can use the displayed subtotal for the item. We can get the value from the subtotal cell. In the row, there is a cell with class `product-subtotal` that has the formatted subtotal. We can parse that. Example: var subtotalText = row.find('.product-subtotal .amount').text(); var subtotal = parseFloat(subtotalText.replace(/[^0-9.,]/g, '').replace(',', '.')); But this is fragile and might break with different currency formats. We can store the raw subtotal (without formatting) in a data attribute and then format it on the frontend? But we have to consider the same formatting as WooCommerce. Alternatively, we can use the data attribute and then format the number to match the shop's currency. We'll get the raw subtotal (without tax) and then if the shop displays prices including tax, we need to add the tax? This is getting too complex. Let's change our approach: we don't need to recalculate the total with tax because the cart total row already includes tax. We are only interested in the line total without tax? But the cart total row is the sum of line totals plus taxes and fees. We can avoid this by not showing the tax breakdown and just showing the same as the cart total but for selected items? That would require recalculating the entire cart for selected items including tax, which is not trivial. Given the complexity, we might want to avoid this and instead only update the total when the user actually proceeds to checkout? Or we can do an AJAX call to the server to calculate the selected total including tax? But that would be heavy. Alternatively, we can show the subtotal without tax and then a note that tax will be added at checkout? That might be acceptable. We'll go with the line subtotal without tax for the selected total display. Then, in the selected total row, we can display it as "Selected Subtotal" and then note that tax will be added. We'll change the label to "Selected Subtotal". And then when the user proceeds to checkout, they will see the actual total including tax on the checkout page. Part 3: Checkout for selected items. We'll add a button: <button type="button" id="checkout-selected">Proceed to Checkout (Selected Items)</button> We'll intercept the click on this button. Steps: $('#checkout-selected').click(function() { // Collect the keys of the selected items var selectedKeys = []; $('input[name="cart_item_selected[]"]:checked').each(function() { selectedKeys.push($(this).val()); }); // Store the selected keys in a form and submit or use AJAX // We are going to submit a form that will remove the unselected items and then redirect to checkout. // We can set the selected keys in a hidden field and then submit a form. // But note: we have to remove the unselected items from the cart. // We can create a form that posts to the cart page with the action to remove unselected items. // We'll create a hidden form. // Create a form var form = $('<form>', { action: '<?php echo esc_url( wc_get_cart_url() ); ?>', method: 'post' }); // Add the selected keys as hidden fields $.each(selectedKeys, function(index, key) { form.append($('<input>', { type: 'hidden', name: 'selected_items[]', value: key })); }); // Add a nonce for security? We'll have to generate one in PHP and pass to JS. // We'll create a nonce for our action and add it as a hidden field. form.append($('<input>', { type: 'hidden', name: 'checkout_selected_nonce', value: '<?php echo wp_create_nonce( "checkout-selected" ); ?>' })); // Also, we need to tell the server to remove the unselected items and then redirect to checkout. form.append($('<input>', { type: 'hidden', name: 'action', value: 'checkout_selected' })); $('body').append(form); form.submit(); }); Then, on the server, we handle the form submission: add_action('template_redirect', 'handle_checkout_selected'); function handle_checkout_selected() { if (isset($_POST['action']) && $_POST['action'] === 'checkout_selected') { // Verify nonce if (!isset($_POST['checkout_selected_nonce']) || !wp_verify_nonce($_POST['checkout_selected_nonce'], 'checkout-selected')) { wc_add_notice('Invalid request.', 'error'); return; } $selected_keys = isset($_POST['selected_items']) ? $_POST['selected_items'] : array(); // Store the current cart in the session so we can restore it later $cart = WC()->cart->get_cart(); WC()->session->set('checkout_selected_original_cart', $cart); // Remove the items that are not in the selected keys foreach ($cart as $cart_item_key => $cart_item) { if (!in_array($cart_item_key, $selected_keys)) { WC()->cart->remove_cart_item($cart_item_key); } } // Now, redirect to checkout wp_safe_redirect(wc_get_checkout_url()); exit; } } Then, we need to restore the cart if the user comes back without completing the order? We can do that on the cart page. add_action('wp_loaded', 'restore_original_cart'); function restore_original_cart() { // If we are on the cart page and there is a stored cart, restore it if (is_cart() && ($original_cart = WC()->session->get('checkout_selected_original_cart'))) { // Check if the current cart is empty? Or we can always restore? // We want to restore only if the user hasn't added new items? // We'll restore the original cart and then remove the stored cart. WC()->cart->cart_contents = $original_cart; WC()->cart->calculate_totals(); WC()->session->set('checkout_selected_original_cart', null); } } But note: what if the user completes the order? Then we don't want to restore. We can clear the stored cart on the thankyou page. add_action('woocommerce_thankyou', 'clear_original_cart'); function clear_original_cart() { WC()->session->set('checkout_selected_original_cart', null); } However, if the user abandons checkout and goes back to the cart, we restore. But if they go to the shop and add more items, we should not restore? We can set a flag. We'll only restore the cart if the stored cart exists and the current cart is empty? Or we can restore only once. We'll restore only when the user comes back to the cart page and the stored cart exists. But note: if the user adds items after restoring, we don't want to restore again. So we clear the stored cart when we restore. We are setting the stored cart to null after restore. This should work. However, there is a caveat: if the user goes directly to the checkout page and then back to cart, we restore. But if they go to the shop and then cart, we restore? That might be acceptable. Also, what if the user has two tabs? We are storing the cart in the session. It might be overwritten. This solution is a bit fragile but should work for most cases. We'll code accordingly. Summary of Steps: Part 1: Templates - Override `cart.php` and `cart-item.php` to add the select column. Part 2: JavaScript for selected total display and button click. Part 3: PHP to handle the form submission for selected checkout and restore the cart. Let's write the code accordingly. Note: This is a simplified version and might need adjustments for the Woodmart theme. We'll start with the template overrides. Due to the complexity and length, we'll break the code into sections. Step-by-step code: Step 1: Override cart.php and cart-item.php in child theme. Step 2: Modify cart.php to add the header column. Step 3: Modify cart-item.php to add the checkbox in a new column. Step 4: Enqueue a JavaScript file for the cart page. Step 5: Add the selected total row and the custom button in cart.php. Step 6: Write the JavaScript for updating the selected total and handling the button click. Step 7: Write the PHP functions for handling the form submission and restoring the cart. Let's write the code. Note: We are using hooks and filters in functions.php of the child theme. Due to the complexity, we'll provide the code in parts. IMPORTANT: This is a custom solution and might require debugging and adjustments for your specific setup. Let's proceed.</think>To implement a selective checkout with checkboxes in your WooCommerce/Woodmart cart page, follow this comprehensive solution. This approach uses a combination of template overrides, JavaScript, and WooCommerce hooks. ### Step 1: Add Checkboxes to Cart Items Override the Woodmart cart template by creating these files in your child theme: `wp-content/themes/child-theme/woocommerce/cart/cart.php` `wp-content/themes/child-theme/woocommerce/cart/cart-item.php` **Modified `cart.php` (Add header column):** ```php <thead> <tr> <th class="product-select"><?php esc_html_e('Select', 'woocommerce'); ?></th> <!-- Keep existing headers --> </tr> </thead> ``` **Modified `cart-item.php` (Add checkbox):** ```php <tr class="woocommerce-cart-form__cart-item"> <td class="product-select"> <input type="checkbox" class="cart-item-selector" name="cart_item_selected[<?php echo esc_attr($cart_item_key); ?>]" checked data-item-key="<?php echo esc_attr($cart_item_key); ?>" data-price="<?php echo esc_attr($product->get_price()); ?>"> </td> <!-- Keep existing item markup --> </tr> ``` ### Step 2: Add Selected Total Section Insert this before the checkout button in `cart.php`: ```php <div class="selected-items-total"> <h3><?php esc_html_e('Selected Items Total', 'your-textdomain'); ?></h3> <p> <strong><?php esc_html_e('Subtotal:', 'woocommerce'); ?></strong> <span id="selected-subtotal"><?php wc_cart_totals_subtotal_html(); ?></span> </p> <button type="button" id="proceed-selected-checkout" class="button alt"> <?php esc_html_e('Checkout Selected Items', 'woocommerce'); ?> </button> </div> ``` ### Step 3: Add JavaScript Logic Create `js/custom-cart.js` in your child theme and enqueue it: **JavaScript File:** ```javascript jQuery(function($) { // Update selected total when checkboxes change $('.cart-item-selector').change(function() { let selectedTotal = 0; $('.cart-item-selector:checked').each(function() { const price = parseFloat($(this).data('price')); const qty = parseFloat($(this).closest('tr').find('.qty').val()); selectedTotal += price * qty; }); $('#selected-subtotal').html('$' + selectedTotal.toFixed(2)); }); // Handle selected checkout $('#proceed-selected-checkout').click(function() { const selectedItems = []; $('.cart-item-selector:checked').each(function() { selectedItems.push($(this).data('item-key')); }); // Send to server via AJAX $.ajax({ type: 'POST', url: wc_cart_params.ajax_url, data: { action: 'process_selected_checkout', selected_items: selectedItems, security: wc_cart_params.cart_nonce }, success: function(response) { window.location.href = wc_cart_params.checkout_url; } }); }); }); ``` ### Step 4: PHP Backend Handling Add this to your child theme's `functions.php`: ```php // Process selected checkout add_action('wp_ajax_process_selected_checkout', 'process_selected_checkout'); add_action('wp_ajax_nopriv_process_selected_checkout', 'process_selected_checkout'); function process_selected_checkout() { check_ajax_referer('woocommerce-cart', 'security'); if (!empty($_POST['selected_items'])) { WC()->session->set('selected_checkout_items', $_POST['selected_items']); wp_send_json_success(); } wp_send_json_error(); } // Filter cart contents before checkout add_filter('woocommerce_get_cart_contents', 'filter_cart_contents_for_checkout'); function filter_cart_contents_for_checkout($cart_contents) { if (is_checkout() && $selected_items = WC()->session->get('selected_checkout_items')) { foreach ($cart_contents as $key => $item) { if (!in_array($key, $selected_items)) { unset($cart_contents[$key]); } } WC()->session->__unset('selected_checkout_items'); } return $cart_contents; } ``` ### Step 5: Enqueue Scripts Add this to `functions.php`: ```php add_action('wp_enqueue_scripts', 'enqueue_cart_scripts'); function enqueue_cart_scripts() { if (is_cart()) { wp_enqueue_script('custom-cart', get_stylesheet_directory_uri() . '/js/custom-cart.js', array('jquery', 'wc-cart'), '1.0', true ); wp_localize_script('custom-cart', 'wc_cart_params', array( 'ajax_url' => admin_url('admin-ajax.php'), 'cart_nonce' => wp_create_nonce('woocommerce-cart'), 'checkout_url' => wc_get_checkout_url() )); } } ``` ### Key Features Explained: 1. **Checkbox Integration** Added to each cart item with price data attributes for calculations. 2. **Dynamic Total Calculation** JavaScript recalculates subtotal when checkboxes change. 3. **AJAX Processing** Selected items are sent to server before checkout redirection. 4. **Session-Based Filtering** Uses WooCommerce sessions to temporarily modify cart contents only during checkout. 5. **Themes Compatibility** Uses proper template overrides to maintain Woodmart styling. ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值